Lemick project site
Short Intro

Though Lemick syntax is based on BASIC it is not a reimplementation of some flavor of BASIC neither it tends to conform to some standards or tries to be compatible with any existing BASIC langs. Lemick supports object-oriented programming yet it is not a purely object-oriented language. Most of the traditional BASIC constructs, such as If, Do, Select and etc., are present in Lemick. However everything related to input/output, user interface, networking and similar is defined in the packages and is not part of the language itself. It was one of the major design ideas to keep the core language compact and to provide powerful constructs for the extension of the language through packages and native code.

Just to give you an idea what a Lemick program may look like here is famous Hello world program:
[io.console].Println "Hello, world!"

As it should be in any good language it is done using a single-line source.

Lemick is a typed language. Compiler enforces particular rules for convertations between types, though many commonly used convertations will occur automatically.

Lemick is a compiled language. Before starting the program you have first to pass it the compiler which will translate the program into a virtual machine assembler form. Lemick uses its own virtual machine (VM) and has the run-time which translates VM assembler into a native platform code. Lemick run-time tries to be highly efficient, currently it is ten to hundred times faster then popular interpreters, for example, Perl or Python. And it is just slightly slower then the recent Java JIT-based run-times.

Procedures and methods in Lemick can be overloaded, types of the passed arguments are used to find the right variant of the called routine. Besides function names, in Lemick you can overload built-in operators and type casting rules, for example to use "+" sign for operations on matrices.

Lemick has the native support for the concurrent programming using co-routines. Any subroutine (in Lemick and other BASIC languages subroutine is a function without a return value) can be used start a new thread of execution.

To support object-oriented programming Lemick provides classes, interfaces, single inheritance, virtual methods and safe dynamic casting.

Lemick provides structured exception handling support. Exceptions are full objects and exception handlers can be attached to blocks of code (Try-Catch-Finally) or to objects, classes and exceptions.

Packages are the key feature of Lemick. Though they are not yet so powerful as Ada's, packages are the main structuring and abstraction instrument. Lemick packages are components, - they bring description and implementation of the classes, procedures and etc. in a single file. Package may export classes, types, routines and methods, global variables and named constants.




Copyright 2004 Alex Iliasov (alex at iliasov dot org)
All the information from this site can be used without any restrictions provided the reference to this site is included.
Main page