Hacker News new | ask | show | jobs
by m-ou-se 2611 days ago
Author here. Let me know if you have any questions. :)
2 comments

How does this interact with Rust memory safety? I am not familiar with the PyToObject trait, so I am guessing that this has some kind of safety wrapper?
In Python, all data (even simple integers) are all allocated on the heap. ToPyObject makes a deep copy of everything, converting everything to `PyObject` on the heap, so all data is owned.

The numpy crate helps if you need to convert large arrays to Python, as numpy does not store every element separately on the heap.

> In Python, all data (even simple integers) are all allocated on the heap.

Total sidebar, this leads to one of my favourite programming language "quirks" - you can redefine the value of 1! http://hforsten.com/redefining-the-number-2-in-python.html

Does every invocation create a new Python instance, and global namespace, etc?
It uses the same Python interpreter, but each macro invocation is considered its own module. A later version of the crate will have the possibility to keep the context around to be re-used by a later invocation such that, for example, you don't need to import things again.
So this doesn't actually compile any Python, it just launches a Python interpreter when it encounters Python code?

If I have many threads running Python code will it launch a new interpreter for each thread?

Does it use Python 2 or 3?

Thanks! I might actually use this sometime for scrap code that I'm writing to test stuff.

It doesn't translate Python to Rust or anything like that, it uses CPython both to compile to Python bytecode and to run it. It doesn't launch a separate interpreter, the interpreter is used as a library, so runs in the same process.

Python doesn't really do multithreading: https://wiki.python.org/moin/GlobalInterpreterLock

It uses Python 3 of course. Using Python 2 these days would be a crime.