- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 3k
Mypyc Implementation Overview
Mypyc compiles a Python module (or a set of modules) to C, and compiles the generated C to a Python C extension module (or modules). You can compile only a subset of your program to C -- compiled and interpreted code can freely and transparently interact. You can also freely use any Python libraries (including C extensions) in compiled code.
Mypyc will only make compiled code faster. To see a significant speedup, you must make sure that most of the time is spent in compiled code -- and not in libraries, for example.
Mypyc has these compilation passes:
- 
Type check the code using mypy and infer types for variables and expressions. This produces a mypy AST (defined in mypy.nodes) and a type map that describes the inferred types (mypy.types.Type) of all expressions (as PEP 484 types).
- 
Translate the mypy AST into a mypyc-specific intermediate representation (IR). - The IR is defined in mypyc.ir(see here for an explanation of the IR).
- Various primitive operations used in the IR are defined in mypyc.primitives.
- The translation to IR happens in mypyc.irbuild. The top-level logic is inmypyc.irbuild.main.
 
- The IR is defined in 
- 
Insert checks for uses of potentially uninitialized variables ( mypyc.transform.uninit).
- 
Insert exception handling ( mypyc.transform.exceptions).
- 
Insert explicit reference count inc/dec opcodes ( mypyc.transform.refcount).
- 
Infer always defined attributes that don't require checking for a missing value on read ( mypyc.analysis.attrdefined).
- 
Translate the IR into C ( mypyc.codegen).
- 
Compile the generated C code using a C compiler ( mypyc.build).
Details of the mypyc implementation are described in these pages: