OK thanks. I'm switching to another task :) Thanks. Dmitry.
On Wed, Feb 18, 2015 at 10:16 AM, Joe Watkins <pthre...@pthreads.org> wrote: > Updated RFC as requested. > > I'm just going to wait to hear what Nikita says, especially about > optimizing away unqualified calls to assert. > I guess this could be viewed as a BC break, it seems like quite a nice > break but not sure. > > Will open voting when we hear from Nikita. > > Cheers > Joe > > On Wed, Feb 18, 2015 at 6:23 AM, Joe Watkins <pthre...@pthreads.org> > wrote: > >> Will update RFC today, thanks for working on it Dmitry :) >> >> Cheers >> Joe >> >> On Tue, Feb 17, 2015 at 9:50 PM, Dmitry Stogov <dmi...@zend.com> wrote: >> >>> Hi Joe >>> >>> The patch is ready https://github.com/php/php-src/pull/1088/files >>> >>> 1) I implemented AST pretty-printer to reconstruct the source. It may be >>> reused in Reflection and other places through >>> >>> ZEND_API zend_string *zend_ast_export(const char *prefix, zend_ast *ast, >>> const char *suffix); >>> >>> 2) zend.assertions=-1 - makes zero-cost asserts >>> >>> 3) assert() in a namespace leads to call a function defined in this >>> namespace (if it's defined), but zend.assertions is still may disable this >>> call or even prevent code generation for it. it's possible to use \assert() >>> to call the system function. >>> >>> Please, make update RFC, add notes about (2) and (3). >>> Then, it should be ready for voting. >>> >>> Nikita, please take a quick look over the patch. I hope, you don't have >>> objections. >>> >>> Thanks. Dmitry. >>> >>> >>> >>> >>> On Tue, Feb 17, 2015 at 6:51 PM, Dmitry Stogov <dmi...@zend.com> wrote: >>> >>>> >>>> >>>> On Tue, Feb 17, 2015 at 5:11 PM, Nikita Popov <nikita....@gmail.com> >>>> wrote: >>>> >>>>> On Mon, Feb 16, 2015 at 4:47 PM, Dmitry Stogov <dmi...@zend.com> >>>>> wrote: >>>>> >>>>>> Hi Nikita, >>>>>> >>>>>> it looks like a part of old implementation is not trivial with new >>>>>> AST compiler. >>>>>> >>>>>> previously we translated assert(condition) into assert(condition, >>>>>> "assert(condition)"). >>>>>> actually we just captured a part of input buffer and added missing >>>>>> string argument. >>>>>> >>>>>> Is there a simple way to do the same now? >>>>>> >>>>> >>>>> Not very simple, but we could store pointers/offsets to the start and >>>>> end of the fcall in the ast node, similar to what is done with lex_pos for >>>>> declarations: http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_ast.h#177 >>>>> >>>>> It would be nice if we could have precise offset information for all >>>>> nodes (this is particularly valuable if the ast is exposed to userland), >>>>> but that would increase memory usage during compilation, not sure if it's >>>>> worthwhile. >>>>> >>>>> >>>>>> It's possible to convert AST into string using recursive >>>>>> pretty-printer. >>>>>> It's not a simple task itself, but it may be reused for other things. >>>>>> >>>>> >>>> I went by this way... :) >>>> It must be ready soo. >>>> >>>> >>>>> >>>>>> Joe, the rest (including zero-cost assert) is implemented at >>>>>> https://github.com/php/php-src/pull/1088/files >>>>>> 9 related tests are failed for now. >>>>>> >>>>> >>>>> As this is implemented right now, it would require writing \assert() >>>>> in order to be zero-cost. Maybe we should disallow redefinition of assert >>>>> as a namespaced function, so we can always optimize this? >>>>> >>>> >>>> good catch. >>>> >>>> Thanks. >>>> >>>> >>>>> >>>>> Nikita >>>>> >>>> >>>> >>> >> >