Home Contact us

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.

Language integration

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.

Language integration

ateji is developing Java extensions for all of these application domains.
With ateji’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.