2021 H2 static Python roadmap
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 15/100
Research direction
This issue is a broad roadmap covering the static compiler, module loader, type checker, runtime, JIT, and performance work rather than one scoped change. Start by selecting a single priority bullet and locating its relevant subsystem; completion should be defined by that bullet's specific behavior and validation, not by the full roadmap.
Written by the indexing model from the issue text.
Description
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
- Dominant language
- Python
- Stars
- 3.8k
- Forks
- 139
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from facebookincubator/MetaPython
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
facebookincubator/MetaPython#147 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
facebookincubator/MetaPython#146 · 2 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
facebookincubator/MetaPython#145 · 4 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 30/100
facebookincubator/MetaPython#144 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 20/100
facebookincubator/MetaPython#129 · 2 comments ·
All issues in facebookincubator/MetaPython
Similar issues
-
Add: hunch Open
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
AbdelStark/awesome-typesafe#104 ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
DiamondLightSource/dodal#2211 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
openml/openml-python#1749 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
sipyourdrink-ltd/bernstein#6191 ·