Domain-specific languages
DSLs as extensions of general-purpose languages
Ateji believes that developers using domain-specific language deserve the same language quality, completeness and tool support than those using mainstream general-purpose languages. Thanks to an original language composition technology, Ateji is able to design DSLs that are not small languages allowing to express only domain specific concepts, but rather large languages built on top of existing general-purpose languages. By design, the application programming language and the domain specific language share the same data representations, the same type systems, and the same programming tools. The language barrier disappears.
The case of modeling systems
The modeling community itself is acknowledging the problem. In a Cosytec white paper, the analysis of a large scheduling application has found that only 9% of the code is related to optimization. The relative sizes of the other parts are given in the following table:
| Part of application | % of overall size |
|---|---|
| Database / integration | 46% |
| Graphics | 19% |
| Graphics libraries | 14% |
| Problem solver | 9% |
| Static program parts (I/O, dialog description) | 6% |
| Others | 6% |
Because of these integration problems, including performance problems, modeling languages are often seen as prototyping-only languages, useful for tuning the design of an optimization model, but not to be used for deployment.
Optimization for Java developers
OptimJ is not targeted only at optimization experts. We believe that it also provides an easy path for mainstream developers to embed optimization techniques into their applications: Same environment: Java developers can continue to use their favorite language and tools. No need to write integration code: OptimJ and Java share the same execution model. Easy installation: OptimJ is an Eclipse plugin. Steep learning curve: Java developers need to learn what constraint are, but not how to write them (constraints in OptimJ are plain Java expressions).
Language-level integration
Imagine that you order today to your favourite software shop an application for handling customer orders on the web. This application will most probably be architectured around a Java core. The core communicates with a database for storing and retrieving orders, communicates with a web server for handling user requests, and communicates with an optimization engine for scheduling an optimal delivery plan.
Today this simple application will require at least 7
programming languages to handle these application domains.
The application requires many different languages for the different
application domains. Each language boundary requires the development of
a specific interface.
is developing Java extensions for all of
these application domains.
With
’s technology, the whole application
is written in one single language, namely the combination of Java
extensions appropriate for the application. There are no language
boundaries anymore.
Added Value
Productivity
We help express your own concepts at the right level of abstraction: no more involved encodings between your mind and your code.
Quality
We help finding bugs: they often lie at the interface between different languages, and programming tools cannot help. Static analyzers and debuggers do not cross the language barrier.
Efficiency
We help reducing transformation of data formats at runtime.
We address the issues that hurt
Integration
If you're spending lots of efforts integrating multiple languages within an application, you're in trouble and we can help.
Verification
If your programming language and your verification tool have difficulties talking to each other, you're in trouble and we can help.
Modeling
If you're discovering the hard way that there is a conceptual gap between your modeling language and your programming language, you're in trouble and we can help.
DSLs
If you feel the need to develop your own DSL (Domain Specific Language), you're in trouble and we can help.
Black Boxes
If you feel the need to develop a code generator, you're in trouble and we can help.
Translation
If you find it hard to maintain legacy code, written in
low-level or obsolete languages, you're in trouble and we can help.
Application domains
We have already developed languages or language extensions in the following areas:
Units of measurement
Make sure that nobody will ever attempt to add apples and oranges, or feet and meters.
Reactive programming
Parallel processes and events as first-class concepts in the language: forget about low level artefacts such as threads and sockets.
Functional programming
Makes your programs compositional.
Financial programming
Starting with the notion of a decimal number, not present in most mainstream languages.
Set programming
Think about how many times a day you are encoding using a low-level programming language the idea of "The set of ... such that ...".
Operational research
We enable you to express your optimization model using a convenient notation and without ever leaving your favorite development ecosystem.
Database querying
Access your database directly from your application language.
