cinder
cinder copied to clipboard
2021 H2 static Python roadmap
Usability
- [P0] Make static python consumable easily for any Cinder user
- Module loader in cinder
- Consolidate rewriter logic into static compiler (out of strict modules)
- minimum runtime version for static pycs
- [P0] Make static python type checker run as a linter
- [P0] Fix module dependency tracking for pyc invalidation
- [P1] Support Enums defined in static modules
- [P1] Expand Static Python reference guide
- How to improve perf: primitives, CheckedDict...
- Things that aren’t supported: multiple inheritance, metaclasses...
- Gotchas: cbool comparison results
- [P1] Don’t JIT all static functions
- As we adopt more code into Static Python, not all static functions will be hot enough to deserve JIT, this should be left up to the JIT list to determine.
- [P1] support prod_assert
- [P1] support primitive floats
- [P1] cross-module import always sees consistent (DeclarationVisit only) view of imported module types
- [P1] fix patching of static functions with compatible but keyword-requiring signatures
- [P2] improve type inference of primitive int literals
Performance
- [P0] CheckedList
- [P0] Optimize calls to types
- [P0] Improved descriptor support:
- Properties
- Cached properties
- class methods
- [P1] Primitives in method calls
- [P1] Primitives in type calls
- [P1] More typed built-in methods
- [P1] Dataclass intrinsic
- [P1] Run declaration visitor on nonstatic dependency code and stubs so we can generate invokes against them
- make sure the failure mode is appropriate Python error, not crash
- also emit CAST on return value (helps with narrowing and Pyre compat for usability)
- [P1] Support for runtime-checking small unions
- [P1] avoid checking types of default argument values
- [P1] return type of async functions
- type-specialized await?
- eager evaluation?
- [P1] type-preserving user-defined decorators (util.etc, statsd.timer)
- [P1] Declarable Exact types
- Unlocks more non-GC containers, can declare they contain only Exact[str], which is non-GC
- Unlocks other optimizations and statically known types also, subclasses of Python builtins can do crazy things
- [P2] inlining decorators at compile time
- [P2] Fixed size arrays
- [P2] Perhaps some exploratory work around object lifetimes? Would be great to get some objects out of the GC.
- Multiple return values that box to tuples but don’t allocate might be something slightly related