Releases: julelang/jule
Jule 0.1.1
Due to a technical issue, there is no release note for this release.
Thank you for your patience and understanding.
Legacy Support
This version includes some important semantic changes. For example, a different syntax is now used for the old type alias system, and the old syntax has completely different semantics. In addition there are some renamings and some significant changes to the standard library. All of this may break your existing code, but as always upgrading is recommended.
Jule 0.1.0
Language
- add: return forwarding support for multi-ret functions
- add:
uint
support for pointer arithmetic - add: the
export
directive - add: global scope support for exceptionals
- update: closure implementation
- update: trait implementation
- update: memory initialization behavior
- update: integer overflow behavior
- update: jule memory model
Compiler
- minor improvements, optimizations and bug fixes
- add: the
--opt-iter
, and--opt-dynamic
optimization flags - major improvements for the
--opt-access
optimization flag (experimental) - fix: swap optimization analysis may cause crash
- fix: reference variable analysis
- fix: the
--opt-deadcode
optimization flags removes operator overloading methods - fix: deadcode analysis eliminates reserved methods
- fix: code generation for literals of binded structures
- fix: code generation skips safety checks for modulo and division assignment operators
- fix: tab indentation handling for logs
- fix: code generation for function and method declarations
- fix:
--opt-math
optimization flag - fix and improve: default value handling for declarations
- parser: fix missing expected tokens may cause crash
- parser: fix invalid syntax for short variable declarations may cause crash
- parser: fix anonymous function declaration and function type declaration handling
- parser: fix variable declaration in scope with invalid syntax may cause crash
- parser: fix parser may crash when parsing match-case statements with invalid syntax
- parser: fix unsafe function type parsing
- parser: fix single declarative assignment statement handling
- parser: fix unhandled left operand error of assign statement may cause crash
- sema: fix function call argument analysis
- sema: fix mutability analysis for slices, arrays, and maps
- sema: fix handling of
CastingExprModel
tokens - sema: fix type analysis for
*unsafe
types may cause crash - sema: fix mutability analysis for destionation slice parameter of the built-in append function
- sema: fix interior mutability analysis for closures
- sema: fix declarative multi-assign analysis
- sema: fix trait implementations with failed type analysis may cause crash
- sema: fix type comparability analysis reports true for arrays with not-comparable element type
- sema: fix dependency collection for structures with type aliases
- sema: fix non-generic function handling for evaluation
- sema: fix global variable analysis may be wrong, especially when using the use declaration namespace in initialize expression
- sema: fix comparable analysis of binary eval
- sema: fix dynamic type annotation analysis of generic function calls
- sema: fix and optimize goto statement analysis
- sema: fix trait method evaluation always returns immutable data even base data is mutable
- sema: fix mutability analysis of map-lookup assignments
- sema: fix map-lookup assignment type compatibility analysis
- sema: fix mutability analysis of the built-in
error
function - sema: fix operator syntax analysis for assignments
- sema: fix matched type duplication analysis of match-type statements
- sema: fix reference collection of variables
- sema: fix casting expression handling
- sema: fix mutability analysis of variadic expressions
- sema: add while-next iteration support to missing return analysis infinite iteration detection
- sema: caught not-instantiated structure type declarations for evaluation
- importer: fix duplicated package analysis
Standard Library
- minor bug fixes and improvements
- add:
std::encoding::json
- add:
std::runtime
- reimplement:
std::comptime
- remove:
std::vec
- remove:
std::queue
- remove:
std::stack
- remove:
std::thread
- rehandle: the
Append
method variants of thestd::encoding::binary
- improve: handling of read/write operations
- builtin: add the
str
support for[]byte
types for the built-inappend
function - builtin: remove: the
assert
function - std::sync: reimplement
Mutex
- std::slices: add the
SortFunc
function - std::strings: add the
Compare
function - std::io: the
Scanner
forwards any exceptional - std::math::big: fix and optimize multiplications
- std::math::big: fix subtractions
- std::math::big: bit shifting methods takes
int
now - std::math::big: add the
DivMod
, andSqrt
methods toInt
- std::flag: caught nil variables for the
AddVar
method ofFileSet
- std::sync::atomic: use constraints for general atomic functions
- std::jule::ast: rename
Ast
asAST
- std::jule::integrated: the move
ToStr
function - std::jule::sema: rename the
PerformsRC
method asGC
ofTypeKind
- std::jule::sema: remove the
IterRelation
struct - std::jule::sema: remove the
IterRelation
field of theVar
struct - std::jule::sema: rename the
L
field asLeft
andR
field asRight
ofMultiAssign
- std::jule::sema: rename the
L
field asLeft
andR
field asRight
ofAssign
- std::jule::sema: remove the
IntegratedToStrExprModel
- std::jule::sema: add the
Decls
field toMultiAssign
- std::jule::sema: add the
Captured
field toAnonFnExprModel
- std::jule::sema: add the
Owner
field toFieldIns
- std::jule::sema: fix the
GetKindStr
method ofFnIns
may crash if declaration is not exist - std::jule::sema: add the
Scope
field toMatch
- std::jule::sema: add the
Scope
andIndex
field toGotoSt
andLabel
- std::jule::sema: add the
ChildIndex
andStmtIndex
toScope
- std::jule::sema: fix the
IsMethod
method ofFn
is not reports true for traits - std::jule::sema: fix the
GC
method ofTypeKind
is not reports true for type enums - std::strings:: add the
EqualFold
function - std::unicode: add the
SimpleFold
function - std::unicode::utf8: fix
DecodeRune
andDecodeRuneStr
- std::unsafe: the
Slice
function takes an argument for capacity
API
The API is now largely implemented by the compiler, adhering to the Jule Runtime implementation. Many important functions and functions have been implemented with Jule. Please check the API documentation for changes.
Legacy Support
This can totally be described as a breaker. It includes radical changes in many places such as standard library, compiler and API. Therefore, updating the version may require additional effort, but it is definitely recommended.
About Releases
Jule was in the pre-release phase for more than 1 year and the pre-release qualification was removed with jule0.0.15
. With this version, there is a real beta version and it is called jule0.1.0
. This is not a stable release and does not guarantee any particular stability.
Jule 0.0.15
Language
- add: short variable declaration syntax
- remove: the built-in
swap
method of slice and array types - remove: deriving and cloning
- update: data types are considered as built-in type aliases instead of keywords
- update: slicing behavior of slices
- update: traits are considered as mutable type
- update: consider
true
,false
andnil
keywords as built-in constant variables and imagine keywords - update: strings are immutable now and performs rerefence-counting
- update: static variables cannot be reference
- update: syntax of comptime matching and comptime iterations
Compiler
- numerous optimizations, improvements and minor fixes
- add: the
--opt-slice
,--opt-assign
, and--opt-exceptional
optimization flags - fix: C++20 support
- fix: code generation for tuple-type declarations, thanks @sparky4pro and
_lex
for pointing to the issue - fix: some backend compilers may cause compile error when unicode identifiers used on some platforms
- fix: code generation will not generate string literals with literal-special algorithm for structure ostream
- fix: code generation for multi-assign statements with tuple-return functions including traits and any types
- update:
--opt-str
optimization, removed some optimizations because of new immutable strings - improve: the
--opt-append
optimizations for self-append l-value expressions - improve: the
--opt-cond
,--opt-math
,--opt-str
,--opt-deadcode
and--opt-ptr
optimizations - lex: fix
IsAssign
function reportstrue
for the dot token - lex: fix
IsBinOp
function reportsfalse
for sometrue
tokens - parser: fix type-enum item parsing
- parser: fix structure field parsing may cause runtime crash due to source code including missing type
- error for the field
- parser: caught keywords used in use declarations
- sema: fix type declaration handling from unary expression
- sema: fix compiler crash during constant matching analysis with zero-statement case
- sema: fix case handling of comptime-matching, remove all cases if any case is not matched
- sema: fix default case handling comptime-matching, avoid making analysis without checking existing case matches
- sema: fix handled unexceptional built-in functions are not causes compile error
- sema: fix dynamic type annotation for generic function calls allows nil-literals
- sema: fix
comptime::ValueOf
function allows nil-literals - sema: fix illegal cycle caught algorithm for types
- sema: fix mutability analysis of unary expressions
- sema: fix declarative-multi-assign statement may cause runtime crash with single expression
- sema: fix mutable data sharing is allowed even field is accessible between copies within scope of the interior mutability
- sema: fix lvalue analysis of indexing epxressions
- sema: fix type analysis of the built-in
make
function accepts all types - sema: fix entry point and init functions can take the
#deprecated
directive - sema: fix evaluation of type declarations
- sema: fix reference collection for generic functions
- sema: fix type compatibility analysis and handling of untyped literals
- sema: caught responsive-immutable struct literals for mutable operations and interior mutable memory
- sema: caught blank identifier use declaration aliases and link paths
- sema: minor improvements for constant expression evaluation:
- Improvement: don’t remove constant status of string-enum to string casting expressions
- Convert at comptime: constant-string to byte-slice casting expressions
- Convert at comptime: constant-string to rune-slice casting expressions
- Convert at comptime: constant-byte to string casting expressions
- Convert at comptime: constant-rune to string casting expressions
Standard Library
- numerous optimizations, improvements and minor fixes
- add: std::unsafe
- reimplement: std::jule::constant::lit
- std::fs: remove the
WriteStr
method ofFile
- std::io: remove the
WriteStr
method of theByteStream
andFileStream
- std::comptime: rename
Kind.Ref
asKind.SmartPtr
- std::comptime: add the
Match
,TypeAlias
,Line
,File
, andFiles
functions - std::comptime: remove the
Range
functions - std::comptime: add the
RC
method tocomptimeTypeInfo
- std::encoding::base64: fix encode(decode length calculation may cause crash because of zero-length allocation
- std::encoding::base32: fix encoding without padding
- std::encoding::base32: add the
EncodeLen
andDecodeLen
functions - std::encoding::base64: add the
EncodeLen
andDecodeLen
functions - std::encoding::ascii85: rename the MaxEncodedLen function as MaxEncodeLen
- std::jule::lex: remove the
IsOk
method of theFile
- std::jule::ast: remove the
IsPrim
method of theIdentTypeDecl
- std::jule::ast: remove the
IsSelf
field of theSubIdentExpr
- std::jule::ast: rename
BinopExpr
asBinaryExpr
- std::jule::sema: remove the
IsBuiltin
method ofTrait
- std::jule::sema: remove the
CommonIdentExprModel
andCommonSubIdentExprModel
- std::jule::sema: rename
BinopExprModel
asBinaryExprModel
- std::jule::sema::types: remove the all
IsCompatible
variants - std::unicode::utf8: rename the
UtfMax
constant asUTFMax
- std::math: rename the
Fma
function asFMA
- std::strings:: add the
StrBuilder
- std::math::big: use constraints for the
Int.New
static method - std::flag: use constraints for the
Add
andAddVar
functions - std::jule::integrated: rename the
Utf16FromStr
function asUTF16FromStr
- std::jule::integrated: rename the
Utf16ToStr
function asUTF16ToStr
- std::jule::integrated: add the
StrToBytes
function
API
- fix:
jule::to_str<T>
function define declared asjule::to_str2<T>
- fix:
std::mem::Free
function support of thejule::Trait<Mask>
andjule::Any
- fix: wrong declaration of
jule::utf16_decode
- fix: interoperability compatibility of mutable slicing algorithm of
jule::Str
- remove:
#derive Clone
implementations jule::Str
: reimplemented as immutable length-based (not NULL termination based) stringjule::Slice<Item>
: add thevoid append(const jule::Slice<Item>&)
methodjule::Slice<Item>
: remove theswap
methodjule::Array<Item, N>
: remove theswap
method
Legacy Support
This version contains many bug fixes so updating is highly recommended. However, if you update it, your old codes may not compile and some performance problems may occur. For compilation issues, you need to update your code accordingly.
Here are some official tips for performance and interoperability issues:
First of all, there is not much change that could cause performance degradation. Therefore, there is only one specific point you need to look at: strings. Strings cause performance degradation mostly in concatenation operations. Since Jule used mutable strings in previous versions, it could handle this quite efficiently, but now immutable strings are used. Therefore, the cost of merging operations is significantly higher. For strings that you do a high amount of concatenation, use the StrBuilder
structure provided by the std::strings
package. This structure is designed to concatenate strings and treat them as a single string and should largely prevent performance loss.
Review where you rely on automatic conversion of strings for interoperability, otherwise some errors may occur in your program. This is because strings are now length-based rather than NULL terminated. This can lead to various errors due to the lack of NULL termination, especially when working with C-strings. For a safe conversion, the StrToBytes
function is provided by the std::jule::integrated
package. It is highly recommended to use this function for conversion.
If you are wondering why new strings are designed to be length-based rather than NULL termination, despite the risk of causing interoperability problems, it is recommended that you read this section in the manual: About Interoperability and Type Compatibility - Strings.
About Releases
Previous versions were marked as pre-release. It will no longer be marked. Since the bugs have been largely resolved and Jule is mature enough to be used for many tasks, it has been decided that beta versions will no longer be marked as pre-release. So this doesn't mean Jule is stable now. Compiler and standard library still may have some important bugs since Jule is still in beta.
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:
int
andcpp.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
Cut
function - std::strings: add the
Cut
function - std::mem: disallow void and function types for the
SizeOf
andAlignOf
functions - std::jule::sema: remove the
FindPackage
method of theLookup
trait - std::jule::sema: add the
Comptime
field to theMatch
- std::jule::sema: add the
Ordered
method toTypeKind
- std::jule::types: add
uintptr
support for theBitsizeOf
function - std::jule::sema: fix the
Str
method of theMap
struct uses old format
API
jule::Str
: removejule::I32
constructor and add the staticfrom_byte
andfrom_rune
methods
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-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
andIsSorted
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 theFile
- std::fs: add the
WriteStr
static method to theFile
- std::io: the
WriteStr
method of theByteStream
andFileStream
, takes reference string now - std::sys: remove the
Wopendir
,Wreaddir
, andWclosedir
functions for Windows - std::sys: add the
FindFirstFile
,FindNextFile
,FindClose
functions for Windows - std::sys: remove the
Wdir
andWdirent
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 theTraitDecl
- std::jule::sema: add the
Inherits
field to theTrait
- std::jule::types: add the
MaxI
,MaxU
, andMinI
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 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
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-indelete
function instead - remove: the built-in
keys
, andvalues
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
, andcap
functions - builtin: remove the
len
andcap
fields from types and use thelen
andcap
functions instead - std::bytes: add the
Equal
function - std::slice: add the
Equal
function - std::io::
FileStream
’sReadLine
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 tostd::time
asSleep
function - std::jule::ast: add the
Constraint
field to theGenericDecl
- std::jule::ast: add the
IsCo
field to theFnCallExpr
- std::jule::ast: remove the
Generics
field of theFnCallExpr
- std::jule::ast: remove the
CoExpr
- std::jule::build: add the
ConstraintFailed
field to theLogMsg
- std::jule::constant: add the
Kind
field to theConst
- std::jule::sema: add the
InsGeneric
,BuiltinLenCallExprModel
,BuiltinCapCallExprModel
, andBuiltinDeleteCallExprModel
structs - std::jule::sema: use
InsGeneric
forGenerics
field ofFnIns
andStructIns
- std::jule::sema: add the
Statics
fields to theStructureIns
- std::jule::sema: add the
FindStatic
method to theStructureIns
- std::jule::sema: add the
IsConstraint
method to thePrim
- std::jule::sema: add the
Owner
field to theStructSubIdentExprModel
- std::jule::sema: remove the
ExprKind
field of theStructSubIdentExprModel
- std::jule::sema: fix implementation of the
PerformsRC
method of theTypeKind
- std::jule:sema: rename the
Equals
method asEqual
of theKind
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
, andWsaData
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
andcap
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
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 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_bytes
andwrite_str
methods to theFileStream
- std::io: the
read_line
method returnsstr
now of theFileStream
- std::io:: add the
write_str
method to theByteStream
- std::io:: the
stdin
,stdout
, andstderr
methods returnsFileStream
now - std::fmt: print
<nil>
instead ofnil
fornil
data - std::flag: fix dash processing
- std::math::big: add the
trailing_zeros
method to theInt
- std::math::rand:
Rand
’s methods are immutable now - std::math::rand: add the
next
, andnextn
methods to theRand
- std::math::rand:
Seed
stands foru64
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
, andExprModel
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
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
forint
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>
tostd::ostream
if 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
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 theFlagSet
- std::jule: use
&Token
instead ofToken
as possible - std::jule::ast: fix
is_self
method of theParamDecl
- std::jule::ast: use
&Expr
instead ofExprData
as possible to store expressions - std::jule::ast: rename the
decls
field asnodes
ofAst
- std::jule::ast: the
impls
field merged with thenodes
field of theAst
- std::jule::lex: reimplement the
File
- std::jule::sema: remove the
OperatorMap
- std::jule::sema: remove the
token
field of theStructLitExprModel
- std::jule::sema: add the
types
method 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
,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
, andbit_xor_assign
reserved methods - update: the
namespace
directive implies thetypedef
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 of0
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 theCmplx
structure - std::math::cmplx: add the unary
+
,-
operator overloading to theCmplx
structure - std::strings: fix the
trim
,trim_left
, andtrim_right
functions - std::sync: reimplement the
Mutex
- std::sync: add the
new
static method to theOnce
- std::sync: add the
new
static method to theWaitGroup
- std::sync::atomic: fix the
store
function always uses thei32
type instead ofT
- std::sync: add support for the
int
anduint
type for atomic functions - std::jule::build: add the
OS
, andARCH
static variables - std::jule::constant: add the
gt_eq
, andlt_eq
methods to theConst
structure - std::jule::constant: rename the
eqs
method aseq
of theConst
structure - std::jule::sema: remove the
refers
field of theFnIns
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 ofu64
now - std::jule::types: the
BIT_SIZE
,SYS_INT
, andSYS_UINT
constants 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_ZERO
static field to thef64
type - add: the
SMALLEST_NON_ZERO
static field to thef32
type - add: underscore support for numeric literals
- add: the
^
operator support to integer enums - update: the
int
,uint
anduintptr
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<
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
int
type instead of thei64
type for theFile
’sseek
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 theBinopExprModel
’sleft
andright
fields - std::jule::sema: update kind as
&OperandExprModel
of theAssign
’sl
andr
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
theinline
function - std::jule::integrated: add variadic argument to the
emit
for emit code from Jule source code - std::vec: add the
fit
, andclear
methods to theVec[T]
structure - std::sys: use the
int
type instead of thei64
type for theseek
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.