kanaka / mal

mal - Make a Lisp
Other
10k stars 2.53k forks source link

An Implementation in Python with a Compiler #653

Open jcguu95 opened 5 months ago

jcguu95 commented 5 months ago

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 (for step2 to stepA, regular and soft), and it is 16 times faster per the performance test suite.

[./mal]$ make "perf^python"
----------------------------------------------
Performance test for python:
Running: env STEP=stepA_mal MAL_IMPL=js python_MODE=python ../python/run ../tests/perf1.mal
Elapsed time: 1 msecs
Running: env STEP=stepA_mal MAL_IMPL=js python_MODE=python ../python/run ../tests/perf2.mal
Elapsed time: 4 msecs
Running: env STEP=stepA_mal MAL_IMPL=js python_MODE=python ../python/run ../tests/perf3.mal
iters over 10 seconds: 9311

[./mal]$ make "perf^python-compile"
----------------------------------------------
Performance test for python-compile:
Running: env STEP=stepA_mal MAL_IMPL=js ../python-compile/run ../tests/perf1.mal
Running: env STEP=stepA_mal MAL_IMPL=js ../python-compile/run ../tests/perf2.mal
Running: env STEP=stepA_mal MAL_IMPL=js ../python-compile/run ../tests/perf3.mal
iters over 10 seconds: 148519

Would you like to merge this, or would you rather keep this maintained separately? Please let me know.

Cheers, Jin

kanaka commented 1 month ago

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