My experience with the python development community has been plagued by rejected pull-requests and spurred suggestions, most of which regarded optimizing and making the virtual-machine more performant . That's why I wrote Minima, a powerful, lightweight, and object oriented programming language to substitute python in use-cases that demand more performance. It aim to be easy, and simple to learn but unlike python, Minima does not embrace a policy of wanton disregard to performance simply in the favor of maintainability.

What it does

Minima is an object-oriented, imperative scripting language focused on being practical and pragmatic. Minima aims to be simple, easy to write, yet powerful enough to create readable, performant and concise code for any problem. You can read Minima's documentation here, and view the installation guide here.

Among many things, it's...

  • Small - The compiler and virutal-machine clock slightly under 5000 lines of code.
  • Portable - Minima compiles byte-code and runs it on a virtual-machine. It's the same way Java does it.
  • Powerful - Minima is designed for quick-and-messy object-oriented programming on the fly.
  • Embedable - It's very easy to imbed it into your C/C++ project.
  • Easy To Learn - You could probably read the documentation, and learn the language, in under half-an-hour.

How we built it

Minima was written in C from the ground up in order to fulfill the portability requirement. However, Minima's standard library, including all the data structure's in it, are all implemented in Minima itself. Often times' I had to ask the r/programminglanguages community on Reddit for help, and in most cases feedback. I feel that projects built with the input of the greater community dramatically increases their usability.

Challenges we ran into

Writing a virtual-machine in C was no easy feat. Because of the performance requirements, a special instruction set had to be devised for the bytecode, especially given that Minima's virtual machine had to be able to handle control flow without relying on either the host's languages call-stack. Ultimately, the instruction set came out to be a stack based, high-level, variant of some form of assembly.

Another challenge was implementing certain aspects of object-polymorphism, and object-messaging with sub-procedures. At first, especially with object sub-procedures, there was no apparent solution. After many failed attempts, label-mangling was ultimately used to implement object-sub procedures, and a special lookup system for inherited properties and sub-procedures was devised.

Accomplishments that we're proud of

When I first started this project, I didn't think that I'd be able to pull it off. While Minima doesn't support lambda-calculus and many aspects of functional programming, it's most certainly on par with python in therms of object oriented programming, and in many cases it's more performant.

What we learned

Minima, not only enhanced my understanding of computer-architecture, but also taught me that good software required long-term development. Minima, by far, holds the record for the longest time I had every invested in any one project (3 months).

What's next for Minima

The high-school I attend often participates in Cyber Patriots. I plan to use Minima to write a lot of automation-scripts, especially for performance-demanding tasks like file searching.

Built With

  • c
  • minima
Share this project: