Skip to content

Releases: julelang/jule

Jule 0.1.0

26 Sep 12:06
Compare
Choose a tag to compare

Language

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 the std::encoding::binary
  • improve: handling of read/write operations
  • builtin: add the str support for []byte types for the built-in append 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, and Sqrt methods to Int
  • std::flag: caught nil variables for the AddVar method of FileSet
  • std::sync::atomic: use constraints for general atomic functions
  • std::jule::ast: rename Ast as AST
  • std::jule::integrated: the move ToStr function
  • std::jule::sema: rename the PerformsRC method as GC of TypeKind
  • std::jule::sema: remove the IterRelation struct
  • std::jule::sema: remove the IterRelation field of the Var struct
  • std::jule::sema: rename the L field as Left and R field as Right of MultiAssign
  • std::jule::sema: rename the L field as Left and R field as Right of Assign
  • std::jule::sema: remove the IntegratedToStrExprModel
  • std::jule::sema: add the Decls field to MultiAssign
  • std::jule::sema: add the Captured field to AnonFnExprModel
  • std::jule::sema: add the Owner field to FieldIns
  • std::jule::sema: fix the GetKindStr method of FnIns may crash if declaration is not exist
  • std::jule::sema: add the Scope field to Match
  • std::jule::sema: add the Scope and Index field to GotoSt and Label
  • std::jule::sema: add the ChildIndex and StmtIndex to Scope
  • std::jule::sema: fix the IsMethod method of Fn is not reports true for traits
  • std::jule::sema: fix the GC method of TypeKind is not reports true for type enums
  • std::strings:: add the EqualFold function
  • std::unicode: add the SimpleFold function
  • std::unicode::utf8: fix DecodeRune and DecodeRuneStr
  • 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

17 Aug 10:27
Compare
Choose a tag to compare

Language

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 reports true for the dot token
  • lex: fix IsBinOp function reports false for some true 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 of File
  • std::io: remove the WriteStr method of the ByteStream and FileStream
  • std::comptime: rename Kind.Ref as Kind.SmartPtr
  • std::comptime: add the Match, TypeAlias, Line, File, and Files functions
  • std::comptime: remove the Range functions
  • std::comptime: add the RC method to comptimeTypeInfo
  • 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 and DecodeLen functions
  • std::encoding::base64: add the EncodeLen and DecodeLen functions
  • std::encoding::ascii85: rename the MaxEncodedLen function as MaxEncodeLen
  • std::jule::lex: remove the IsOk method of the File
  • std::jule::ast: remove the IsPrim method of the IdentTypeDecl
  • std::jule::ast: remove the IsSelf field of the SubIdentExpr
  • std::jule::ast: rename BinopExpr as BinaryExpr
  • std::jule::sema: remove the IsBuiltin method of Trait
  • std::jule::sema: remove the CommonIdentExprModel and CommonSubIdentExprModel
  • std::jule::sema: rename BinopExprModel as BinaryExprModel
  • std::jule::sema::types: remove the all IsCompatible variants
  • std::unicode::utf8: rename the UtfMax constant as UTFMax
  • std::math: rename the Fma function as FMA
  • std::strings:: add the StrBuilder
  • std::math::big: use constraints for the Int.New static method
  • std::flag: use constraints for the Add and AddVar functions
  • std::jule::integrated: rename the Utf16FromStr function as UTF16FromStr
  • std::jule::integrated: rename the Utf16ToStr function as UTF16ToStr
  • std::jule::integrated: add the StrToBytes function

API

  • fix: jule::to_str<T> function define declared as jule::to_str2<T>
  • fix: std::mem::Free function support of the jule::Trait<Mask> and jule::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) string
  • jule::Slice<Item>: add the void append(const jule::Slice<Item>&) method
  • jule::Slice<Item>: remove the swap method
  • jule::Array<Item, N>: remove the swap 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

17 Jul 13:13
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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.