Menu

Exode

Exode is our new programming languages in development. During development of Cloudium OS we saw the need for another language than only pure ASM. Because we didn't want to lose the fine-grained acces ASM provided us, we decided not to go with an existing language like C or C++, but to make our own. This also gives us the opportunity to create a languages specifically tailored to Cloudium OS, to incorporate new ideas and have a much more modern language at the core of the OS, which still allows the low level control of plain old ASM.

Paradigm

  • Imperative
  • Functional
  • Object oriented
  • Declarative (constraint, logic)

Type system

  • Strong
  • Static
  • Effect system
  • Hindley–Milner type system

Special features

  • Query collections or the file system from inside the language
  • Built-in support for concurrency (even over the network)
  • Special support for event handlers
  • Support for units

Examples

Simplified implementation of PersistentObject:

class PersistenObject : Object {
    on System.shutdown {
        self.serialize.save(id:self.hash)
    }
}

Example of inline ASM:

operator Int + Int {
    mov ax, #1
    mov bx, #2
    add ax, bx
    return ax
}

You can mix high-level and low-level code:

use System.CPU

fn main() {
    ax, bx, cx = 1, 2, 3
    for register: value in  registers {
        println "\(register): \(value)"
    }
}
/*
 * AX: 0x0001
 * BX: 0x0002
 * CX: 0x0003
 * DX: 0xFD31
 * CS: 0x7D23
 * FS: 0x81D3
 * ...
 */
 ~~~~

Queries:

numbers = [2, 3, 10, -1, 0, 5, -3]
for x in numbers where x <= 0 {
print x .. ", "
}
// -1, 0, -3

Not convinced?

// No need for for-in: Exode is an array language
display (Image in User.fotoAlbum[selectedAlbum] where width > 800 px & height > 600 px)
// Equivalent SQL: "select image from userPictures where album = (selectedAlbum) and width > 800 and height > 600"
~~~~


MongoDB Logo MongoDB