-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
An Implementation in Python with a Compiler #653
base: master
Are you sure you want to change the base?
Conversation
This took me a while.. and I need to redo the other operators. So far only def! and +-*/ works.
Make it verbose and more easily debuggable.
I feel the compiler should do more work, other than just delegating.
1. COMPILE now takes ast of function type. 2. Support eval and debugger toggle.
(by cheating I mean deferring compilation)
Made some changes that I don't fully understand. It's not working yet. I think I know what to do in the following ocmmits.
It's still a mess and unusable now. But I know what to do now. When an AST (A) gets compiled, the end result is a code (C) to be executed. Execution of C should return a *closure* (not a function, which I've been doing, which is wrong), that holds a slot telling the function where to look for literals (e.g. scalars, functions, objects.. etc). So far I've been trying to save those literals in a global constant _consts. It was why my code failed so far because some compiled ASTs may be alive even after the next compilation. As a consequence, as they are reading from the global _consts, they read the wrong data.
The closure way is the right way to go. Woo hoo :)
make "test^python-compile^step6"
Pass test 4, 5 (except the last one), 6.
test^python-compile^step3~7
@jcguu95 If it can be restructured to fit the code layout of other implementations (https://github.com/kanaka/mal/blob/master/docs/FAQ.md#code_split) then I would be willing to consider merging it. Otherwise, if that's too complicated or unwieldy then keeping it separate is probably best. Although I would be happy to include a link to it in the top level README if you like in the "External Implementations" section. |
Hello Joel Martin! Thanks for your inspiring work! Based on your python implementation, I implemented a compiled version:
python-compile
. It passes all relevant tests (forstep2
tostepA
, regular and soft), and it is 16 times faster per the performance test suite.Would you like to merge this, or would you rather keep this maintained separately? Please let me know.
Cheers,
Jin