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. New: live demoSince Zimbu builds and runs fast, an interactive demo has been made. This allows typing Zimbu code in your browser and the output (or compiler errors) show up immediately. This is written completely in Zimbu: - a small HTTP server, running a servlet that builds the code and executes the binary.
- a UI defined in ZWT, this is translated into Javascript to run in your browser
- a protocol buffer to define the messages exchanged between UI and server
This is included with the source code, in the "livedemo" directory. GoalsMore 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 or "stop the world" garbage collection.
- 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
ChoicesMain 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 simple types
- an import defines one symbol, this avoids name conflicts in large projects
- 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 on this site 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 has useful info but 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 For instructions see the Getting Started page.
Want to discuss Zimbu?The mailist is here: http://groups.google.com/group/zimbu-discussExamplesHello World program: hello.zu: FUNC int MAIN()
IO.write("Hello, World!\n") RETURN 0
}
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 any 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: |
|