Welcome to LULZCODE

LULZCODE is designed to control nearly all aspects of the AND!XOR Indie badge for DEF CON 26. To accomplish this we needed to extend LOLCODE to meet our needs.

How is LULZCODE different?

Nearly all LOLCODE 1.2 features have been carried forward. We essentially doubled the language size to meet our needs. One important feature that was removed was Unicode as it required too much flash storage. We also make use of BUKKITs which are not fully supported in LOLCODE.

What is LULZCODE for?

After reading over the LOLCODE spec several times and fighting back the tears we realized it is likely turing-complete. It had everything we needed. Except it didn't work well on a microcontroller. In fact, it only had basic user input and output. For our badges we need a language that lets us control the low-level peripherals. So LULZCODE was born. An extension of LOLCODE to support microcontrollers.

Limitations

Not everything was exposed in LULZCODE. It turns out modifying a language is a LOT of work. Rather we took a more pragmatic approach and started writing our badge code in LOLCODE then extending the language wherever we needed it.

LULZCODE memory usage is very high. In fact an average LULZCODE script can use up to 100KB of heap memory. That's 5 times what our first badge had for memory. For this reason we are running the badge on an ESP32-WROVER which gives us 4MB of external SPI RAM.

LULZCODE is slow. Very slow. It's interpretting strings so load time takes awhile. Once the parse tree is in memory (see above) its performance is okay but not great.

LOLCODE 1.2 Spec

For more on LOLCODE see: https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md