Overview
Atom is a high-level general purpose programming language with a goal to be performant, small and correct. Some concepts should feel similar as a lot of concepts are taken from other languages.
Hello World
Create a new file called hello.atom
and use the following code to get started:
import std;
println("hello world");
We're importing the core interface of the standard library while using the exported println
function to write output to the screen. Each statement has to end with a semicolon (;
). Run the code by using the atom
binary:
atom run hello.atom
This should output "hello world"
to the screen.
Syntax
Primitives
100000 // 64-bit integer
.45 // 64-bit float
:true
:false
Atoms
An atom is a globally unique name that can be used as a primitive value. The compiler uses atoms extensively, and they also power booleans. Atoms are distinguished by starting with a colon (:
).
Strings
A string is an array of bytes. It's the only typed array in atom and has to be UTF-8 encoded.
Example:
"hello world"
"first\nsecond"
Array
An array is a dynamically sized data structure that references memory allocated on the heap. Arrays support efficient slicing operations, where new slices share references to the same underlying data.
Example:
[1, 2, 3, 4]
[1, 2, 3][1:] // outputs: [2, 3]
Functions
You can define a function using the fn
keyword and specifying the argument names. Functions automatically return the value of their last expression. While the return
statement is supported, it's unnecessary when returning the final expression.
Example:
fn example(one, two) {
10
}
Variables
The let
statement declares variables, and you can re-declare variables using the same name. Each variable must be used at least once. While you can assign a value to a variable after declaration, it must be initialized before use.
Example:
let name = "hello";
let foo;
foo = 10;
Loops
There are three different styles of loops while all of them use the for
keyword:
for let i = 0; i < 10; i += 1 {
// do something
}
for i in range(0, 10) {
// do something
}
for :true {
// loops infinitely
}
Last updated