Skip to content

Releases: cobalt-language/cobalt-lang

v0.7.1

11 Oct 19:37
7627f46
Compare
Choose a tag to compare

Features

  • cobalt-cli can be used as a library (#106)
  • Static archives can be generated (#110)

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 and toml (#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

15 Aug 05:24
7f2f946
Compare
Choose a tag to compare

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

09 Jul 21:17
3b3c82d
Compare
Choose a tag to compare

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 and null 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

21 Jun 21:25
e99bdcc
Compare
Choose a tag to compare

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 allocas 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

Full Changelog: 0.5.3...0.5.4

v0.5.3

05 Jun 00:53
c437ca6
Compare
Choose a tag to compare

What's Changed

  • The project is now split into sub-projects in a workspace. (#68)
  • miette is used instead of codespan-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 or C 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 byte 0xHH.
  • 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 have argv[0] set with -t|--this <name>.
    • Headers are specified with -H instead of -h. -h is used for help.

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

15 May 19:30
c702d66
Compare
Choose a tag to compare

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

09 May 12:38
59f78a4
Compare
Choose a tag to compare

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

Full Changelog: 0.5.0...0.5.1

v0.5.0

24 Apr 16:57
b36f3e8
Compare
Choose a tag to compare

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 with insertvalue (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 and mut 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

10 Apr 23:01
6aee99d
Compare
Choose a tag to compare

What's Changed

  • &? and |? return bool if the second value's type is not convertible from bool (#55)
  • if/else returns null 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

04 Apr 16:49
2d01b2b
Compare
Choose a tag to compare

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