A Quick Note
By no means am I a professional developer, so this post will be rather short. I won't be going into depth on the specification or anything that technical.
Instead, I will simply be talking about how I (a relatively basic hobbyist programmer) have been playing with Hare and what intrigues me about the language.
The Hare programming language is a straightforward language that should look familiar if you've ever programmed with C, Rust, or other languages that aim to build software at the system-level.
The Hare homepage states the following:
Hare is a systems programming language designed to be simple, stable, and robust. Hare uses a static type system, manual memory management, and minimal runtime. It is well-suited to writing operating systems, system tools, compilers, networking software, and other low-level, high performance tasks.
I have found this all to be true while playing with it for the first time today. In the next few sections, I'm going to walk through my installation and first program.
I'm currently running Alpine Linux on my Thinkpad, so the installation
was quite easy as there is a package for Hare in the
However, I was able to install Hare from scratch on Fedora Linux a short while ago, which was also very easy to do. If you need further instructions and Hare doesn't have a package on your system, take a look at the Hare Installation page.
Creating a Test Project
In order to play with the language, I created hare-test and will be putting any of my Hare-related adventures in here.
Update: I also created a simple Hare program for creating a file from user input: files.ha
Luckily, Hare doesn't require any complex set-up tools or build
environment. Once you have Hare installed, you simply need to create a
file ending with
.ha and you can run a Hare program.
I created a file called
rgb.ha in order to test out the
random number generation and passing parameters between functions.
Within this file, I was able to easily import a few of the standard
With these modules, I created two functions:
main: This function calls the
generate_rgbfunction and then prints out the returned values.
generate_rgb: This function uses the current Unix epoch time to generate a pseudo-random value and uses this value to create three more random values between 0 and 255. These three numbers represent a color in RGB format.
Note: Some syntax coloring may look odd, as Zola currently doesn't have a syntax highlighting theme for Hare. Instead, I'm using the C theme, which may not be exactly accurate when coloring the code below.
export fn void = ;
fn = u64 ;
Running a Program
Once you have a Hare file written and ready to run, you simply need to run it:
You can also compile the program into an executable:
Documentation Improvements Would Help
While I was able to piece everything together eventually, the biggest downfall right now in Hare's documentation. For such a new project, the documentation is in a great spot. However, bare specifications don't help as much as a brief examples section would.
For example, it took me a while to figure out what the
u64nfunction was looking for. I could tell that it took two parameters and the second was my max value (255), but couldn't figure out what the first value should be. Eventually, I inspected the
random.hafile in the Hare source code and found the test suite that helped me discover that it needed an
init()value in the form of
More Basic Modules
This is another point that comes from Hare being new and awaiting more contributions, but there are some basic functions that I would personally enjoy seeing in Hare, such as one to convert decimal (base 10) values to hexadecimal (base 16).
If I'm feeling comfortable with my math, I may work on the list of functions I want and see if any can make it into the Hare source code.
Overall, I actually really enjoy Hare. It's not as tedious to get a project up and running as Rust, but it's also simpler and more user-friendly than learning C. I am going to continue playing with it and see if I can make anything of particular value.