riolet / rix

Rix language combines the power of C language and the convenience of a high level language
GNU General Public License v3.0
729 stars 27 forks source link

Build Status Rix Language logoRix Language

Rix is an expressive and efficient language for the C ecosystem. Rix uses C libraries natively and generates easy to understand C code.

There are five core principles behind Rix:

  1. Ease of programming, inspired by Python
  2. Fast, like C code
  3. Type safety, like Scala
  4. Ability to go lower level and write C code
  5. No reserved keywords, everything is redefinable

We ran the prime counting benchmark for Rix, C and Python. Here's what we got:

Measure Rix C Python
Runtime (ms) 457 424 7836
Characters of code 413 542 474

The best way to introduce yourself to this language is to take a look at some of the examples and try running them. Rix is still in early development; many features have not yet been fully implemented or described. A list of major development tasks remaining can be found in the wiki.

Features

Point point = new Point (x,y)

becomes a short Rix statement:

#point = Point (x, y)

New identifiers have are marked as new with "#", and Rix will infer their type for you. Their types cannot be changed once set. In the above example, point gets category Point.

hello = "Hello"
helloWorld.add(hello)

parse as:

Subject Verb Object
hello = "Hello"
myset add hello

Subjects and objects are collectively known as nouns, and are analogous to object (instances of a class) in object-oriented programming.

Methods and function are called verbs in ritchie. For example:

factorial -> int (int n)
    #result = 1
    #i.for (1,n+1)
        result = result * i
    -> result

print (factorial (5))

You can also write succinct one liner verbs like the one below which gives the nth Fibonacci number:

fib -> int(int n) = (n <= 1).tf (n, fib(n-1) + fib(n-2))

print (fib(5))

There's no assignment operator in Rix, but = is defined as an assignment verb for Identifier.

if, while and for in Rix are all such verbs. They are not keywords, as you can redefine them, although this is probably not a good idea.

Get started

  1. Build the rix compiler make clean;make
  2. Write your rix program in your favourite text editor (let's call it program.rit)
  3. Set RIX_HOME export RIX_HOME=/path/to/rix
  4. Run ${RIX_HOME}/rix.sh program.rit and rix will build, execute and run the program

Team

Rix Language is being developed by a group of efficiency obsessed programmers for demanding programmers who want both the conciseness of Python and the efficiency of C.

Concept: Rohana Rezel (Riolet Corporation)

Design and implementation: Joe Pelz, Phillip Hood and Dimitry Rakhlei (final year students at BCIT, Burnaby, BC, Canada)