o42a is a high-level general purpose programming language. It is compiled, statically-typed, prototype-based, logic-driven, and primarily declarative, while the imperative programming style is also supported. A program written in o42a is closer to natural English text than one written in any C-like programming language. The language is designed with programming productivity and code maintainability as main priorities. This achieved by powerful, yet restrained, semantics, and expressive and natural syntax.
|Tags||programming language compiler prototype-based|
|Licenses||GPLv3+ MPL 2.0|
|Operating Systems||Linux (64 Bit)|
|Implementation||LLVM Java 6 C|
As of release 0.2.1, the last conceptual feature (the macros) was added to the language. From now on, the development will be focused on the core libraries implementation. These are not all possible libraries, but only those required for the production, self-hosted (i.e. written in o42a) compiler development. This includes the following: - Collections. A handy collections require generics at least. To fully support adapters (e.g. for hash code evaluation), some other metaprogramming will be required. That's why the macros were introduced in 0.2.1. The macro support will evolve primarily in favor of the collections library. - Input/Output An input/output library will require a closer integration with the system libraries. At least, it will require an i/o functions calls. This will probably require the following: - C Calls The o42a ABI is very different from the C one. It would be extremely handy to develop a tool for ease the C function calls in order to communicate with a system libraries. This can be implemented as an o42a library containing a set of directives describing the C functions. Such a descriptions will be a part of an object definitions. An object access would mean a function call. These directives will take care of normalization and code generation. It would be much easier to use them then implementing a built-in objects, as it currently the case. A core objects (basic types, operations on them, etc.) also require a lot of enhancements. The current compiler implementation is far from stability. A lot of code should be written to enhance it. But writing of basic tests is extremely boring and time consuming. So, I hope the libraries implementation will be a good test by itself (given these libraries will be tested). Another important task would be to write a code examples. Rosetta Code examples are just perfect. The generated code performance is not a primary target of 0.2.x development. It is much already done in this area. But, if performance will suffer significantly, then more normalization techniques will be implemented. The primary concerns are about variables, locals, and arrays. The next major step is a release 0.3.0, which will be a starting point of a production compiler development and will contain a small, but important, subset of the o42a platform, thus making it actually usable.
Release Notes: The multiple inheritance support has been dropped. The object value definition algorithm has been significantly simplified. The object statefulness functionality has been replaced by eager value evaluation. Changes have been made to the syntax of sentences, local declarations, and value assignment to avoid any possible conflicts. New features include static fields, aliases, yield statement, short adapter declaration syntax, and short field override syntax. Some rarely used and confusing features were removed.
Release Notes: Stateful objects can be constructed now with a keep value (\\) operator. The value of a stateful object is evaluated at most once, in contrast to a standard stateless object, the value of which is evaluated on each request. The binding statement (<-) is now used to assign new values to variables. In addition, a value assignment statement (=) can be used to perform the assignments in a more traditional imperative manner. The combined assignment statements (+=, -=, *=, /=) have been added.
Release Notes: The type arguments syntax have been fully reworked. The link dereferencing behavior has been changed significantly. A new initializers syntax has been implemented.
Release Notes: The imperative and declarative codes are almost fully unified. The difference between them is that the declarative blocks may contain member declarations, while the imperative blocks can loop. Locals can be declared anywhere now. A new syntax allows declaring the local along with its scope. Phrases may contain intervals now. Some scope references, unary operators syntax, and line continuation rules have been changed.
Release Notes: Type parameters can be declared for any object now. Two new operators support have been added, a compare operator (<=>) suitable to perform a generic comparison and a suffix one (~) capable of representing things such as quantities. Hexadecimal, binary, and floating point literals syntax support has been added. Other syntax improvements have been made. A lot of bugs were fixed. The language runtime license has been changed to the MPL-2.0.