Skip to content

Releases: tonybaloney/Pyjion

v1.0.0

08 Nov 21:08
d0ab370
Compare
Choose a tag to compare

Announcing the first stable release of Pyjion!

What's Changed

New Contributors

**Full Changelog...

Read more

1.0.0rc4

12 Oct 05:37
c7b909e
Compare
Choose a tag to compare
  • Added ARM64 for Apple macOS (M1 Silicon). The JIT will emit native ARM64 assembly. Disassembler not supported.
  • Added Linux/ARM64 support and a manylinux wheel
  • Added Windows/ARM64 support
  • All JIT configuration is now set using the pyjion.config() function instead of enable_feature()/disable_feature()
  • Fixed a bug where pyjion.graph() would cause an exception if graphing was not enabled when the function was compiled
  • Added support for the SETUP_ANNOTATIONS opcode
  • Added support for generators in 3.10
  • Fixed a bug in the DUP_TOP_TWO opcode with escaped variables
  • UNPACK_SEQUENCE will emit types for constant tuples of string, int and float
  • STORE_FAST is now profiled during the probe stage of PGC, leading to drastically improved performance in many cases where unboxed ints and floats can be used
  • Added a simple benchmark suite script (Tests/benchmarks/suite.py)
  • Upgraded scikit-build to 0.12 for native VS2019 support

1.0.0rc3

30 Sep 05:16
ca89e01
Compare
Choose a tag to compare
  • Updated to .NET 6 RC1
  • Added Python 3.10 support
  • Experimental try..except statements, stacked exception handlers and exception filtering. Disabled by default
  • Fixed a bug on LOAD_METHOD not raising an exception immediately if the method could not be resolved
  • Remove enable_tracing() and enable_profiling functions in 3.10 builds. Profiling and tracing is detected on compilation and available via the .info() method
  • Added support for PEP626 (fast line tracing)
  • Extended profiling support for CFunction calls
  • PyTrace_RETURN now correctly sends the return value as an argument as per CPython spec
  • Fixed a bug causing SEG when range iterators are escaped

1.0.0rc2

05 Aug 04:58
996fbcf
Compare
Choose a tag to compare
  • BINARY_MULTIPLY and BINARY_POWER will assume the resulting integer is a big integer (not unboxed)
  • Introduced two optimizations IntegerUnboxingMultiply and IntegerUnboxingPower which are applied at optimization level 2. Try level two if you work with integers, but at smaller values to see better performance.
  • Pyjion will infer that range(n) generates integers in iterator to improve unboxing
  • LOAD_BUILD_CLASS will infer a function type instead of Any (#42)
  • Instruction graphs will include the name of fast locals
  • Instruction graph const values are capped to 40 characters
  • Added abstract types for all builtins (#339)
  • pyjion.info() will now return a JitInfo object
  • Optimization flags that were applied to a function during compilation are available in JitInfo.optimizations
  • All optimizations are now runtime flags instead of compile-time features
  • Unboxing PGC errors will raise pyjion.PyjionUnboxingError (ValueError) instead of ValueError
  • Instruction graphs will show conditional branches (in orange)
  • Fixed a bug in generators where mixed unboxed/boxed fast locals would yield the wrong values with PGC between the first and second compilation stages
  • Fixed a de-optimization that happened in rc1 due to PGC asserting the abstract kind on the profiling phase and then always asserting that integers were big-integers
  • Fixed a bug where unboxed locals were decrefing frame locals on yield
  • Generators will not unbox fast locals for stability reasons
  • Fixed a regression on unboxed integers, caused by PGC values being set as Any
  • Assert return types for float object methods (as_integer_ratio, conjugate, is_integer, hex)

1.0.0rc1

26 Jul 08:52
974bd3c
Compare
Choose a tag to compare
  • Added pyjion command-line script to complement the python -m pyjion command
  • The pyjion CLI has flags for enabling profiling, tracing, optimization level, graphs and debugging
  • Unboxing integers that don't fit into long long will raise a ValueError.
  • Pyjion will mark any values above 1 billion as "big integers" and not escape them to reduce the chance of overflows.
  • Floating point __pow__ with negative values matches all behaviour of CPython
  • Raising 0 to a negative power will raise a ZeroDivisionError
  • PGC no longer uses a reference to probed values, dramatically reducing memory consumption between the first and second compile cycles
  • Fixed a bug where statistics.variance([0, 0, 1]) would raise an assertion error because of an overflow raised in Fraction arithmetic (#326)
  • Fixed a bug on calling sys.settrace(None) would cause a segmentation fault (#330)
  • Fixed a bug on optimized calls to custom types would crash on the 3rd execution because of the way PGC held and released references.
  • Refactored Pyjion's test suite to Pytest
  • Rewrote the documentation site
  • Fixed a bug in the native disassembler printing empty comment lines
  • Corrected the type signature of pyjion.get_offsets()
  • Fixed a bug on changed methods for object (like a global) causing crashes because of the way load_method was optimized (#335)

1.0.0b7

19 Jul 03:22
beebf40
Compare
Choose a tag to compare
  • Added pyjion.symbols(callable) API to fetch the dictionary of external call tokens
  • Extended the dis() and dis_native() methods with a flag to not print the program counter (print_pc=False)
  • Improved the dis_native() method to print the name of the method call after the call instructions as a line comment
  • Fixed a bug in dis_native() which showed unresolved sequence points at the top of the printout
  • Fixed a bug where in (CONTAINS_OP) result wasn't being checked for exceptions and the next operation would segfault if the in operation returned an error result.
  • The IL in dis() is closer in syntax to ILDasm and easier to read
  • Added a pyjion.status() method to get runtime data on the JIT
  • Windows will now observe the DOTNET_ROOT and DOTNET_LIB_PATH environment variables

1.0.0b6

15 Jul 08:01
c1e4ccc
Compare
Choose a tag to compare
  • Updated to .NET 6 preview 6
  • Fixed a bug where ord() builtin would return the wrong type (#315)
  • pyjion.dis.dis() and pyjion.dis.dis_native() will show sequence points as comments
  • The BINARY_POWER and INPLACE_POWER opcodes will always return a native python long instead of an escaped integer, to avoid overflows

0.13.0

13 Apr 03:55
fa34d0a
Compare
Choose a tag to compare
  • The compiler will now fail (and default back to CPython) if .NET emits a FAST_FAIL helper
  • UNPACK_SEQUENCE is rewritten to be more efficient and use optimized paths for LIST and TUPLE types
  • f-string (BUILD_STRING) is rewritten to be more efficient
  • UNPACK_EX is rewritten to remove the requirement for dynamic heap allocation (and the stack canary) and leverage .NET compiler's dynamic eval stack
  • PGC implemented for UNPACK_SEQUENCE
  • PGC implemented for BINARY_SUBSCR
  • PGC implemented for CALL_FUNCTION/OPT-14

0.11.0

18 Feb 01:27
ba3f111
Compare
Choose a tag to compare
  • Added OPT-13 (OPTIMIZE_TYPESLOT_LOOKUPS) to optimize the type slots for all binary operators and resolve the precedence at compile-time (only for known types)
  • Added OPT-14 (OPTIMIZE_FUNCTION_CALLS) to optimize calls to builtin functions
  • Optimize all frame locals by determining abstract types on compilation
  • Bugfix: Fixed a crash on f-strings with lots (>255) arguments
  • Bugfix: Will now skip all functions containing the use of exec() as it contains frame globals which are not supported
  • Updated to .NET 5.0.3
  • Updated the containers to Ubuntu 20
  • Added fileobject abstract type
  • Added enumerator abstract type
  • Added code object abstract type
  • Added integration tests for reference leaks for all binary operations (thanks @amaeckelberghe)
  • Added module type (thanks @vacowboy75)

0.10.0

01 Feb 07:28
7b16c01
Compare
Choose a tag to compare
  • Added OPT-12 (OPTIMIZE_BUILTIN_METHOD) to pre-lookup methods for builtin types and bypass LOAD_METHOD (PyObject_GetMethod)
  • Optimized LOAD_METHOD to recycle lookups for the same object
  • Expanded OPT-8, OPT-9, OPT-11, OPT-12 for nested stacks (e.g. inside expressions)
  • Added a frozen set abstract type