Skip to content

Releases: julelang/jule

Jule 0.0.14

17 Jul 13:13

Choose a tag to compare

Jule 0.0.14 Pre-release
Pre-release

Language

Compiler

  • numerous minor fixes, optimizations and improvements
  • minor improvements for tests code generation
  • add: necessary library links to compile command for Windows (improves MSVC compatibility)
  • fix: code generation for trait function call arguments
  • fix: handling bytes and runes for string casting
  • parser: fix expression parsing, thanks to @lakshgupta for getting this noticed with #108
  • parser: fix parsing of map type declarations in expressions
  • sema: fix caughing not invoked built-in functions
  • sema: fix comparable constrait analysis
  • sema: fix structures skips declaration analysis of their methods
  • sema: fix generic defines uses same instance for hint type of cpp-linked types (for example: int and cpp.Int (linked as int)
  • sema: caught variadic reference parameters
  • sema: caught anonymous methods for traits and structures
  • sema: caught unsupported types for binary operators
  • sema: stop analysis for scope when comptime-panic call occurred
  • sema: fix handling of type-enums

Standard Library

  • add: std::comptime
  • std::bytes: add the Cut function
  • std::strings: add the Cut function
  • std::mem: disallow void and function types for the SizeOf and AlignOf functions
  • std::jule::sema: remove the FindPackage method of the Lookup trait
  • std::jule::sema: add the Comptime field to the Match
  • std::jule::sema: add the Ordered method to TypeKind
  • std::jule::types: add uintptr support for the BitsizeOf function
  • std::jule::sema: fix the Str method of the Map struct uses old format

API

  • jule::Str: remove jule::I32 constructor and add the static from_byte and from_rune methods

Jule 0.0.13

17 Jun 11:03

Choose a tag to compare

Jule 0.0.13 Pre-release
Pre-release

Language

  • add: inheritance support for traits
  • add: casting support for traits with common behaviors
  • update: some binded types are accepted as comparable
  • update: enum mechanics
  • update: pass directive adds to command-lines after source files

Compiler

  • various fixes, improvements and optimizations
  • add: --opt-str optimization flag
  • update: --opt-copy optimization flag
  • fix: define ordering
  • fix: code generation for casting from expressions
  • fix & improve: code generation for type informations
  • fix: type information generation for enum types
  • parser: fix plain-type parameter parsing
  • sema: fix slice literal evaluation
  • sema: fix duplicated parameter identifier analysis
  • sema: fix checking of test functions
  • sema: fix limit handling of types

Standard Library

  • add: std::hash
  • add: std::hash::adler32
  • add: std::hash::fnv
  • std::slices: add the Sort and IsSorted functions
  • std::process: reimplement the Cmd
  • std::process: remove the Pid type alias
  • std::fs: reimplement the Status
  • std::env: fix Env function returns command-line arguments instead of environment variables
  • std::fs: add the WriteStr method to the File
  • std::fs: add the WriteStr static method to the File
  • std::io: the WriteStr method of the ByteStream and FileStream, takes reference string now
  • std::sys: remove the Wopendir, Wreaddir, and Wclosedir functions for Windows
  • std::sys: add the FindFirstFile, FindNextFile, FindClose functions for Windows
  • std::sys: remove the Wdir and Wdirent structs for Windows
  • std::sys: add the Win32FindData struct for Windows
  • std::sys: remove last parameter of the ReadConsole function for Windows
  • std::jule::ast: add the Inherits field to the TraitDecl
  • std::jule::sema: add the Inherits field to the Trait
  • std::jule::types: add the MaxI, MaxU, and MinI functions

API

  • optimize: string UTF-8 handling
  • add: jule::utf8_push_rune_bytes<Dest>
  • remove: jule::utf8_rune_to_bytes
  • fix: the jule::env function always returns empty slice after first use

Legacy Support

The old Jule source codes probably will not compile with this release. Because Jule 0.0.13 brings many breaking changes.

Some breaking changes:

  • std::process::{Cmd} is reimplemented
  • std::fs::{Status} is reimplemented

Jule 0.0.12

20 May 11:38

Choose a tag to compare

Jule 0.0.12 Pre-release
Pre-release

Language

  • add: constraints for generic types
  • add: explicit-typed slice literals with casting
  • add: generic function instances can use as anonymous function now
  • add: static methods can use as anonymous function now
  • add: the built-in delete function
  • update: maps, slices, anonymous functions and binded defines are not comparable now
  • update: syntax of map type declaration
  • update: naming conventions
  • update: use identifier based approach to define as public instead of using the pub keyword
  • update: the built-in make function for buffered strings
  • remove: the built-in has method of the map type, use lookup assignment instead
  • remove: the built-in del method of the map type, built-in delete function instead
  • remove: the built-in keys, and values methods of the map type

Compiler

  • various improvements and optimizations
  • various fixes and improvements for concurrent calls
  • fix: code generation for cpp-linked fields
  • fix: code generation for void-exceptional trait methods
  • fix: —opt-deadcode removes necessary return statements of exceptional handling scopes
  • fix: code generation for floating-point constants, thanks to @mingodad for getting this noticed
  • fix: code generation for initializing of structure field which is have cpp-linked structure type
  • fix: compiler generates uninitialized arrays and slices
  • fix: code generation for C/C++ linked headers
  • fix & optimize: define ordering
  • fix: code generation for binded include headers, thanks to @sparky4pro for pointing to the issue
  • parser: improve catching of type declarations which is placed in expression
  • sema: improve dynamic type annotation analysis
  • sema: fix generic type-alias analysis
  • sema: fix anonymous function analysis
  • sema: fix trait implementation analysis
  • sema: caught duplicated identifiers for full-import use declarations
  • sema: fix analysis of constant structure fields
  • sema: fix handling of constant values in casting evaluation
  • sema: fix scope variable and scope type alias evaluation
  • sema: fix evaluation of untyped constants
  • sema: fix evaluation of function calls at global scope
  • sema: fix compile-time panic call analysis
  • sema: fix implicit casting
  • sema: fix compiler might crash when analyzing parameters of genericed functions
  • sema: fix variable declarations with blank identifier are allowed

Standard Library

  • various improvements and optimizations
  • add: std::maps
  • add: std::net
  • add: std::slices
  • builtin: add the len, and cap functions
  • builtin: remove the len and cap fields from types and use the len and cap functions instead
  • std::bytes: add the Equal function
  • std::slice: add the Equal function
  • std::io:: FileStream’s ReadLine function returns string without is line delimiter now
  • std::io:: remove carriage return byte from the end if reading line-by-line
  • std::time: reimplement the Duration
  • std::thread: move the Thread.Sleep method to std::time as Sleep function
  • std::jule::ast: add the Constraint field to the GenericDecl
  • std::jule::ast: add the IsCo field to the FnCallExpr
  • std::jule::ast: remove the Generics field of the FnCallExpr
  • std::jule::ast: remove the CoExpr
  • std::jule::build: add the ConstraintFailed field to the LogMsg
  • std::jule::constant: add the Kind field to the Const
  • std::jule::sema: add the InsGeneric, BuiltinLenCallExprModel, BuiltinCapCallExprModel, and BuiltinDeleteCallExprModel structs
  • std::jule::sema: use InsGeneric for Generics field of FnIns and StructIns
  • std::jule::sema: add the Statics fields to the StructureIns
  • std::jule::sema: add the FindStatic method to the StructureIns
  • std::jule::sema: add the IsConstraint method to the Prim
  • std::jule::sema: add the Owner field to the StructSubIdentExprModel
  • std::jule::sema: remove the ExprKind field of the StructSubIdentExprModel
  • std::jule::sema: fix implementation of the PerformsRC method of the TypeKind
  • std::jule:sema: rename the Equals method as Equal of the Kind trait
  • std::sys: add the SOCK_STREAM, SOCK_DGRAM, SOCK_RDM, SOCK_SEQPACKET, AF_UNSPEC, AF_UNIX, AF_INET, AF_INET6, IPPROTO_IP, IPPROTO_TCP, IPPROTO_UDP, INADDR_ANY, INVALID_SOCKET, SOCKET_ERROR, and more constants
  • std::sys: add the Sockaddr, SockaddrIn, SockaddrIn6, and WsaData structures
  • std::sys: add the Socket, Bind, Connect, Listen, Accept, Recv, Send, CloseSocket, WSAStart, MakeWord, and more functions

API

  • various optimizations
  • mark as no-return the jule::panic function
  • jule::MapKeyHasher: fix copy assignment operator support
  • fix: use of uninitialized memory (missing zero terminator) on Linux, thanks to @mingodad for pointing to the issue (#104)
  • fix: the utf16_append_rune
  • remove: the __JULE_CO, and __JULE_CO_SPAWN macros
  • remove: equality functions of uncomparable types
  • reimplement: jule::Any
  • jule::Trait<Mask>: minor optimizations

Legacy Support

The old Jule source codes probably will not compile with this release. Because Jule 0.0.12 brings many breaking changes.

Some breaking changes:

  • Map syntax update
  • Naming convention update
  • Built-in len and cap field update
  • Buffered string update for the built-in make function
  • Some reimplementations such as std::time::Duration
  • Some types are not comparable now like slices, maps, or anonymous functions

Known Issues

Apple released a new linker with Xcode 15. But the new linker sometimes causes compilation errors.
See more information

Jule 0.0.11

23 Apr 11:31

Choose a tag to compare

Jule 0.0.11 Pre-release
Pre-release

Language

  • add: buffered strings
  • add: type-enums (aka sum types)
  • update: enum syntax
  • update: exceptionals are not allowed in global scope
  • update: built-in copy method

Compiler

  • compiler: fix code generation for debug location information data
  • compiler: fix code generation for unused traits
  • compiler: code generation for common sub-ident
  • compiler: fix code generation for slice literals
  • compiler: fix code generation with —opt-access
  • compiler: fix and improve —opt-deadcode
  • compiler: fix optimization processing jumps some flags in some cases
  • parser: fix variadic operator parsing
  • sema: fix exceptional forwarding
  • sema: fix range iteration key variable analysis
  • sema: fix structure instantiation analysis
  • sema: fix goto statement analysis not catches exceptional scopes of function calls
  • sema: fix generic function instance modeling
  • sema: fix generic function analysis
  • sema: fix global type alias declarations can take ignore (_) ident

API

  • jule::Map: use FNV-1A algorithm for hashing
  • jule::Any: optimize type compatibility checking
  • jule::Any: use reference counting to manage internal allocation with optimizations
  • jule::Trait: optimize type compatibility checking

Standard Library

  • std::io: add the file, read_line_bytes and write_str methods to the FileStream
  • std::io: the read_line method returns str now of the FileStream
  • std::io:: add the write_str method to the ByteStream
  • std::io:: the stdin, stdout, and stderr methods returns FileStream now
  • std::fmt: print <nil> instead of nil for nil data
  • std::flag: fix dash processing
  • std::math::big: add the trailing_zeros method to the Int
  • std::math::rand: Rand’s methods are immutable now
  • std::math::rand: add the next, and nextn methods to the Rand
  • std::math::rand: Seed stands for u64 now
  • std::strings: add the append_byte methods
  • std::strings: optimized with buffered strings
  • std::jule::integrated: remove type_id function
  • std::jule::ast: use type-enum for node type aliases
  • use std::jule::sema: use type-enum for Stmt, and ExprModel type aliases

Legacy Support

Some standard library packages use type-enums and other new changes.
New source codes may will not compile with older compilers.

Jule 0.0.10

03 Apr 12:42

Choose a tag to compare

Jule 0.0.10 Pre-release
Pre-release

Language

  • remove: ternary operator
  • update: init function can be declared and defined more than one
  • update: init functions are cannot evaluate
  • update: the built-in clone method support non-lvalue expressions now
  • update: the cloning rules

Compiler

  • compiler: reimplement function and trait code generation
  • compiler: generates object code with explicit types such as i32 for int if target platform is 32-bit
  • compiler: minor improvements for log messages
  • compiler: fix and improve —opt-cond
  • compiler: improve —opt-math
  • compiler: improve —opt-copy
  • compiler: generic compile-time panic logs use location of relevant function call
  • compiler: code generation for the structure allocation with built-in new function calls
  • compiler: remove all documentation analysis features and related definitions
  • compiler: fix the Clone derive
  • parser: fix statement parsing
  • parser: fix match-case parsing not catches trailing invalid tokens
  • parser: catch trailing unused directives
  • sema: various optimizations
  • sema: fix generic type alias eval
  • sema: fix constant || operator eval
  • sema: fix the unary * operator eval
  • sema: fix comparing of function types
  • sema: fix and improve checking for missing return statements
  • sema: fix checking of exceptional handling scopes
  • sema: fix and optimize structure sub-ident eval
  • sema: fix analysis of type-matching for generic types
  • sema: fix structure ast node instantiation
  • sema: fix receiver parameter analysis

API

  • fix: C++14 compatibility of the jule::Str
  • reimplement: jule::Trait
  • remove: the deprecated Dispose trait structure
  • update: all nullptr compatible types (except slice) writes <nil> to std::ostream if it is nil
  • update: the non-production is not need to debug information for the jule::new_struct<T> and the jule::new_struct_ptr<T> functions
  • remove: deprecated jule::new_struct<T> and jule::new_struct_ptr<T> functions

Standard Library

  • add: std::encoding::ascii85
  • add: std::jule::importer
  • reimplement: std::encoding::binary
  • std::io: add the WriterCloser trait
  • std::io: fix and optimize the ByteStream
  • std::math::big: fix decimal formatting sometimes causes crash when allocating buffer
  • std::flag: fix the add[T] method of the FlagSet
  • std::jule: use &Token instead of Token as possible
  • std::jule::ast: fix is_self method of the ParamDecl
  • std::jule::ast: use &Expr instead of ExprData as possible to store expressions
  • std::jule::ast: rename the decls field as nodes of Ast
  • std::jule::ast: the impls field merged with the nodes field of the Ast
  • std::jule::lex: reimplement the File
  • std::jule::sema: remove the OperatorMap
  • std::jule::sema: remove the token field of the StructLitExprModel
  • std::jule::sema: add the types method to the FnIns

Additional

JuleFmt

Developed official code formatter for Jule. Although it is still in beta, it has become reliable enough to be compiled from the source and used. The complete source code of Jule 0.0.10 version have been formatted with JuleFmt.

Go to repository of JuleFmt

The darwin-amd64 Builds

This release includes release build for the darwin-amd64 architecture which is compatible with intel Macs. This build is experimental. Therefore please report any problems to us.

Jule 0.0.9

13 Mar 10:05

Choose a tag to compare

Jule 0.0.9 Pre-release
Pre-release

Language

  • add: operator overloading via reserved methods
  • add: the eq, gt, gt_eq, lt, lt_eq, shl, shr, add, div, sub mul, bit_or, bit_and, bit_xor, neg, pos, add_assign, sub_assign, div_assign, mul_assign, mod_assign, shl_assign, shr_assign, bit_or_assign, bit_and_assign, and bit_xor_assign reserved methods
  • update: the namespace directive implies the typedef directive for structures
  • update: if structure field is interior mutable, it will not evaluated as mutability risk during assignments or cloning

Compiler

  • compiler: add the —compiler-path option
  • compiler: fix —opt-copy
  • compiler: fix —opt-deadcode eliminates test functions on testing compilation
  • compiler: process exit code will be 1 instead of 0 if any test failed
  • compiler: compile built-in swap methods with debug information if production compilation disabled
  • compiler: fix and optimize —opt-deadcode
  • compiler: fix cross-transpilation is not imitates the target architecture for architecture-dependent types
  • compiler: fix constant evaluation is not imitates the arithmetic types
  • parser: avoid produce error for already logged another error on case expression parsing
  • parser: fix empty index expression causes compiler crash with nil pointer dereferencing
  • parser: empty slice literal element period causes crash
  • sema: avoid detected duplicated logs
  • sema: fix enum field value processing
  • sema: fix runtime enum type safety
  • sema: fix unary operator analysis will panics because of skip catching of nil eval results
  • sema: fix case expression analysis accepts valid type declarations for expression matching
  • sema: catch ignore operatored sub-ident expressions
  • sema: improve logging of non-function call errors
  • sema: fix multi-assignment declarations allows variable shadowing even when shadowing disabled
  • sema: fix integer division result evaluated as floating-point
  • sema: fix built-in functions can crash
  • sema: fix unary plus and unary minus operator eval
  • sema: improve type safety of constant evaluation
  • sema: fix lvalue slicing expressions evaluated as non-lvalue

API

  • api: add debug information to built-in swap methods for non-production compilations

Standard Library

  • add: std::math::big
  • reimplement: std::process
  • std::conv: add the atoi function
  • std::conv: use exceptionals instead of returning error codes
  • std::math::cmplx: add the +=, -=, *= and /= operator overloading to the Cmplx structure
  • std::math::cmplx: add the unary +, - operator overloading to the Cmplx structure
  • std::strings: fix the trim, trim_left, and trim_right functions
  • std::sync: reimplement the Mutex
  • std::sync: add the new static method to the Once
  • std::sync: add the new static method to the WaitGroup
  • std::sync::atomic: fix the store function always uses the i32 type instead of T
  • std::sync: add support for the int and uint type for atomic functions
  • std::jule::build: add the OS, and ARCH static variables
  • std::jule::constant: add the gt_eq, and lt_eq methods to the Const structure
  • std::jule::constant: rename the eqs method as eq of the Const structure
  • std::jule::sema: remove the refers field of the FnIns structure
  • std::jule::sema: add the FuncPattern structure
  • std::jule::sema: add the Operators structure
  • std::jule::types: add the update_target function
  • std::jule::types: the bit and type conversion functions are uses int instead of u64 now
  • std::jule::types: the BIT_SIZE, SYS_INT, and SYS_UINT constants are static now

Legacy Support

Jule code written for older versions is not guaranteed to compatible maintenance-free.

Jule 0.0.8

11 Feb 12:44

Choose a tag to compare

Jule 0.0.8 Pre-release
Pre-release

Language

  • add: the SMALLEST_NON_ZERO static field to the f64 type
  • add: the SMALLEST_NON_ZERO static field to the f32 type
  • add: underscore support for numeric literals
  • add: the ^ operator support to integer enums
  • update: the int, uint and uintptr types are not alias anymore, just compatible with itself
  • update: integer types are now compatible with itself only

About Versioning

Jule releases will no longer contain designations such as beta.
Release and compiler versions will be in this format.

Compiler

  • add: support for code emit from Jule source code into back-end
  • improve: the —opt-append applies optimization by skip capacity checking
  • improve: the —opt-math optimizes multiplications as bit-shifting if possible
  • improve: the —opt-math optimizes divisions as bit-shifting if possible
  • improve: normalize the pah information when production compilation enabled
  • fix: wrong define ordering because of cpp-linked dependencies
  • lex: fix octal literal lexing
  • parser: fix genericed structure declaration body missing error causes index overflow
  • sema: fix expression checking allows type declarations
  • sema: fix type safety checking for variadic arguments
  • sema: catch instantiation cycles
  • sema: fix type alias which is could not evaluated causes crash because of nil pointer dereferencing
  • sema: fix genericed type declaration checking that base type comes from another package
  • sema: fix evluation of genericed type declaration that base type comes from another package
  • sema: fix private methods of structures are allowed to access out of package
  • sema: fix use declaration checking

API

  • fix: debug compilation support of the unsafe_div function
  • fix: debug compilation support of the unsafe_mod function
  • fix: Str::operator< and Str::operator> returns wrong result
  • fix: Trait<Mask>::operator== always returns true because of comparing itself, thanks to @vil02
  • fix: Trait<Mask>::operator T(void) is not returns anything, thanks to @vil02

Standard Library

  • add: std::queue
  • add: std::stack
  • std::fs: use the int type instead of the i64 type for the File’s seek method
  • std::jule::sema: add the Kind trait and implement to known Jule types
  • std::jule::sema: add the OperandExprModel structure
  • std::jule::sema: update kind as &OperandExprModel of the BinopExprModel’s left and right fields
  • std::jule::sema: update kind as &OperandExprModel of the Assign’s l and r fields
  • std::jule::types: add the SMALLEST_NON_ZERO_F64 constant
  • std::jule::types: add the SMALLEST_NON_ZERO_F32 constant
  • std::jule::integrated: rename as emit the inline function
  • std::jule::integrated: add variadic argument to the emit for emit code from Jule source code
  • std::vec: add the fit, and clear methods to the Vec[T] structure
  • std::sys: use the int type instead of the i64 type for the seek function

Legacy Support

Upgrading from previous versions may encounter compilation issues as important aspects such as the type system have been updated.

Experimental

The Windows AMD64 build is not compiled on a local machine, unlike previous versions. In order to reduce the release process to a single device as much as possible, it was compiled on a Windows ARM64 machine. Therefore, relevant build is experimental. Please let me know if there are any problems.

Beta 0.0.7

11 Jan 14:09

Choose a tag to compare

Beta 0.0.7 Pre-release
Pre-release

Language

  • update rule: accept anonymous function fields as C++ functions of cpp-linked structures
  • add: default expression support for structure fields
  • add: the reserved to_str method for structures
  • add: support for the <, >, <=, >= operators to the str type
  • remove: built-in methods of the str type
  • remove: the built-in Dispose trait and add the reserved dispose method instead

Compiler

  • compiler: fix constant variable code generation
  • compiler: add information message for blank execution
  • compiler: improve c++14 compatibility
  • compiler: improve runtime panics
  • compiler: add the clang, gcc, cpp14, cpp17, and cpp20 variables to directive expressions
  • compiler: add the -—disable-rc option to disable reference counting
  • compiler: add the -—disable-safety option to disable safety measures
  • compiler: add the —-opt-cond optimization flag
  • compiler: fix code generation for testing
  • lex: fix column data processing
  • sema: add name selection support for impl types such as namespace selections
  • sema: fix checking for the built-in clone function
  • sema: fix constant bitwise eval
  • sema: add constant eval support for len field of constant strings
  • sema: the built-in copy function no more mutability error for immutable typed source argument

API

  • add: the clone function support for the f32, and f64 types
  • add: the <, >, <=, and >= operator overloading for the string type
  • improve: index out of range error messages
  • improve: panic messages of builtin swap functions
  • slices: slicing algorithm no more panics for nil slice and zero length slicing
  • traits: fix polymorphism processing

Standard Library

Release Period Update

Releases no more include build for the darwin-amd64 architecture.
Past builds has possible incompatibilities and etc. Sorry for that.
It can be still available via compile from source method, this is not darwin-amd64's end of life.

Beta 0.0.6

04 Nov 10:56

Choose a tag to compare

Beta 0.0.6 Pre-release
Pre-release

Language

Compiler

  • compiler: add production compilation
  • compiler: better compatibility with gnu compiler collection (gcc)
  • compiler: improve code generation
  • compiler: fix code generation for binary expressions
  • compiler: use std::process instead of C’s system call and fix signal code 17 problem
  • compiler: improve handling of external compiler errors
  • compiler: fix deadcode optimization
  • compiler: add deprecated, and test directives
  • lex: fix ! operator accepted as binary operator
  • parser: fix if-else chain parsing
  • parser: fix structure literal parsing
  • sema: fix declarations allowed for casting
  • sema: fix binary eval
  • sema: fix safety of builtin string conversions
  • sema: improve and fix error messages
  • sema: fix type safety of assignments
  • sema: fix safety of deferred scopes
  • sema: fix numeric type compatibility checking of binary expressions
  • sema: fix signed integer and unsigned integer compatibility
  • sema: fix invalid binary operator message of string type
  • sema: add prefix type support for numeric types
  • sema: fix built-in define processing of eval
  • sema: fix built-in define processing of type checker

API

  • improve: c++20 or higher compatibility with GCC
  • api: minor optimizations for atomicity functionalities
  • use: noexcept as possible
  • reimplement: panic calls and stop using exceptions
  • slice: fix allocations
  • str: optimize has_suffix method
  • remove: termination header
  • remove: signal header
  • rename ARCH_64BIT as ARCH_X64 and ARCH_32BIT as ARCH_X32

Standard Library

Compatibility and Legacy

Due to the innovations added with this update, older versions will not support some parts of the standard library and the compiler will be outdated to compile from source. Changes such as exceptions, integrated testing and assertions have also been implemented in the standard library. For this reason, older versions are in legacy status because they do not have new error handling approaches.

Beta 0.0.5

11 Oct 14:35

Choose a tag to compare

Beta 0.0.5 Pre-release
Pre-release

Warning
This is a later update. Beta 0.0.5 may have major bugs. It has been observed that it generates code in a way that may cause problems with binary eval. Use IR distributions for the latest and most stable version.

Release notes are here.