Releases: julelang/jule
Jule 0.0.14
Language
- add: compile-time functionalities like comptime-reflection empowered by standard library
- add: compile-time conditional matching
- add: compile-time iterations
- update: constant variables are no longer considered for “unused variable” analysis
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:
intandcpp.Int(linked asint) - 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
Cutfunction - std::strings: add the
Cutfunction - std::mem: disallow void and function types for the
SizeOfandAlignOffunctions - std::jule::sema: remove the
FindPackagemethod of theLookuptrait - std::jule::sema: add the
Comptimefield to theMatch - std::jule::sema: add the
Orderedmethod toTypeKind - std::jule::types: add
uintptrsupport for theBitsizeOffunction - std::jule::sema: fix the
Strmethod of theMapstruct uses old format
API
jule::Str: removejule::I32constructor and add the staticfrom_byteandfrom_runemethods
Jule 0.0.13
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-stroptimization flag - update:
--opt-copyoptimization 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
SortandIsSortedfunctions - std::process: reimplement the
Cmd - std::process: remove the
Pidtype alias - std::fs: reimplement the
Status - std::env: fix
Envfunction returns command-line arguments instead of environment variables - std::fs: add the
WriteStrmethod to theFile - std::fs: add the
WriteStrstatic method to theFile - std::io: the
WriteStrmethod of theByteStreamandFileStream, takes reference string now - std::sys: remove the
Wopendir,Wreaddir, andWclosedirfunctions for Windows - std::sys: add the
FindFirstFile,FindNextFile,FindClosefunctions for Windows - std::sys: remove the
WdirandWdirentstructs for Windows - std::sys: add the
Win32FindDatastruct for Windows - std::sys: remove last parameter of the
ReadConsolefunction for Windows - std::jule::ast: add the
Inheritsfield to theTraitDecl - std::jule::sema: add the
Inheritsfield to theTrait - std::jule::types: add the
MaxI,MaxU, andMinIfunctions
API
- optimize: string UTF-8 handling
- add:
jule::utf8_push_rune_bytes<Dest> - remove:
jule::utf8_rune_to_bytes - fix: the
jule::envfunction 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 reimplementedstd::fs::{Status}is reimplemented
Jule 0.0.12
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
deletefunction - 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
pubkeyword - update: the built-in
makefunction for buffered strings - remove: the built-in
hasmethod of the map type, use lookup assignment instead - remove: the built-in
delmethod of the map type, built-indeletefunction instead - remove: the built-in
keys, andvaluesmethods 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-deadcoderemoves 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, andcapfunctions - builtin: remove the
lenandcapfields from types and use thelenandcapfunctions instead - std::bytes: add the
Equalfunction - std::slice: add the
Equalfunction - std::io::
FileStream’sReadLinefunction 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.Sleepmethod tostd::timeasSleepfunction - std::jule::ast: add the
Constraintfield to theGenericDecl - std::jule::ast: add the
IsCofield to theFnCallExpr - std::jule::ast: remove the
Genericsfield of theFnCallExpr - std::jule::ast: remove the
CoExpr - std::jule::build: add the
ConstraintFailedfield to theLogMsg - std::jule::constant: add the
Kindfield to theConst - std::jule::sema: add the
InsGeneric,BuiltinLenCallExprModel,BuiltinCapCallExprModel, andBuiltinDeleteCallExprModelstructs - std::jule::sema: use
InsGenericforGenericsfield ofFnInsandStructIns - std::jule::sema: add the
Staticsfields to theStructureIns - std::jule::sema: add the
FindStaticmethod to theStructureIns - std::jule::sema: add the
IsConstraintmethod to thePrim - std::jule::sema: add the
Ownerfield to theStructSubIdentExprModel - std::jule::sema: remove the
ExprKindfield of theStructSubIdentExprModel - std::jule::sema: fix implementation of the
PerformsRCmethod of theTypeKind - std::jule:sema: rename the
Equalsmethod asEqualof theKindtrait - 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, andWsaDatastructures - 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::panicfunction 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_SPAWNmacros - 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
lenandcapfield update - Buffered string update for the built-in
makefunction - 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
Language
- add: buffered strings
- add: type-enums (aka sum types)
- update: enum syntax
- update: exceptionals are not allowed in global scope
- update: built-in
copymethod
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
gotostatement 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 hashingjule::Any: optimize type compatibility checkingjule::Any: use reference counting to manage internal allocation with optimizationsjule::Trait: optimize type compatibility checking
Standard Library
- std::io: add the
file,read_line_bytesandwrite_strmethods to theFileStream - std::io: the
read_linemethod returnsstrnow of theFileStream - std::io:: add the
write_strmethod to theByteStream - std::io:: the
stdin,stdout, andstderrmethods returnsFileStreamnow - std::fmt: print
<nil>instead ofnilfornildata - std::flag: fix dash processing
- std::math::big: add the
trailing_zerosmethod to theInt - std::math::rand:
Rand’s methods are immutable now - std::math::rand: add the
next, andnextnmethods to theRand - std::math::rand:
Seedstands foru64now - std::strings: add the
append_bytemethods - std::strings: optimized with buffered strings
- std::jule::integrated: remove
type_idfunction - std::jule::ast: use type-enum for node type aliases
- use std::jule::sema: use type-enum for
Stmt, andExprModeltype 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
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
clonemethod 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
i32forintif 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
newfunction calls - compiler: remove all documentation analysis features and related definitions
- compiler: fix the
Clonederive - 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
Disposetrait structure - update: all
nullptrcompatible types (except slice) writes<nil>tostd::ostreamif it is nil - update: the non-production is not need to debug information for the
jule::new_struct<T>and thejule::new_struct_ptr<T>functions - remove: deprecated
jule::new_struct<T>andjule::new_struct_ptr<T>functions
Standard Library
- add: std::encoding::ascii85
- add: std::jule::importer
- reimplement: std::encoding::binary
- std::io: add the
WriterClosertrait - 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 theFlagSet - std::jule: use
&Tokeninstead ofTokenas possible - std::jule::ast: fix
is_selfmethod of theParamDecl - std::jule::ast: use
&Exprinstead ofExprDataas possible to store expressions - std::jule::ast: rename the
declsfield asnodesofAst - std::jule::ast: the
implsfield merged with thenodesfield of theAst - std::jule::lex: reimplement the
File - std::jule::sema: remove the
OperatorMap - std::jule::sema: remove the
tokenfield of theStructLitExprModel - std::jule::sema: add the
typesmethod to theFnIns
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.
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
Language
- add: operator overloading via reserved methods
- add: the
eq,gt,gt_eq,lt,lt_eq,shl,shr,add,div,submul,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, andbit_xor_assignreserved methods - update: the
namespacedirective implies thetypedefdirective 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-pathoption - compiler: fix
—opt-copy - compiler: fix
—opt-deadcodeeliminates test functions on testing compilation - compiler: process exit code will be
1instead of0if any test failed - compiler: compile built-in
swapmethods 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
swapmethods for non-production compilations
Standard Library
- add:
std::math::big - reimplement:
std::process - std::conv: add the
atoifunction - std::conv: use exceptionals instead of returning error codes
- std::math::cmplx: add the
+=,-=,*=and/=operator overloading to theCmplxstructure - std::math::cmplx: add the unary
+,-operator overloading to theCmplxstructure - std::strings: fix the
trim,trim_left, andtrim_rightfunctions - std::sync: reimplement the
Mutex - std::sync: add the
newstatic method to theOnce - std::sync: add the
newstatic method to theWaitGroup - std::sync::atomic: fix the
storefunction always uses thei32type instead ofT - std::sync: add support for the
intanduinttype for atomic functions - std::jule::build: add the
OS, andARCHstatic variables - std::jule::constant: add the
gt_eq, andlt_eqmethods to theConststructure - std::jule::constant: rename the
eqsmethod aseqof theConststructure - std::jule::sema: remove the
refersfield of theFnInsstructure - std::jule::sema: add the
FuncPatternstructure - std::jule::sema: add the
Operatorsstructure - std::jule::types: add the
update_targetfunction - std::jule::types: the bit and type conversion functions are uses
intinstead ofu64now - std::jule::types: the
BIT_SIZE,SYS_INT, andSYS_UINTconstants are static now
Legacy Support
Jule code written for older versions is not guaranteed to compatible maintenance-free.
Jule 0.0.8
Language
- add: the
SMALLEST_NON_ZEROstatic field to thef64type - add: the
SMALLEST_NON_ZEROstatic field to thef32type - add: underscore support for numeric literals
- add: the
^operator support to integer enums - update: the
int,uintanduintptrtypes 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-appendapplies optimization by skip capacity checking - improve: the
—opt-mathoptimizes multiplications as bit-shifting if possible - improve: the
—opt-mathoptimizes 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_divfunction - fix: debug compilation support of the
unsafe_modfunction - fix:
Str::operator<andStr::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
inttype instead of thei64type for theFile’sseekmethod - std::jule::sema: add the
Kindtrait and implement to known Jule types - std::jule::sema: add the
OperandExprModelstructure - std::jule::sema: update kind as
&OperandExprModelof theBinopExprModel’sleftandrightfields - std::jule::sema: update kind as
&OperandExprModelof theAssign’slandrfields - std::jule::types: add the
SMALLEST_NON_ZERO_F64constant - std::jule::types: add the
SMALLEST_NON_ZERO_F32constant - std::jule::integrated: rename as
emittheinlinefunction - std::jule::integrated: add variadic argument to the
emitfor emit code from Jule source code - std::vec: add the
fit, andclearmethods to theVec[T]structure - std::sys: use the
inttype instead of thei64type for theseekfunction
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
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_strmethod for structures - add: support for the
<,>,<=,>=operators to thestrtype - remove: built-in methods of the
strtype - remove: the built-in
Disposetrait and add the reserveddisposemethod 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, andcpp20variables to directive expressions - compiler: add the
-—disable-rcoption to disable reference counting - compiler: add the
-—disable-safetyoption to disable safety measures - compiler: add the
—-opt-condoptimization 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
clonefunction - sema: fix constant bitwise eval
- sema: add constant eval support for len field of constant strings
- sema: the built-in
copyfunction no more mutability error for immutable typed source argument
API
- add: the
clonefunction support for thef32, andf64types - 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
- add: std::bytes
- add: std::encoding::csv
- add: std::math::cmplx
- add: std::strings
- std::mem: add the
freefunction - std::io: add the
ByteStreamstructure - std::jule::constant: add string support to the
gt, andltmethods of theConststructure
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
Language
- reimplement: directives
- add: exceptionals
- update: file annotation and build directive for platform specific programming
- add: C support for interoperability
- add: special syntax to fill arrays
- update: type safety rules of enums
- add:
production, andtestvariables for directive eval - reimplement: aliased use declarations
- add: integrated testing
- add: modules
- add: internal packages
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
systemcall and fixsignal code 17problem - compiler: improve handling of external compiler errors
- compiler: fix deadcode optimization
- compiler: add
deprecated, andtestdirectives - 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_suffixmethod - remove: termination header
- remove: signal header
- rename
ARCH_64BITasARCH_X64andARCH_32BITasARCH_X32
Standard Library
- add: std::testing
- remove: std::errors
- remove:
std::runtimeand move content intostd::env - reimplement: std::debug
- builtin: add
assertfunction - builtin: add
swapmethod to slice and array types - builtin: remove
Errortrait - std::flag: use exceptionals for error handling
- std::io: use exceptionals for error handling
- std::process: add
Cmdstruct - std::jule::integrated: add
inlinefunction - std::jule::integrated: remove
putsfunction - std::jule::ast: remove
is_fn_callmethod ofExprstruct - std::jule::sema: remove
BUILTIN_TRAIT_DISPOSEglobal - std::jule::sema: remove
BuiltinRealCallExprModel,BuiltinDropCallExprModel,BuiltinErrorTraitSubIdentExprModelstructs
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
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.