Releases: cobalt-language/cobalt-lang
v0.7.1
Features
Bugs
- LLVM 15 is no longer supported because it caused some issues (#113)
- Library lookup has been improved, now about 1000 times faster and searches paths better (#112)
Internals
- Update dependencies to
git2
andtoml
(#103, #105) - CLI errors have a somewhat nicer API (#111)
- The type system has been reworked (#109)
Full Changelog: 0.7.0...0.7.1
v0.7.0
Features
- Destructors have been added (#91, #101)
- Code runs at optimization level 2 by default (#93)
- Structs have been added (#94)
- An entire file can be specified as being part of a module (#95)
- Linear (must use) types (#99)
Bugs
- A lot of mutability-related bugs have been fixed (#90)
- Bitcasts work in more cases (#96)
- ZSTs work in more cases (#97)
- ASTs reference input data (#98)
Internals
- The parser has been completely rewritten using
chumsky
(#89) with some documentation (#100) - The code is now formatted according to Rust's style guide (#92)
Full Changelog: 0.6.0...0.7.0
v0.6.0
What's Changed
- The compiler emits objects that contain header information by default now (#79)
- The parser no longer hangs if the closing parenthesis for function parameters is missing (#81)
- Variables can be accessed in function parameter default values without everything crashing (#81).
- References and pointers now use prefix notation (#82)
- Mutability semantics have been reworked under the hood (#82)
- LLVM 16 is supported (#83)
- Unused AST functions have been removed (#84)
- The
@sizeof
,@typeof
, and@typename
intrinsics have been added (#85) type
andnull
now work as literals (3deaa7b)co multi aot
properly creates parent directories (92bb41e)- Multiline comments parse properly (7c4d4e1)
Full Changelog: 0.5.4...0.6.0
v0.5.4
What's Changed
- More parser issues! Yay! (#71)
- Commands can be times (#72, #77)
- Libraries work on MacOS now (#73)
- Library lookup now uses
ld
search paths (#73) - Borrow types no longer exist (#74)
- References to references aren't allowed (#74)
- Local variables aren't visible in nested functions (#74)
- Statically sized arrays can be passed around on stack (#75)
- Statically sized
alloca
s are now in the entry block of functions, so mutable variables can be defined in long-running loops without stack overflows (#76) - Multi-file compilation is allowed (#77)
New Contributors
- @treemcgee42 made their first contribution in #73
Full Changelog: 0.5.3...0.5.4
v0.5.3
What's Changed
- The project is now split into sub-projects in a workspace. (#68)
miette
is used instead ofcodespan-reporting
for error reporting. (#69)- Changes to characters and strings (all #69):
- Characters and strings don't have to be valid Unicode.
- Strings evaluate to
u8[N] const&
. - Character literals evaluate to
u32
. - Strings are no longer null-terminated by default. A null-terminator can be added with
c
orC
suffixes. - Unicode escapes are Rust-style instead of C-style (
\u{HHHH...}
instead of\uHHHH
and\UHHHHHHHH
). \cHH
is equivalent to\u{HH}
(previously\xHH
).\xHH
(string literals only) inserts the byte0xHH
.
- All zero-sized types can be returned from functions, not just
null
(64b0405). clap
is used for the CLI (d3a226c).- Emit types are now specified with
-e|--emit <type>
where<type>
is one of:exe
lib
obj
asm
llvm
bc
header
header-obj
- The
jit
subcommand can now haveargv[0]
set with-t|--this <name>
. - Headers are specified with
-H
instead of-h
.-h
is used for help.
- Emit types are now specified with
Not much changed in the language, but a lot has been rewritten since 0.5.2. I also finally updated my computer, so you need glibc 2.35 to run the prebuilds now.
Full Changelog: 0.5.2...0.5.3
v0.5.2
What's Changed
- The package manager has been re-enabled (#67)
In this release, the only new thing was a package manager. While it certainly isn't close to the largest release (that would be 0.5.0, by far), this still is a pretty large addition.
Full Changelog: 0.5.1...0.5.2
v0.5.1
What's Changed
- Libraries have better cross-platform support (#62, #66)
- Errors are reported more cleanly using
anyhow
(#64, #66) - Projects have been improved (#63, #66)
- Projects can be built by name, using
:<name>
as the parameter to replace the project directory - The build system has proper support for incremental builds
- Each file in the project gets its own header
- Projects can be built by name, using
Full Changelog: 0.5.0...0.5.1
v0.5.0
What's Changed
- Methods and associated functions can be added to newtype definitions (#59)
- The compiler walks that AST twice, allowing variables to be defined out of order (#60)
- Name mangling has been improved (#61)
alloca
+ GEP instructions have been replaced withinsertvalue
(6e28ae7, 42fef47)- LLVM is linked dynamically (b6f65bf)
- Everything has been updated to LLVM 15 (9d51932)
- Various bugfixes:
- Weird parser error (b000e44)
Builder::get_insert_block
panicking with global variable definitions (31624a1)let
andmut
weren't converting interpreted to compiled values (c14a4d8)- Loading libraries panicked (7cbb134)
- Empty groups caused errors (75c6560)
- Stack overflows were caused by comparing integers of different sizes (7d29c4f)
While there weren't as many pull requests this release, a lot more was done. The v1.0.0 release is quickly approaching, probably only a few more releases away.
NOTE: LLVM 15 is required as a runtime dependency. You will need to have it installed on your system.
Full Changelog: 0.4.0...0.5.0
v0.4.0
What's Changed
&?
and|?
returnbool
if the second value's type is not convertible frombool
(#55)if/else
returnsnull
if the types are incompatible (#55)<<
,<=
,<<=
,>>
,>=
, and>>=
can all be used properly (#56)&?
and|?
don't break locations (#56)- Tuples have been added (#57)
- Casts have higher precedence than assignment (#58)
Full Changelog: 0.3.2...0.4.0
v0.3.2
What's Changed
- Symbols can now be explicitly exported from a library (#49)
- Imports work transitively (#50)
- A warning is given if an import statement doesn't import anything (#50)
- Intrinsics take expressions, not ASTs (#51)
- Array casts work better (#52)
- Using fat pointers doesn't cause panics (#52)
- Values can be implicitly converted to references (#53)
- IO errors in the driver code are now printed nicely (#54)
Full Changelog: 0.3.1...0.3.2