Depending on the purpose of a language, its design will be completely different: the syntax may be textual, graphical, tabular, or a mix of those. It may be highly expressive, allowing users to define their own abstractions, or restricted, simplifying the language for non-programmer end users. The degree of formality may be different, depending on the domain for which the language is built and the assurances one must be able to make about the correctness of programs. Depending on performance requirements, a simple AST interpreter may be good enough for executing programs, or one may need an optimizing generator.
I this talk, I revisit a number of languages we have built over the last five years. For each of them, I discuss the core design decisions as well as the drivers in the domain that led to those decisions. The talk includes languages for embedded software, insurance product definition, security analysis, health algorithms, engine control and system engineering. All of the languages discussed have been designed with and for industrial customers and have been implemented on the basis of the open source Jetbrains MPS language workbench.