iFDING
03/18/2017
A script, text file of statements, m.py
m.py (sourcecode) --> m.pyc (bytecode) --> Python Virtual Machine
The PVM is just a big code loop that iterates through byte code instructions, one by one, to carry out operations.
The PVM is the running engine of Python.
It is always present as part of the Python system, it's the component that truly runs your scripts.
It's just the last step of what is called the "Python interpreter".
There is usually no build or "make" step in Python work: code runs immediately after it is written
Python byte code is not binary machine code(e.g., instructions for an Intel or ARM chip), Byte code is a Python-specific representation.
This is why some Python code may not run as fast as C or C++ code, the PVM loop, not the CPU chip, still must interpret the byte code, and byte code instructions require more work than CPU instructions.
Unlike in classic interpreters, there is still an internal compile step - Python does not need to renalyze and reparse each source statement's text repeatedly.
There is really no distinction between the development and execution environments.
The systems that compile and execute source code are really one and the same.
In Python, the compiler is always present at runtime and is part of the system that runs programs.
A much more rapid development cycle, there is no need to precompile and link before execution may begin, simply type and run the code.
Users can modify the Python parts of a system onsite without needng to have or compile the entire system's code.
There is no initial compile-time phase at all, and everything happens as the program is running.
This even includes operations such as the creation of functions and classes and the linkage of modules.
Such events occur before execution in more static languages, but happen as programs execute in Python.
JITs: just-in-time compilers for Python bytecode, Psyco, the original JIT compiler
Frozen binaries, it's possible to turn Python programs into true executables, see Py2exe (windows), PyInstaller (Linux & Mac OS X), py2app(Mac), freeze(original), cx_freeze
Other VMs: PyPy (Python VM in Python), Parrot (language neutral, pies)...
CPython: the standard implementation(coded in C)
Jython: python for the Java Platform
IronPython: providing with the power of the .NET Framework.
PyPy: a replacement for CPython for speed, the main reason is speed, faster.
Stackless: Python for concurrency, microthreads, avoid much of overhead associated with usual operating system threads.
Others: Numba(JIT+types), Cython(Python/C hybrid), Pythran(Py->C++), Shed Skin (Python-to-C++ translator)...
Program = multiple.py text files
One is the "main" top-level file: launch to run
Others are "modules": libraries of tools
Some modules come from the "standard library"
Modules accessed and linked by imports: "import module"
- Import = find it, compile it (maybe), run it(once)
Attributes fetched from objects: "module.attr"
- Variables inside objects (including modules)
b.py
def func():
......
a.py
import b
b.func()

