Skip to content

Jule 0.2.0

Latest

Choose a tag to compare

@mertcandav mertcandav released this 02 Feb 21:59
· 15 commits to master since this release

jule

julec

  • add: the --COMAXPROCS command-line argument
  • add: Assembly file support for extern use declarations
  • remove: support for C++ versions cpp14 and cpp17
  • 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-str optimization 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 nanotime works 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 Stream as ReadWriteCloser
  • 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 RawFD to Conn, 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-safety may 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.