On Wed, May 2, 2018 at 11:06 AM, Denis Kudriashov <dionisiydk@gmail.com> wrote:
Hi.
Maybe #parseSourceCode would be better name for #parseTree.
I've always found it good advice to avoid using a verb phrase to name something which does not entail some kind of action. #parseSourceCode realy reads like something which would parse the source code. #parseTree also has that effect, except for the lack of a tree to parse.
2018-05-02 16:33 GMT+03:00 Marcus Denker <marcus.denker@inria.fr>:
On 27 Apr 2018, at 21:36, Sean P. DeNigris <sean@clipperadams.com> wrote:
Marcus Denker-4 wrote
I will add commentsâ¦
I got confused by this again and created an issue: https://pharo.manuscript.com/f/cases/21806/Document-Differen ce-between-ast-and-parseTree
And then Peter Uhnak reminded me on Discord about this thread. I'm happy to add the comments, but not sure I understand the issue well enough. IIUC #ast is cached, but #parseTree is not. What I don't understand is the purpose of this difference and when one would use one over the other.
the cached #ast is for one interesting for speed (that is, in situations where you ask for it often).
The other use-case is if you want to annotate the AST and keep that annotation around (till the next image save, but you can subscribe to ASTCacheReset and re-install the AST in the cache after cleaning. (This is used by MetaLinks to make sure they survive image restart).
The last thing that it provides is that we do have a quite powerful mapping between bytecode/text/context and the AST. Regardless how you navigate, you get the same object.
e.g. even this one works:
[ 1+2 ] sourceNode == thisContext method ast blockNodes first
For example, when, if ever, would a user want to access a CM's #ast (as opposed to #parseTree) and could modifying it create problems?
Modification is a problem, yes.. code that wants to modify the AST without making sure the compiledMethod is in sync later should use #parseTree.
Code that does not modify the AST (or makes sure to compile it after modification) is free to use #ast. or if you want to annotate the AST (which is a modification, after all).
This is not perfect (not at allâ¦) but the simplest solution to get (to some extend) what you would have if the system would have a real persistent, first class ASTâ¦
To be improved. The ASTCache with itâs naive âlets just cache everything till the next image saveâ was done with the idea to see when it would show that it is too naive⦠for that it worked amazingly well till now.
Marcus