Caution: you are about to enter the
Lava solutions and highlights
Lava . . .
- ... is perfectly "point-and-click". Minimum syntax learning, no syntax errors, no text entry at all except for comments, constants and new identifiers. Context-related errors are reported at the earliest possible moment. Automatic update of all affected references when identifiers are changed, when formal parameters of functions are permuted, inserted or deleted, or when the nested tree structure of
Lava declarations is rearranged.
This uncompromising point-and-click style pertains also to Lava's refactoring support, which doesn't appear as an add-on but is built-in from the beginning.
- ... provides strict separation of "class interfaces", or short: "classes" (with "multiple inheritance" and "shared base classes") and "class implementations", or short: "implementations" (each of which implements exactly one class interface). Only class interfaces can be used to specify the types of variables. In contrast to
Java interfaces, Lava interfaces can be implemented separately and these implementations are inherited then by the implementations of derived classes.
- ... provides a clean distinction between variable state and immutable value objects and enforces a strict initialization discipline for these.
- ... is a component integration language. Component objects appear as special objects having an "external" implementation. Databases are special persistent component objects. Components may interact in various and sophisticated ways: embedded or linked user interfaces, menu sharing, compound documents, ActiveX Controls/Documents, Automation servers and clients, drag-and-drop, clipboard, etc..
- ... supports "Design By Contract™" through "attached assertions".
- ... offers special support for "Object-Oriented Problem Separation" through "Many Irreducible Mini-Methods" (OOPS:MIMM) and recommends this as the preferred programming discipline of the
Lava programmer.
- ... supports design patterns / frameworks by a conception of "packages and classes with virtual type parameters" and "specialization/derivation" thereof. (The
Lava "virtual type" notion is different from the virtual type notion being discussed in the context of the envisaged
Java extension, however.)
- ... renders "type casts" superfluous by providing more comprehensive, pattern-oriented derivation and specialization mechanisms ("virtual types" and "covariant specialization").
- ... clarifies the data flow of programs by being a single-assignment language, much like abandoning "go to" has clarified the control flow.
- ... allows you to distinguish three kinds of references between objects: constituents (= member objects), acquaintances (= pointers to independent objects), and reverse references (= auxiliary, typically "backward" references that facilitate automatic storage management based on reference counts).
- ... undertakes really serious efforts to prevent inadvertent use of uninitialized data by quite a number of radical measures which are constitutive for the whole language design.
- ... is a logic-based language including logical conjunctions, quantifiers, and sets. This enables the natural integration of database expressive means and renders "embedded SQL" superfluous.
- ... treats transactions, multi-threading, synchronization in a purely declarative way without requiring delicate and error-prone executable primitives.
- ... provides a straightforward type-safe callback/event notification concept with direct server-to-client callbacks that doesn't require intermediate "event listeners", function pointers or awkward auxiliary constructs like the anonymous, inner, and adapter classes of Java.
- ... automatically generates a customizable default form representation for any given class on demand. A fundamental requirement of RAD support (RAD = rapid application development) is fulfilled in this way.
- ... has an object-oriented interpreter that operates directly on the internal tree-representation (a kind of "abstract syntax tree") of the Lava program. A compilation into "byte code", a "byte code verifier" and a "Lava virtual machine" are not required.
- ... is intended to be organization-aware (which means support of hierarchical namespaces of organizational units (OUs), support of their to-do lists, their data and class access rights, their data ownership, their right to perform all or some functions of other OUs. ("For further study".)
- ... is intended to be security-aware by having an inherent conception of preventive and defensive security (= support of class access rights and encryption/digital signatures, respectively; "For further study").
See also:
Advantages of structure editing.
Improved comprehensibility of
Lava programs.
Generally the Lava design is based on our firm belief that what Ch. Morgenstern says about the difference between the aesthetic value of a chair and its pragmatic value doesn't apply to purely mental constructs, like programming languages:
The pragmatic value and user acceptance of a programming language are decisively determined by its beauty, in particular by properties like
- simplicity, irreducibility, orthogonality, non-redundant conceptual structure,
- clean separation of concerns,
- support of abstraction and information-hiding,
- the capability to split off common features of similar solutions in reusable building blocks: inheritance, polymorphism, parameterized design patterns,
- non-cryptic textual expressive means, close to natural language,
- intuitively appealing graphical and iconic expressive means that one can easily learn and keep in mind.
The design of a completely new programming language requires a great lot of decisions that must fit to each other, and, of course, our thoughts about
Lava used to go round in circles many times before we had reached a more stable design, and the decisions taken remain open to further discussion. So don't hesitate to contact us!