LITTLE Language Preliminary Quickspec

Preface for release 0.7.9

Just like the language implementation, this document is still 'in development' and subject of progression and change.

The intention of this document is to give the reader at least some entry point to extract ideas and core features of the LITTLE language. Surely, this specification can't convincingly mime a tutorial

Introduction

Language Features

LITTLE's design goal is to be the incarnation of a programming language relying on exactly one concept and paradigm, providing a minimal, but sufficient set of syntactical structures, thus avoiding ambiguities omnipresent in other languages, but nevertheless offering anything needed to write sophisticated applications.

Here are the supported features at a glance:

Syntax

The LITTLE language borrows it's syntax from LISP and Scheme. It uses a strict, parenthesed prefix notation. Unlike LISP and Scheme, there is no equivalency between data and code - LITTLE code can't just be quoted to delay evaluation. Runtime evaluation of string and/or lists would be matter of a concrete runtime system's implementation. LITTLE also makes difference between expressions and statements; on the other hand, statements (syntactical structures, which can't be part of expressions) are used for declarative purposes only. Everything within an executable block actually is an expression, and thus has a return value.

The language itself includes syntax to manipulate objects: create them (classes), access properties (attribute load/store), send messages, process exception conditions. Only a few more stuff is part of the language specification itself: a bit of control flow (one loop, conditional execution), and grouping of expressions plus declaration of local variables.

Everything else has to be implemented by an incarnation of a runtime class library, which is meant to be exchangible - the language should be as customizable as possible, as it's main purpose is to serve as an extension language rather than as a standalone application language.

Conventions

The following conventions will be used in the descriptions below:

Symbols

Symbols represent compiler terminals, class, method, constant and variable identifiers, modifiers, and might themselves be values of variables.

Definition:

   [A-Za-z_][A-Za-z0-9_]*
   {.[A-Za-z_][A-Za-z0-9_]*}*
   

Class names

Class names are just symbols. Full classnames must consist of a prefix resembling the package the class belongs to, a dot, and the package-unique short class name itself (which, therefore, must not contain dots). Class names refer to global memory containing class objects - the only kind of globals supported by the LITTLE system.

Declarative Statements

In LITTLE, classes, attributes and methods are declared explicitly. Furthermore, package membership ,classname aliases and macros are formed via declarative statements.