v0.11.0
JuliaInterpreter v0.11.0
JuliaInterpreter v0.11.0
This release overhauls world-age handling so that interpretation matches
compiled-code semantics. It is a breaking release.
Breaking
- Interpreted calls now run in the caller's task world, not the latest
committed world. Previously every interpreted call behaved like
Base.invokelatest, so a method or binding defined newer than the calling
code's world was visible. Now, like compiled code, an interpreted call sees
only its fixed task world and will raise a world-age error for a method
defined too recently. This is the intended behavior, but code that relied on
the old always-latest semantics may now error or dispatch differently.
(#715, #732; fixes #617) @interpretgains aworld=wkeyword for the legitimate case of reaching
a method newer than the caller's world (e.g. one just brought in byinclude
within the same function). Passworld=Base.get_world_counter()or
world=:latest(the two differ subtly, see docstrings) to recover the old
latest-world behavior. (#732)- World age is threaded through the public API. The following gained a
worldargument (keyword or positional):FrameCode,Frame,
prepare_call,prepare_framecode,get_call_framecode,optimize!,
lookup_stmt,whichtt, andto_function. Existing calls that omit it get
the latest committed world by default, but downstream code that constructed
these directly may need updating. (#715) Frame(mod, ex)now interprets:topleveland:moduleexpressions
directly, creating a driver frame that steps through the surface statements
one at a time and raises the world age between them so each statement sees
earlier definitions. Previously this requiredExprSplitter.ExprSplitter
remains available for fine-grained control (Revise.jl still uses it). (#719)enter_call/enter_call_exprno longer callclear_caches()on every
entry. Framecodes are now individually invalidated by world age, so the
per-entry reset is unnecessary.clear_cachesis retained for debugging.
(#733)
Added
- Julia 1.13 support: syntactic
ccall, updatedprint_stackframe. (#737) - New public helpers
finish_latestworld!andframecode_valid_world. (#727)
Fixed
- Expanded
invokelatestnow runs all targets (builtin and generic) uniformly
in the latest world, fixing spurious stale-world warnings. (#729) - Fixed stale-world binding-access warnings at several read-side sites. (#738)
- Resolve
getproperty-chains incglobal/ccalltuple syntax. (#718) - Arg-quoting in qualified evaluation. (#735)
- Skip
nothingfiles when collecting framecode files. (#736) - Make
StackFrametotal when line info is missing. (#723)
Internal / testing
- Added Aqua.jl quality checks and ExplicitImports.jl as test dependencies.
(#724, #725) - Dropped PyCall and HTTP test dependencies by vendoring the relevant
regression tests (#455, #354). (#716, #717) - Improved docstrings and documentation for the new world-age handling.
(#726, #727)
Merged pull requests:
- Bump codecov/codecov-action from 5 to 6 (#713) (@dependabot[bot])
- Bump julia-actions/setup-julia from 2 to 3 (#714) (@dependabot[bot])
- Thread world age through interpretation (#715) (@timholy)
- Vendor issue #354 test; drop HTTP dependency (#716) (@timholy)
- Vendor issue #455 test; drop PyCall dependency (#717) (@timholy)
- Resolve
getproperty-chain library incglobal/ccalltuple syntax (#718) (@timholy) - Interpret toplevel/module AST directly (#719) (@timholy)
- Make the dispatch cache and compiled wrappers world-age correct (#721) (@timholy)
- Make StackFrame total when line info is missing (#723) (@timholy)
- Add Aqua.jl quality checks (#724) (@timholy)
- Add ExplicitImports.jl as a test dependency (#725) (@timholy)
- Improve docstrings (#726) (@timholy)
- Update docs for new world-age handling (#727) (@timholy)
- Version 0.11.0 (#728) (@timholy)
- Run expanded invokelatest in the latest world (#729) (@timholy)
- Use aarch64 for the macOS CI runner (#730) (@timholy)
- Run interpreted frames in the caller's task world (#732) (@timholy)
- Stop clearing caches on every interpreter entry (#733) (@timholy)
- Add arg-quoting in qualified evaluation (#735) (@timholy)
- Skip
nothingfiles when collecting framecode files (#736) (@timholy) - Support Julia 1.13 (syntactic ccall, print_stackframe) (#737) (@timholy)
- Fix stale-world binding-access warnings (#738) (@timholy)
- Test toplevel on both interpretation paths (#739) (@timholy)
Closed issues:
- Testing Revise asserts in JuliaInterpreter on 1.9 (#570)
- wrong world age for everything (#617)
@interpret(x == 2)and@interpret(x) == 2lead to different execution world ages (#666)- RFC: major rewrite for world age and possibly inference? (#676)
memhashis to be deleted in 1.13 (#696)- Cannot handle
file: NothingLineNumberNodes (#701) - Remove the defensive
clear_caches()from entry points (#722)