This article will explore the progress that we've achieved so far in MufiZ-Lang, the purpose of this project, and some plans for the future.
What is MufiZ-Lang?
MufiZ is now the official implementation of Mufi-Lang, a project I started almost two years ago, and this implementation now offers a language that is implemented between Zig and C. This allows us to keep much of our C implementation, with the option to improve the project incrementally; some of the components have already been Ziggified.
Why Zig?
Easy Cross compiling (Zig has zero dependency toolchain)
Zig build contains caching even for the C files
Easy integration with C
This toy programming language is dynamic, object-oriented, and general-purpose, which I hope can be a great alternative to Matlab and R (in some cases).
Current Progress
Before creating a blog page for this, I posted all the news to LinkedIn, so let's look at all the progress we have gone through so far.
Each release also contains a nice codename, because why not have fun with releases.
v0.2.0 - Zula Release
This release wasn't too big but more as a proof of concept following changes from the original Baloo release that was forked from. This release included the following:
Fully built under the Zig Build system
A rewritten scanner in Zig under the library
libmufiz_scanner
Rewritten
repl/runFile
operations under ZigA small standard library to convert between integers to double and vice versa to show that the Native Functions loading works.
v0.3.0 - Iris Release
This release brought significant changes compared to Zula, and it was a culmination of 39 commits, and some of the big changes were:
Native complex number type
Use of a global allocator (uses
GeneralPurposeAllocator
inReleaseSafe
modeMore mature CLI using
clap
This release also packages for more architectures:
aarch64 Linux (GNU/MUSL)
x86_64 Linux (GNU/MUSL)
MacOS (aarch64/x86_64)
Windows (aarch64/x86_64)
v0.4.0 - Voxl Release
This release brought the front end of the language to use Zig purely (removing the dependency of pre.c/h
) and the following other changes:
Reimplementing the Hash table implementation in Zig as part of
libmufiz_table
Expanded the standard library
Supporting over 25 different toolchains
Providing
deb/rpm
packages for Linux users
v0.5.0 - Luna Release
This release was smaller than Voxl but brought new changes in the C portion:
Collection types added to Objects
Dynamic Arrays
Linked Lists
Hash Tables
Added assignment operators:
+=
-=
*=
/=
Increment operators
++
and--
Modulus operator
%
for integers
Future of the Language
Where do we see ourselves going in the future?
First, I like adding newer types and functionality to our language. Currently, in the next release, I am working on stabilizing Matrix type, looking at the possibility of Vector types that could use SIMD instructions (this isn't a promise), and expanding the language to have similar functionality like R and Matlab in terms of usefulness with mathematics since that's my field.
This language is a toy because I want to be able to do anything I want for this. There is no particular purpose per se, but it could be the home of various experimentations with compiler hacking, and this is an amazing breeding ground for trying various strategies.