Blinking of an Arduino LED, in Julia

The Julia programming language is a horrible fit for a no-frills microcontroller like the ATMega328p found in the classic Arduino, but it didn’t stop [Sukera] to try and succeed.

All the features that make Julia a cool programming language for your big computer makes it a terrible choice for the Arduino. It is designed for interactivity, is dynamically typed, and relies heavily on its garbage collector; each of these features alone would tax the Mega to breaking point. But in its favor it is a compiled language based on LLVM, and LLVM has an AVR backend for C. Should just be a simple matter of removing some of the overhead, recompiling LLVM to add an AVR target for Julia , and then fix all the other details, right?

Well, it turns out it almost was. Leaning heavily on the flexibility of LLVM, [Sukera] manages to disable all unnecessary language features, and after a few small hurdles like the usual issues with volatile and atomic variables, manages to slowly blink an LED. Huzah. We like [Sukera’s] ironic “Now that’s what I call two days well spent!” once that’s all done, but seriously, this is the first time we’ve seen even super rudimentary Julia code running on an 8-bit microcontroller, so there’s definitely some kudos to be had here.

By the time Julia is stuck in the AVR, a lot of what makes it appealing on big computers is missing on the mic, so we don’t really see people picking it over the straight C, which has a much more ecosystem developed. But still, it’s great to see what it takes to get a language designed around a runtime and garbage collector working on our favorite mini mic.

Thanks [Joel] for the tip!

Comments are closed.