jule
- rename:
cppkeyword asextern - rename:
bindterm of the Integrated Jule asextern - add: async runtime and update to the new concurrency model
- add: assignment and short variable declaration support for select statements
julec
- add: the
--COMAXPROCScommand-line argument - add: Assembly file support for extern use declarations
- remove: support for C++ versions
cpp14andcpp17 - update: default C++ version to
cpp20 - fix: code generation for single-case select statements
- fix: code generation for channel receive and send may be invalid when optimizations applied
- fix: deferred calls may not be executed before exceptional forwarding
- fix: use expression in exception handler scopes may ignore dynamic type casting
- fix: type-enums might be casted to a dynamic-type like non-dynamic types and cause dynamic type issues
- fix: the
--opt-stroptimization flag may cause segfault or unexpected results - parser: fix void function type handling in expressions
- sema: fix tuples allowed in type inference of generic constraints
std
- remove:
std/jule/integrated - add:
std/integ - add:
std/integ/c - add:
std/testing/iotest - reimplement:
std/encoding/base32 - reimplement:
std/math/big - runtime: reimplement channels and select statements
- runtime: add
Yield,COMAXPROCS,Blocking - (windows) runtime: fix
nanotimeworks inconsistent - std/bufio: update as async-first
- std/bufio: add
Reader,Writer - std/io: update as async-first
- std/io: add
ReadSeeker,WriteSeeker,ByteScanner,RuneScanner,ReadWriteSeeker,ReaderFrom,MultiReader,LimitedReader,NopCloser - std/io: rename
StreamasReadWriteCloser - std/io: remove
LimitReader - std/jule/build: add
AssemblyExts,IsValidAssemblyExt - std/jule/mod: fix unsafe string handling causes dangling memory
- std/net: update as async-first
- std/net: add
RawFDtoConn,TCPConn,UDPConn - std/net: use the system's maximum backlog by default for
TCPListener - std/os: update as async-first
- std/slices: add
Grow
API
- fix:
—disable-safetymay cause compile errors __jule_Ptr: fix the memory leak caused by rvalue handling
Legacy Support
This release is almost entirely breaking. Jule's concurrency model has been completely redesigned, and a new runtime model has been introduced. Common operations such as I/O are no longer sync-first and thread-friendly; instead, they are designed to be async-first by default. This means that using std/io and all related packages largely requires running under the async runtime.
In addition, with the new coroutine model, the OS thread has become merely a tool used by the runtime, not for developers. The co keyword creates a coroutine now, not a thread. For this reason, if you have a concurrent program, its behavior may be very different from before.