cinder icon indicating copy to clipboard operation
cinder copied to clipboard

2021 H2 static Python roadmap

Open DinoV opened this issue 4 years ago • 0 comments

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

DinoV avatar Jul 22 '21 18:07 DinoV