\(GPL = \neg DSL\)
• All Turing-complete #GPL are splendid DSL in some contexts: Fortran for scientific parallel computing, Cobol for high-throughput transaction processing, C for low-level system programming, Haskell for categorical programming, and so on.
• Some Turing-complete #DSL are poor GPL in all contexts: Matlab, Mathematica, R, PL/SQL, Verilog, Forth, and the like.
In pragmatic terms, a GPL that happens to perform well in some specific application domain can reliably be put to many different use cases, albeit with varying fitness for the purpose. But a DSL that offers Turing-complete programming facilities is usually a poor choice for implementing general-purpose applications.
But in modern #programming practice, the distinction between GPL and DSL has become almost as pointless as that between compiled and interpreted. C began as a GPL, but it is now used almost exclusively as a low-level system programming DSL. JavaScript began as a web page animation DSL, but it is now used as a web-borne system programming GPL.
Indeed, some languages—including C++, Java, Haskell, Rust, TypeScript, etc.—have Turing-complete type systems.
Is this the emergence of convergence?
Or is it the convergence of emergence?