py2many.py --rust=1 test.py
rustc -O test.rs
$ time -p ./test.py
iterations 3
sum 1.4999999709476166e+17
real 436.55
user 435.45
sys 1.08
$ time -p ./test 3
iterations 3
sum 1.500000E+17
real 4.94
user 4.67
sys 0.25
Pyccel https://github.com/pyccel/pyccel translates Python3 to C or Fortran and is intended for numerical Python code. I have played with it, and it works pretty well.
I like the idea, but it's seems a little premature to show it, since there's very little information. For example, what is the supported subset? Are there any divergences in behavior? (for example, are the dicts always ordered?)
Also, just wondering how modular it is. How hard would it be to add another target, say Javascript?
Looking for feedback here. How many programmers actually know this and expect it? Is it worth the extra complexity when translating to static languages which don't provide this guarantee?
From an implementation perspective, doing it for the ordereddict special case is much simpler.
I think you can get away with keeping it unordered for 95% of the code. But the remaining 5% are going to fail in very confusing, and possibly inconsistent ways.
14 comments
[ 0.71 ms ] story [ 582 ms ] threadhttps://github.com/adsharma/py2many/tree/main/tests/cases https://github.com/adsharma/py2many/tree/main/tests/expected
100x speedup on this benchmark
http://www.hildstrom.com/projects/langcomp/index.html#test-p...
Also, just wondering how modular it is. How hard would it be to add another target, say Javascript?
JavaScript is possible via python to dart to JavaScript.
Adding another backend is easy, given there are 7 backends already.
Are dicts ordered? Not by default. It should be possible to translate Python's ordereddict to one in the target language.
Just mapping max/min was hard enough. In some languages max(1,2) produces a float!
E.g. https://mail.python.org/pipermail/python-dev/2017-December/1...
From an implementation perspective, doing it for the ordereddict special case is much simpler.
Bringing it to the same level as other languages is probably several weeks of work. Pull requests welcome.
Please add details if any
https://github.com/adsharma/py2many/pull/204
Also added this benchmark as a test case, so we don't regress.