Welcome in the Lem world

What is Lem

It is nothing more than a hobby. I do it simply for the fun, which sometime leads me to implement strange things

Lem is an object oriented and modular extension programming language (Lem stands for "Language d'Extension Modulaire" in french). It has been designed to support

  • Scripting : It aims at providing functionalities similar to Perl .
  • Application extension : like tcl or guile, Lem can be embedded within an application. The hosting application can invoke functions to execute piece of Lem code. Alternatively, the application can register builtin functions written in C or C++ which can be invoked from Lem applications.
  • The creation of domain specific language (lemsh is such an example)


Lem features :

  • It has a syntax inspired from C and lisp.
  • It provides operator overloading, in fact operator are syntax sugar for the methods.
  • It provides object-orientation thorugh class inheritance.
  • It is at the moment strongly typed. In some sense the type system is closer from Java than Lisp .
  • It allows to create domain specific languages throught the use of the following features :
    • One can include multiple lexers (The portion of code which translates the program input in a set of lexems (or token). )
    • One can extend the parser to provide adapted syntax for specialized language.
  • It supports modularity through module/import directives.
  • Lem provides garbage collection.
  • Lem program are compiled in native code or in a bytecode. In particular, lemsh is the only shell providing compiled script.
  • Lem is fast.


  • 26/1/2003 : 0.6.3 released
    This version :
    • Fixes unary operator handling
    • Implements merge of history
    • includes many fixes
  • 26/11/2003 : 0.6.2 released
    Initial public version

How to help

They are many way :

  • Just try Lemsh and give me some feedback.
  • Provide some ideas (use the mailing list).
  • Extending it (for instance pick an item in the To do list
  • ...


I use Lemsh in my day to day life without too much trouble. However it has not all the bells and whistles provided by shells like Bash or Zsh (especially in term of completion and line edition).

Of course, ultimatly, I 'd like to provide something of a similar level. Moreover, it is in development so it is not as reliable as a Bash, Zsh ..


A few years ago, I had to write a test suite to test a distributed system. This task, consisted of writing code mixing Shell, Perl script and C program.

I had to learn many languages. This langage sharing common structure (most of langage have a "while" loop.) but having different syntaxes. Finally, I would have been very happy a language which could replace C, Bash and Perl ; so, I thought "let's try" and Lem was born...