Re: [RFC] Introduce Abstract Syntax Tree
| From: | Andrea Faulds | Date: | Thu, 31 Jul 2014 19:03:14 +0000 |
| Subject: | Re: [RFC] Introduce Abstract Syntax Tree | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-76298@lists.php.net to get a copy of this message | ||
On 31 Jul 2014, at 19:11, Nikita Popov <nikita.ppv@gmail.com> wrote:
> 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:
Oh man, you got the implementation done? That makes me so happy. ^^
Like Sara, I am very, very much for this. There are so many potential benefits, and the only real
downside IMO (memory use and performance at parsing-time) is largely negated by using opcache, a
built-in feature of PHP. An AST is really the most obvious and best way to do compilation, IMO, and
as it so happens, I’ve used them in the past when implementing a programming language I designed.
A benefit I particularly like is we could perhaps add nicer generator expression and list()
syntaxes, as you have described. I can’t remember if you implemented the former. If you did, I’d
love it if you’d also propose it should ASTs get in, they’re an awesome feature and it is a
shame we didn’t get them when we got generators.
On another note, while we *could* allow extensions to hook into the AST, I’d stray away from
letting them modify it and implement new features. That really doesn’t sound like a good idea at
all (I could elaborate on why, but I won’t bother unless someone asks me). Letting them read it
would clearly be a good thing though. Side note: Would that obsolete your PHP-Parser userland
library once an extension allows reading the AST? If an extension is written, perhaps it should have
the same API as your library had. I believe many projects already use it.
On an *implementation* note, I assume this is based on the existing constant ASTs, unless you
renamed it to something other then zend_ast. Does this cause any problems for them? While I can see
the benefits of course, I’d just like to be sure that the validator doesn’t let anything slip
through.
It’s also nice to see zend_emit_op and _jump, I suspect they’ll make code easier to read
(currently I have to scan for the other operands sometimes as they’re not always set together).
Again, I really like this. I look forward to its inclusion. Thank you so much!
--
Andrea Faulds
http://ajf.me/