Skip to main content

The Argon language

The Argon language is a work-in-progress interpreted multi-paradigm programming language. Its syntax is influenced by many modern languages and aims to be elegant, clean and simple to use.

import "io"

io.print("Hello world!")

Easy to use ๐ŸŒŸ

Argon is inspired by the most used programming languages in the world, which makes it familiar to more experienced programmers and easy to learn if you are a beginner.

import "enum"
import "io"

let NOBLE_GAS = ["Helium", "Neon", "Argon", "Krypton", "Xenon"]

var group_by_name_length = enum.group_by(len)

NOBLE_GAS
|> group_by_name_length
|> io.print

Beauty ๐Ÿ’…

Code written in Argon is simple to understand and its syntax rewards cleanliness and clarity making it very easy to read.

struct NameCounter {
var name
var counter

pub func inc_counter(self) {
self.counter ++
}
}

var obj_counters = [
NameCounter@("Alice", 0)
NameCounter@("Bob", 0)
]

var itm
for itm of obj_counters {
itm.inc_counter()
}

/* But also */

var obj_counters = [
["Alice", 0],
["Bob", 0]
]

obj_counters |> map((itm) => {
itm[1] ++
})

Paradigms ๐Ÿ‘พ

Argon supports different programming paradigms, this allows developers to choose the style that best fits the needs of the project.

import "io"

func task(id) {
spawn () => {
"Hello from task %d" % id |> io.print
}()
}

for var i = 0; i < 100000; i++ {
task(i)
}

Scalable ๐Ÿš€

Thanks to its architecture it is possible to run a huge amount of tasks simultaneously, your programs can scale and stay lightning fast.

Run anywhere

The Argon interpreter is written in C++, does not require any dependencies and supports all major operating systems, it is possible to have a working environment wherever it is possible to compile C++ code.

Concurrent

Lightweight concurrency is a key feature of Argon, the execution of a Argon program is based on lightweight fibers that can be automatically suspended and resumed as needed.

I/O Ready

Don't be afraid of I/O bound tasks, Argon automatically handles this situation by suspending the I/O blocked fiber and resuming execution only when ready, meanwhile the rest of your program will continue to run without interruption.

Contributing

If you find a bug or have an idea, please open an issue on GitHub.