blz v2.5 changelog

After 4 months of development, version 2.5 of the blz open source programming language is out now!

Source code is available on GitHub.
Check out the wiki to for installation instructions.

Features in this release

  • Constructors
  • Core Standard Library
    • Array Methods
    • String Methods
  • bang! operator
  • Better Imports
  • Performance Gains
  • Documentation
  • Tests


Constructors are one of the two big features in the 2.5 release.
Constructors are how Object Oriented Programming is done in blz, there is no concept of classes.
Instead the constructor serves two purposes:
  1. It is the block run on creation of a new object
  2. It contains all methods that belong to that object

Here's an example

One of the core goals of blz is to enable developer velocity.
These constructors achieve that by eliminating boilerplate and by capturing parameters in an intuitive fashion.

Core Standard Library

The other big feature in blz 2.5 is the expansion of the core standard library.
A big part of this is enabling primitive values (strings, arrays, numbers, etc.) to have methods.
That means that statements like `[2, 5, 3, 1]\text{.sort}()` are now possible.

Array Methods
Many, many array methods were introduced in this update.
Some examples include: copy, sort, filter, each, map, unique, slice, fold_left, contains?
There are many more, and you can read the full list on the GitHub wiki.

String Methods
Many, many string methods were also introduced in this update.
Some examples include: length, to_array, trim, slice
There are more, and you can read the full list on the GitHub wiki.

Bang! Operator

The bang! operator was introduced to give the programmers more control over the language's behavior.
Most languages either pass function arguments by value or by reference.
It is usually determined by the language in advance, and you've got to work with whatever the language does.
blz passes function arguments by value, unless you use the bang! operator. Use of ! allows for pass by reference.

For example:

A full description of the bang! operator is available on the GitHub wiki.

Better Imports

blz 2.5 introduces the 'require' import statement.
It is used to import source files using a relative path.

blz 2.5 also fixes an issue where a source file could be loaded more than once.

Performance Gains

blz 2.5 boasts some modest performance improvements.
Startup times have decreased ~10%.
Runtime speed has improved. My benchmark of calculating 2000 primes has speed up ~60%.


The GitHub wiki for the project now has lots of good references for the language.
We are looking to expand this over time, but it's a good start for this release.


blz has two kinds of tests. JUnit tests and blz tests.
JUnit tests have increased from ~140 to ~180. This is still too low, and I will be looking to add more at every opportunity.
blz tests have also increased, with most core library functions having several tests.

Final Thoughts

This is the most exciting release of blz yet!
There is still lots of work to be done, but blz is evolving at a rapid pace, and is moving in a great direction.
The language has also become a lot more focused on the goals of developer velocity and intuitive features.

Looking to the future, there are many things ahead for the language.
One direction being explored is taking advantage of Truffle and the GraalVM to get a JIT compiler for blz.
Expect lots of libraries related to system calls as well.
There are currently not many great ways to talk to input / output devices in the language. I'm looking to change that soon.

Thanks for reading, and I'll see you for blz 2.6!