Skip to content

Hyper 0.5.0

Latest

Choose a tag to compare

@muhammadyusufpov muhammadyusufpov released this 14 Sep 10:05
· 18 commits to main since this release

Summary

Compiler-only, AOT-only. Everyday hyper run and hyper compile no longer use a JIT. The default path is Hyper IR → LLVM IR → clang and the C runtime. Cranelift remains the fast object path (--emit-obj) and an opt-in AOT backend (--backend cranelift / HYPER_CODEGEN=cranelift).

Breaking

  • No JIT. run and compile build a temporary executable and run it. There is no interpreter and no Cranelift JIT.
  • clang is required for the default LLVM path. If it is missing, use --backend cranelift.
  • --emit-obj is always Cranelift, even when the selected backend is LLVM.
  • --emit-llvm writes a .ll file and does not link an executable.

Added

  • Threaded @parallel. Outlineable for range loops (induction variable and callees only) run on an OS thread pool. Bodies that capture or mutate outer locals stay sequential, with the same per-index results. break and continue inside a @parallel body are rejected.
  • Struct field checks at compile time: existence, mutability, and types when the receiver’s struct type is known. Type errors are fatal before codegen (exit 65).
  • Shared ref for list, dict, and array payloads. Mutations through an alias are visible to every name that holds the same value. Overwriting a slot does not free a nested list or dict that another name still holds.
  • Unicode-aware case transforms on the AOT path (upper, lower, capitalize, title, swapcase, and the case predicates) for ASCII, Latin-1, Latin Extended-A, Cyrillic, Greek, and the ß / İ / ı expansions. This is not a full Unicode case-folding database.
  • repr for lists and dicts prints the value instead of <?>.
  • Empty {} is an empty dict. [] stays an empty list. {1, 2} (no colon) is unchanged.

Fixed

  • Windows C-runtime builds no longer flood _CRT_SECURE_WARNINGS.
  • Literal division, modulo, and divmod by zero are rejected at compile time. A zero divisor that is not a literal still raises RuntimeError (exit 70).

Notes

  • @vectorize is still sequential. Same per-index results as a plain for. SIMD and GPU codegen are not in this release.
  • Generics and full Python / stdlib parity are not claimed.
  • Open good-first issues are follow-up work. They are not part of 0.5.0.