Machine and robot programmers did not want to program imperatively, by "Goto XY", "Mill Circle", but declarative by "Mill Pocket", "Drill Cycle", "Pick Part", "Place Part" .. To providing such high-level, task-oriented programming techniques, our compilers and runtime systems needed to calculate a lot of coordinates, paths, kinematic and dynamic system behaviour implicitly and make manufacturing decisions related to machine models, tools, .. based on strong reasoning.
In the 70ies, Assembler-->FORTRAN-->CNC-Language--->Part-Manufacturing Languages were a matter of develop-compile-go cycles.
In modern declarative environments we can think of language extensions, kernel extensions, link structures and plug-in API's. Mathematica is built by C++, but UnRisk is built on top of Mathematica extending Mathematica's declarative environment into the universe of financial derivatives and risk analytics. In UnRisk users declare "Instrument-Groups", "Contract-Features", "Pay-Offs", "Scenarios" and use one super-function "Valuate" that acts as generic interface for all valuations. Developers, say in interest rate research of a bank, can build their environment on top of UnRisk. The development cycle becomes compute-develop-deploy.
It is my strong belief that the choice of such techniques will drive "domain-specific languages" in all type of domains, from biology to finance.