A Quote That I like!


"I [suspect] that we are throwing more and more of our resources, including the cream of our youth, into financial activities remote from the production of goods and services, into activities that generate high private rewards disproportionate to their social productivity. I suspect that the immense power of the computer is being harnessed to this 'paper economy', not to do the same transactions more economically but to balloon the quantity and variety of financial exchanges." --James Tobin, July 1984

People who I miss


- Michael Woolsey
- Jack Grant
- Maddy Bowen

Version 2.5 of the blz language released!


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

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%.

Documentation

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.

Tests

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!

A Beautiful Evanescence


What a beautiful evanescence I find myself enveloped by.
Yet I stand here unable to understand its machinations.
For who am I to question the brevity, the awe, the nature of something so inconceivable.
What a fool I am, to think I've gleaned some understanding of the moment I find myself in.
Yet I still try.
What else is there to do?

On the invertibility of a class of odd polynomials


I noticed the other day that a certain kind of nonzero odd polynomial is always invertible.

To prove this we will:
- Define the class precisely
- Show that this class is strictly monotonic

The class of odd functions


In plain English, the class of functions I am talking about is every nonzero polynomial with only odd and constant terms where all the coefficients have the same sign.

That is -

\(f(x) = c + \sum_{i=0}^{N} a_{i} \cdot x^{2i + 1}\)

\(\forall N \in \mathbb{N}\) and \(\forall x, c \in \mathbb{R} \)
\(a_{n}\) is a sequence with terms that all share the same sign


Some examples of functions in this class:
\(f(x) = x^{3}\)
\(f(x) = 7x^{5} + 2x^{3} + 2x\)
\(f(x) = 192x^{103} + \pi x^{51} + x^{3} + 8\)

This class is monotonic


We will prove that \(f\) is monotonic by showing that the derivative \(f {}' \) is either strictly positive or strictly negative
\(f {}' \ = \sum_{i=0}^{N} (2i + 1) \cdot a_{i} \cdot x^{2i} \)

Lets investigate the sign of the terms
\(2i + 1\) must be positive as \(i\) is positive
\(x^{2i}\) must be positive as it is a square of a real
\(a_{i}\) is either always positive or always negative by definition.
This means that every term in our sum shares the same sign, regardless of \(x\).

Of note, \(f {}' = 0 \) iff every term in \(a_{n}\) is 0 or if \( x = 0 \) and \( a_{0} = 0 \).
Therefore \(f {}' \geq 0 \) or \( f {}' \leq 0 \).

Invertibility


Strictly monotonic functions are invertible. This is well known so rather than prove it here, I will cite the proof wiki.

A connection from involutory matrices to the Klein Four-Group


Let \(\sigma\) be a matrix s.t. \(\sigma \cdot \sigma = I\) (Definition of involutory)
The following group is isomorphic to the Klein Four-Group: \(G = \left \{ I, \sigma, -\sigma, -I \right \}\)
Here is the multiplication table:

P5JS animation