Engineering Domain-Specific Languages with Large Language Model-based Assistant

Position INTERNSHIP

Expected start date2023-10-01

Estimated duration6 months

Education level

ContactMathieu Achermathieu.acher@irisa.fr

(note: this subject can well turn into a PhD thesis)

A domain-specific language (DSL) is a programming language that is tailored to a specific problem domain, rather than being a general-purpose language that can be used for a wide variety of purposes. DSLs are important because they allow developers to express solutions to problems in a way that is natural and intuitive for the domain they are working in, which can make it easier to write and maintain complex systems. DSLs can also be more efficient than general-purpose languages, since they are designed specifically for the task at hand and do not need to include features that are not relevant to the domain.

Code assistants based on language models, like Copilot, Codex or ChatGPT, are tools that use artificial intelligence and natural language processing to help developers write code more quickly and accurately. They can provide suggestions for code completion, formatting, and error correction as the developer types, which can save time and reduce the likelihood of mistakes. Code assistants can also offer documentation, examples, and explanations for various APIs and programming concepts, which can help developers learn and understand new technologies more efficiently.

In a sense, DSLs and code assistants pursue similar objectives, but have pros and cons, for example: engineering DSLs requires expertise and effort while code assistants might not be robust enough to accurately realize some development tasks.

In this internship, we are investigating how code assistants can be leveraged to support the engineering of DSL. We will revisit three families of DSLs that have been engineered during the 5 last years by different people. We will assess how and to what extent code assistants can be useful to support the engineering of DSLs, being from domain analysis, syntax design, compiler construction, DSL validation, etc.