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
>>>>
>>>
>>>
>>
>

Reply via email to