DEV Community

alegrarsio gifta
alegrarsio gifta

Posted on

I Tried to Build a Lightweight Scripting Language for IoT. It Failed — But My Friends and student Loved It Anyway.

I started this project as a side project and named it Jackal because the jackal is my favorite animal—small, clever, and adaptable.

Back in 2023, I was deeply interested in programming MCUs and IoT (Internet of Things). At that time, I began wondering: what if I could build my own programming language? A language with a lightweight feel and modern syntax, designed specifically for MCU and IoT environments.

At first, things didn’t go well. The early versions were rough, and many ideas didn’t work as expected. But I shared Jackal with my friends, and surprisingly, they loved it. They started writing simple scripts—basic mathematical operations, small experiments—and for some of them, it was their very first experience writing code.

Seeing them get excited, learn, and enjoy programming through Jackal became a huge motivation for me. That moment is what pushed me to keep developing the language and continue improving it.

Jackal Introduction Page https://jackal-new-documentation.vercel.app/

Example Code ( Default Style )
This is an example of Jackal code that defines a function to add two numbers.

import std.Math 

func add(a,b) {
   return a + b
}

println(add(Math.sqrt(2 * 2),2))
Enter fullscreen mode Exit fullscreen mode

Example Code ( Jackal Pipe Operator )
In this update, I introduce a new way of writing code in Jackal using the pipe operator (|>), which makes data flow more explicit and readable.

import std.Math 

func add(a,b) = a + b

2 * 2 |> Math.sqrt() |> add(2) |> println()

Enter fullscreen mode Exit fullscreen mode

Example Code ( Jackal Function )
If you are working with just one expression on the function you can use the = operator

func add(a,b) = a + b
Enter fullscreen mode Exit fullscreen mode
func range() = for i in 1 .. 10 i |> println()
Enter fullscreen mode Exit fullscreen mode
func add(a,b) {
   return a + b
}
Enter fullscreen mode Exit fullscreen mode

Example Code ( Jackal Entry Point )
In Jackal, a program can be executed with or without an explicit main function.

Without main

For simple scripts, code can be written directly at the top level:

println("hello world")
Enter fullscreen mode Exit fullscreen mode

With @main

For structured programs, Jackal allows defining an explicit entry point using the @main annotation

@main 
func main() {
     println("hello world")
}
Enter fullscreen mode Exit fullscreen mode

Example Code ( Reactive Syntax )
Jackal also supports reactive-style programming using the every loop.
This construct executes a block repeatedly at a fixed interval (in milliseconds) until a specified condition is met.


let count = 0

every(1000){
    // block to execute
    count ++ 
    println(count)
} until (count >= 5) {
    println("stop")
}

Enter fullscreen mode Exit fullscreen mode

JkNotes(Jackal Ecosystem)


https://github.com/alegarsio/Jnotes

JkNotes is the cloud based jackal programming environment that use for data analysis and machine learning, i also use this project as my final project in my university .

Top comments (0)