Voodoo Compiler 1.1.1

An implementation of the Voodoo programming language

  Add it to your Download Basket!

 Add it to your Watch List!


Rate it!

What's new in Voodoo Compiler 1.0.2:

  • Compatibility with Ruby 1.9, in addition to Ruby 1.8; make test now reports the number of passed and failed tests.
  • The many-vars test has been split into many-args, many-args-tail, and many-locals.
Read full changelog
send us
an update
LGPL v2 (GNU Lesser General Public Lic... 
Robbert Haarman
ROOT \ Programming \ Compilers
1 Voodoo Compiler Screenshot:
Voodoo Compiler
Voodoo Compiler is an implementation of the Voodoo programming language. The Voodoo programming language is a low-level programming language, abstracting over the platform's instruction set and calling conventions, but otherwise leaving the programmer free to do anything at all.

Voodoo Compiler is written in Ruby and generates code for i386-compatible, AMD64, and MIPS CPUs. Support for additional target CPUs is planned for the future.


There are two main ways to use the Voodoo compiler: by running the voodooc program, or by using the Ruby API.

The voodooc program compiles a Voodoo source files. Its usage is described in the voodooc.1 manpage, included in the distribution. The following is an example of how voodooc can be used to create an executable hello from a source file hello.voo:

$ voodooc hello.voo
$ cc hello.o -o hello
$ ./hello
Hello, world!

An implementation of hello.voo can be found in the directory test of the distribution.

The second way to use the Voodoo compiler is by using it from a Ruby program. This can be used, for example, to generate code for the target platform without having to create a .voo file. The following is an example which creates an object file called fact.o, containing a definition of a function fact which computes factorials:

require 'voodoo'

generator = Voodoo::CodeGenerator.get_generator :architecture => :i386,
 :format => :elf

generator.export :fact
generator.add_function_label :fact
generator.add_function [:n],
 [:ifle, [:n, 1],
 # then
 [[:return, 1]],
 # else
 [[:let, :x, :sub, :n, 1],
 [:set, :x, :call, :fact, :x],
 [:return, :mul, :n, :x]]]

File.open('fact.o', 'w') { |outfile| generator.write outfile }

The Voodoo compiler API that is a available to Ruby programs is described in the API documentation.

Last updated on July 20th, 2013

#programming language #low-level programming #Voodoo #programming #compiler #Ruby

Add your review!