Hi Nikita, I think RFC misses few important notes about behavior changes:
1) The behavior of $a->$b[$c] is changed. PHP apps that used such syntax have to be changed into $a->{$b[$c]}. 2) The evaluation order of left and right parts of assignment is changed. $a[$i++] = $a[$i++]; It wasn't guaranteed before, but it may break some code anyway. 3) $a=[1,2]; list($a,$b) = $a; won't work in the same way as before 4) Usage of undefined constants now leads to fatal errors? (see Zend/tests/use_const/no_global_fallback.php) 5) The patch also enables expressions on constant arrays e.g. isset(arra(1,2,3)[$x]); Personally, I would prefer to separate syntax and behavior changes from the AST patch itself or at least don't miss such changes, because they must be very significant from users point of view. Also some implementation related notes: - Changes to Zend/tests/bug43450.phpt are unrelated to AST. It's just a bad test that may be fixed separately. - I didn't get why you deleted Zend/tests/errmsg_014.php - ZEND_INIT_FCALL_BY_NAME handler shouldn't check if constant operand is a string. Compiler must not provide non-string constant operand. (All the changes to ZEND_INIT_FCALL_BY_NAME need to be verified more careful) - The same in ext/opcache/Optimizer/optimize_func_calls.c, but it's not critical here. - I think you don't need IS_CONST operand for ZEND_ISSET_ISEMPTY_PROP_OBJ handler. - Can OPcahce always keep AST in shared memory and don't copy it into process memory on each request? (ext/opcache/zend_accelerator_util_funcs.c) Thanks. Dmitry. On Thu, Jul 31, 2014 at 10:11 PM, Nikita Popov <nikita....@gmail.com> wrote: > Hi internals! > > I've created a draft RFC and implementation for the introduction of an > Abstract Syntax Tree (AST) as an intermediate structure in our compilation > process: > > https://wiki.php.net/rfc/abstract_syntax_tree > > The RFC outlines why an AST is beneficial, how it impacts performance and > memory usage of the compile process and what changes to syntax or behavior > it introduces. > > Furthermore the RFC contains an outline of how the current implementation > works and what APIs it provides. This section is just an overview and I > hope to extend it in the future. > > Note: I'm on vacation as of tomorrow and wanted to put this up to > discussion beforehand. I won't be able to implement any feedback while I'm > away, but can of course answer questions :) > > Thanks, > Nikita >