fuzziqersoftware/nemesys
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
nemesys is a just-in-time (JIT) compiler for the Python programming language. This project is what happens when someone who has never written a compiler or taken a computer languages or compilers class writes a compiler. The goals of this project are fun and learning, not necessarily to contribute anything of value to the world. If you're a student looking for an example of well-designed compiler, this is not such an example. See notes/design.md for specifics on how the compiler is implemented and its various behavioral quirks. Here's what nemesys does: - Function calls and control flow statements like if, for, while, etc. - Fast integer math. - Floating-point math. - Strings, lists, and tuples. - Classes and basic inheritance (no multiple inheritance yet). - Refcounted garbage collection. - Custom class destructors (__del__). - Exceptions. - Lambdas and non-closure private functions. - Function polymorphism. - Dicts, kind of (a lot of features don't work). Here's what nemesys doesn't do yet, but will in the future: - Sets. - Variadic functions. - Recursion. - Multiple inheritance. - Decorators. - Most built-in functions. - Generators and coroutines. - Magic methods on classes (except __init__ and __del__, which are implemented). Here's what nemesys doesn't do yet, but could in the future: - Interactive shell interface. - Closures. - Return statements inside finally blocks. - Support the CPython C API. - Optimize its generated assembly code. - Build and run on architectures other than AMD64. Here's what nemesys will probably never be able to do: - Assign arbitrary attributes to objects after construction time. - Polymorphic variables within a scope (except to/from None). - Metaclasses. - Negative exponents for integer bases. Just do 1/(a**b) instead. Have fun. If you try this and something doesn't work, feel free to complain at me unless it's already mentioned in the above lists.