Home

Suppose you want to write a new program, something like a text editor.  What language would you write it in?
  • It has to be as fast as possible, so interpreted languages are out.
  • You don't want to micro manage memory, so C is out.
  • You don't want to require programmers to have a degree, so C++ is out.
  • You want fast startup and not depend on a big runtime, so Java is out.
  • It has to run on most systems, anything with a C compiler, so D is out.
  • You want to have fun making something new.
No existing language really meets these demands, so let's create a new one that does.

Zimbu is an experimental programming language.  It is a very practical, no-nonsense kind of language.  It mixes the good things of many existing languages and avoids their deficiencies.  And then throws in a few brand new ideas.

Goals

More on the Goals page.
  • easy to read back - code is read N times more often than it is written
  • avoid common mistakes - make it difficult to write bad code (but you can write hacks if you really want to)
  • keep it short and clear, don't state the same thing twice - no header files, don't repeat type specs
  • the effect of a statement should be predictable and not depend on something in another file
  • efficient execution: no startup delay, reasonable memory use - no Just In Time compiler effects
  • support a wide range of applications - Zimbu can be used to write an OS kernel, a short script and a big GUI application
  • portable - be able to compile and run on almost any system
  • many standard data types, modules and classes - most things you need are already there

Choices

Main choices made so far (more on the design page):
  • convert the program to C and use the C compiler to produce machine code (could be something else later)
  • mostly use static type checking, also allow runtime type checking
  • object oriented, all data is handled like an object, but there also are individual functions
  • code files can contain one module and several classes, organize packages in directories; an import defines one symbol
  • the standard modules and classes are available without imports, avoids boring work
  • many modules are part of the language, they work the same way everywhere
  • all keywords are in capitals, you can use all other names without worrying about the next version breaking your program

Status

  • The compiler can compile itself and run a few tests.  The examples below run properly.
  • A snapshot of the source code is available.  Only parts of the language have been implemented and there are bugs and hacks.
  • First steps are being made on ZWT, the UI in a browser.
  • This website is incomplete, much more to follow.
More information on the main work items page.





Want to try out Zimbu?

Download a snapshot or clone the Mercurial repository from
code.google.com/p/zimbu 

E.g.: hg clone https://zimbu.googlecode.com/hg/ zimbu

Want to discuss Zimbu?

The mailist is here: http://groups.google.com/group/zimbu-discuss

Examples

Hello World program: hello.zu:

MAIN()
  IO.write("Hello, World!\n")
}

Notes:
  • The entry point to the program is the MAIN() function.
  • Keywords are in capitals, this avoids the problem that you need to know all keywords when picking a name.  And it allows for adding keywords later without breaking an existing Zimbu program.
  • The IO module contains I/O stuff.  IO.write() writes to stdout.  IO.stdout.write() would do the same.  In Zimbu things that you use often are kept short.  The long form is available for consistency.
  • The IO module is part of the language, no need to import it, we know where it is.
  • "\n" is a newline character. String escape characters are used like in C and Java.  There also is IO.writeLine() which appends the newline character.
  • There is no semicolon to end a statement.
  • The } character is used to end a block.  There is no {, we know where the block starts.  This avoids useless discussions about where to put the {.

More examples: