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
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
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.