Skip to content

Latest commit

 

History

History
370 lines (357 loc) · 15.2 KB

releasenotes.md

File metadata and controls

370 lines (357 loc) · 15.2 KB

C3C Release Notes

0.5.0 Change List

Changes / improvements

  • Added $$atomic_fetch_* builtins.
  • vectors may now contain pointers.
  • void! does not convert to anyfault.
  • $$masked_load / $$masked_store / $$gather / $$scatter for vector masked load/store.
  • $$select builtin for vector masked select.
  • Added builtin benchmarks by benchmark, compile-benchmark commands and @benchmark attribute.
  • Subtype matching in type switches.
  • Added parentof typeid property.
  • Slice assignment is expanded.
  • Strong optional handling requirements.
  • Better dead code analysis, and added dead code errors.
  • Exhaustive switches with enums has better analysis.
  • Globals may now be initialized with optional values.
  • New generic syntax.
  • Slice initialization.
  • $feature for feature flags.
  • Improved stack trace.
  • Macro ref parameters are now of pointer type and ref parameters are not assignable.
  • Added nextcase default.
  • Added $embed to embed binary data.
  • Ad hoc generics are now allowed.
  • Allow inferred type on method first argument.
  • Fix to void expression blocks
  • Temporary objects may now invoke methods using ref parameters.
  • Delete object files after successful linking.
  • Compile time subscript of constant strings and bytes.
  • @if introduced, other top level conditional compilation removed.
  • @dynamic and @interface for dynamic dispatch.
  • $if now uses $if <expr>: syntax.
  • $assert now uses $assert <expr> : <optional message>
  • $error is syntax sugar for $assert false : "Some message"
  • $include, $echo no longer has mandatory () around the arguments.
  • $exec for including the output of files.
  • assert no longer allows "try unwrap"
  • Updated cpu arguments for x86
  • Removed support for ranged case statements that were floats or enums, or non-constant.
  • nextcase with a constant expression that does not match any case is an error.
  • Dropped support for LLVM 13-14.
  • Updated grammar and lexer definition.
  • Removal of $elif.
  • any / anyfault may now be aliased.
  • @stdcall etc removed in favor of @callconv
  • Empty fault definitions is now an error.
  • Better errors on incorrect bitstruct syntax.
  • Internal use wildcard type rather than optional wildcard.
  • Experimental scaled vector type removed.
  • Disallow parameterize attributes without parameters eg define @Foo() = { @inline }.
  • Handle @optreturn contract, renamed @return!.
  • Restrict interface style functions.
  • Optional propagation and assignment '!' and '?' are flipped.
  • Add l suffix (alias for i64).
  • Allow getting the underlying type of anyfault.
  • De-duplicate string constants.
  • Change @extname => @extern.
  • define and typedef removed.
  • define is replaced by def.
  • LLVM "wrapper" library compilation is exception free.
  • private is replaced by attribute @private.
  • Addition of @local for file local visibility.
  • Addition of @public for overriding default visibility.
  • Default visibility can be overridden per module compile unit. Eg module foo @private.
  • Optimized macro codegen for -O0.
  • Addition of unary +.
  • Remove possibility to elide length when using ':' for slices.
  • Remove the : and ; used in $if, $switch etc.
  • Faults have an ordinal.
  • Generic module contracts.
  • Type inference on enum comparisons, e.g foo_enum == ABC.
  • Allow {} to initialize basic types.
  • String literals default to String.
  • More const modification detection.
  • C3L zip support.
  • Support printing object files.
  • Downloading of libraries using vendor "fetch".
  • Structural casts removed.
  • Added "native" option for vector capability.
  • $$shufflevector replaced with $$swizzle and $$swizzle2.
  • Builtin swizzle accessors.
  • Lambdas, e.g a = int(x, y) => x + y.
  • $$FILEPATH builtin constant.
  • variant renamed any.
  • anyerr renamed anyfault.
  • Added $$wasm_memory_size and $$wasm_memory_grow builtins.
  • Add "link-args" for project.
  • Possible to suppress entry points using --no-entry.
  • Added memory-env option.
  • Use the .wasm extension on WASM binaries.
  • Update precedence clarification rules for ^|&.
  • Support for casting any expression to void.
  • Win 32-bit processor target removed.
  • Insert null-check for contracts declaring & params.
  • Support user defined attributes in generic modules.
  • --strip-unused directive for small binaries.
  • $$atomic_store and $$atomic_load added.
  • usz/isz replaces usize and isize.
  • @export attribute to determine what is visible in precompiled libraries.
  • Disallow obviously wrong code returning a pointer to a stack variable.
  • Add &^| operations for bitstructs.
  • @noinit replaces = void to opt-out of implicit zeroing.
  • Multiple declarations are now allowed in most places, eg int a, b;.
  • Allow simplified (boolean) bitstruct definitions.
  • Allow @test to be placed on module declarations.
  • Updated name mangling for non-exports.
  • defer catch and defer try statements added.
  • Better errors from $assert.
  • @deprecated attribute added.
  • Allow complex array length inference, eg int[*][2][*] a = ....
  • Cleanup of cast code.
  • Removal of generic keyword.
  • Remove implicit cast enum <-> int.
  • Allow enums to use a distinct type as the backing type.
  • Update addition and subtraction on enums.
  • @ensure checks only non-optional results.
  • assert may now take varargs for formatting.

Stdlib changes

  • Added math::log(x , base) and math::ln(x).
  • Hashmap keys implicitly copied if copy/free are defined.
  • Socket handling.
  • csv package.
  • Many random functions.
  • Updated posix/win32 stdlib namespacing
  • process stdlib
  • Stdlib updates to string.
  • Many additions to List: remove, array_view, add_all, compact etc
  • Added dstringwriter.
  • Improved printf formatting.
  • is_finite/is_nam/is_inf added.
  • OnStack allocator to easily allocate a stack buffer.
  • File enhancements: mkdir, rmdir, chdir.
  • Path type for file path handling.
  • Distinct String type.
  • VarString replaced by DString.
  • Removal of std::core::str.
  • JSON parser and general Object type.
  • Addition of EnumMap.
  • RC4 crypto.
  • Matrix identity macros.
  • compare_exchange added.
  • printfln and println renamed printfn and printn.
  • Support of roundeven.
  • Added easings.
  • Updated complex/matrix, added quaternion maths.
  • Improved support for freestanding.
  • Improved windows main support, with @winmain annotations.
  • SimpleHeapAllocator added.
  • Added win32 standard types.
  • Added saturated math.
  • Added @expect, @unlikely and @likely macros.
  • Temp allocator uses memory-env to determine starting size.
  • Temp allocator is now accessed using mem::temp(), heap allocator using mem::heap().
  • Float parsing added.
  • Additions to std::net, ipv4/ipv6 parsing.
  • Stream api.
  • Random api.
  • Sha1 hash function.
  • Extended enumset functionality.
  • Updated malloc/calloc/realloc/free removing old helper functions.
  • Added TrackingAllocator.
  • Add checks to prevent incorrect alignment on malloc.
  • Updated clamp.
  • Added Clock and DateTime.
  • Added posix socket functions.

Fixes

  • Fix missing comparison between any.
  • Fix issue of designated initializers containing bitstructs.
  • Fix issue of designated initializers that had optional arguments.
  • Fixed ++ and -- for bitstructs.
  • Fix to bug where library source files were sometimes ignored.
  • Types of arrays and vectors are consistently checked to be valid.
  • Anonymous bitstructs check of duplicate member names fixed.
  • Assignment to anonymous bitstruct members in structs.
  • Fix casts on empty initializers.
  • Fix to DString reserve.
  • Fix where aliases did not do arithmetic promotion.
  • @local declarations in generic modules available by accident.
  • Fixes missing checks to body arguments.
  • Do not create debug declaration for value-only parameter.
  • Bug in alignment for atomics.
  • Fix to bug when comparing nested arrays.
  • Fix to bug when a macro is using rethrow.
  • Fixes bug initializing a const struct with a const struct value.
  • Fixes bug when void is passed to an "any"-vararg.
  • Fixed defer/return value ordering in certain cases.
  • Fixes to the x64 ABI.
  • Updates to how variadics are implemented.
  • Fixes to shift checks.
  • Fixes to string parsing.
  • Bug when rethrowing an optional from a macro which didn't return an optional.
  • Fixed issues with ranged cases.
  • Disallow trailing ',' in function parameter list.
  • Fixed errors on flexible array slices.
  • Fix of readdir issues on macOS.
  • Fix to slice assignment of distinct types.
  • Fix of issue casting subarrays to distinct types.
  • Fixes to split, rindex_of.
  • List no longer uses the temp allocator by default.
  • Remove test global when not in test mode.
  • Fix sum/product on floats.
  • Fix error on void! return of macros.
  • Removed too permissive casts on subarrays.
  • Using C files correctly places objects in the build folder.
  • Fix of overaligned deref.
  • Fix negating a float vector.
  • Fix where $typeof(x) { ... } would not be a valid compound literal.
  • Fix so that using var in if (var x = ...) works correctly.
  • Fix int[] -> void* casts.
  • Fix in utf8to16 conversions.
  • Updated builtin checking.
  • Reduce formatter register memory usage.
  • Fixes to the "any" type.
  • Fix bug in associated values.
  • More RISC-V tests and fixes to the ABI.
  • Fix issue with hex floats assumed being double despite f suffix.
  • Fix of the tan function.
  • Fixes to the aarch64 ABI when passing invalid vectors.
  • Fix creating typed compile time variables.
  • Fix bug in !floatval codegen.
  • Fix of visibility issues for generic methods.
  • Fixes to $include.
  • Fix of LLVM codegen for optionals in certain cases.
  • Fix of $vasplat when invoked repeatedly.
  • Fix to $$DATE.
  • Fix of attributes on nested bitstructs.
  • Fix comparing const values > 64 bits.
  • Defer now correctly invoked in expressions like return a > 0 ? Foo.ABC! : 1.
  • Fix conversion in if (int x = foo()).
  • Delay C ABI lowering until requested to prevent circular dependencies.
  • Fix issue with decls accidentally invalidated during $checked eval.
  • Fold optional when casting slice to pointer.
  • Fixed issue when using named arguments after varargs.
  • Fix bug initializing nested struct/unions.
  • Fix of bool -> vector cast.
  • Correctly widen C style varargs for distinct types and optionals.
  • Fix of too aggressive codegen in ternary codegen with array indexing.

0.4.0 Change List

  • Compatibility with LLVM 16.
  • Dropped LLVM 12 support.
  • Updated vector comparisons.
  • Built in unit testing with @test and compile-test
  • Updated memory allocators. Added @scoped and @pool macros.
  • Various bug fixes.
  • Generic modules may now be generic over integers and booleans.
  • Constant pointers may be compile time evaluated.
  • Added many new builtins.
  • Emit asm using --emit-asm.
  • Added --nostdlib and --nolibc.
  • Compiling for AVX can now select "native".
  • Fixes to adding libraries at link time.
  • Various improved error messages.
  • Windows debug info fixes.
  • Add of foreach_r for reverse list traversal.
  • Script downloading the MSVC SDK to cross compile to windows.
  • Many standard library additions.
  • Extension methods may be added for built-in types.
  • Macros may take vector and array arguments generic over length.
  • Macro varargs with $vaarg, $vacount etc.
  • Many vector builtins added as dot methods.
  • in / out / inout doc parameters checked.
  • Initial inline asm support for aarch64 and x64.
  • Single line short function declaration.
  • Added $checks builtin.
  • Added $include builtin for including other text files.
  • Optional single module compilation.
  • Static initialization / finalization to have code running at start/end.
  • C3 custom printf function in the stdlib.
  • []= overload now works correctly.
  • Static libraries may now be built.
  • More compile time reflection added and general cleanup done.
  • usize/isize/iptrdiff/uptrdiff replaced by usz/isz.
  • Add var to allow type inference on regular variables.
  • LLVM codegen optimizations.
  • ?? now allows chaining another optional.
  • int128 support on all platforms.
  • import is now allowed anywhere at the top level.
  • project.c3p renamed project.json
  • Update to project properties, e.g. "libs" -> "dependencies" etc.
  • $$TIME, $$DATE and $$FUNCTION builtin defines added.
  • $echo function to print messages at compile time.
  • Improvements to untyped lists.
  • Various builtins added: $$prefetch, $$reverse, $$shufflevector etc.

0.3.0 Change List

Changes / improvements:

  • Allow any expression as default expression.
  • Allow using enums for indexing arrays.
  • Added $convertable / $castable compile time functions.
  • Removed ´func´ deprecated keyword
  • Slicing a distinct type now returns the distinct type.
  • Renamed @autoimport -> @builtin
  • Zero length arrays not allowed
  • Allow methods may use ref, pointer and value arguments as "self"
  • Updated external name mangling
  • More advanced introspection.
  • @maydiscard and @nodiscard annotations
  • New type promotion rules: The common type of int[x]* and int[y]* is int[]
  • Added type.inner and type.len reflection.
  • Support float mod operations.
  • Add float.max/min.
  • Allow [in] contract to be used on subarray types.
  • Add linker and linked dir arguments to build files.
  • Auto-import std::core.
  • LLVM 15 support.
  • Beter native file handling for MSVC
  • New import rules – recursive imports
  • Add lld linking for FreeBSD
  • User defined attributes. @Foo = @inline
  • Support enum associated values.
  • @ is now part of the name of an attribute or a macro. Macros without '@' must be function-like.
  • Ordinal based enums.
  • Allow locals to shadow global variables.
  • Prefer inferred constant over global in the case of MyEnum f = BAR;
  • Enum and fault name reflection.
  • Deref null error now panics in safe mode.

Changes to stdlib:

  • Updated allocators.
  • Added enum_by_name.
  • Moved bitcast to builtin module.
  • Native printf for files and strings.
  • Updated String.
  • Comparison macros
  • Added Binary-Heap Based Priority Queue by David Kopec
  • Matrix Math Library by PixelRifts
  • UTF conversions in "conv" module.

Fixes:

  • Attributes correctly checks for recursive definitions now.
  • Added a max bitstruct size.
  • Fix of expr location in args.
  • Fixing distinct, typedef and bitstruct copying. Fix where global constants did not need to be constant.
  • Better error on all upper parameter names.
  • Fix constant typeid comparisons.
  • Simplify and corrected if try/catch parsing.
  • Fix bug with { [A] = 1 }
  • Conversion unsigned int -> enum fixed.
  • Fix bug preventing implicit & on optionals.
  • More efficient int[] a = {}
  • Fix bug in extension methods for generic types and typedefs
  • Fix to extension methods in other modules.
  • Disallow complist as a regular macro parameter.
  • Fix in nested block handling
  • Fix of error where {| |} with value return could have no final return
  • Vararg abi fix
  • Fix "libs" in project creation
  • Fix bug with bit struct initialization and zeros
  • Reduce size of memory pages used.
  • Fix issues with union of const.
  • Fix initialization of anonymous structs.
  • Fix conversion between distinct void* and null
  • Fix of default project creation target format.
  • Fix of $sizeof(Type) => Type.sizeof
  • Fix stack setting after error return.
  • Fix module assignment of declarations
  • Global @align fixed
  • Fixes enum set with new ordinal based enums
  • SysV ABI fix for passing certain things by struct.
  • Fix implicitly converting to float in the case of myfloat *= -1