I'm trying to get my head around languages in general and I've come across some jargon around DSL's that I'm not clear on. So I have questions and hopefully you have answers and perhaps examples?
external DSL
I think LaTeX, AWK or the graphviz dot
language are examples.
I'm guessing Scribble too: scribble --markdown myrtle.scrbl
. I suppose any #lang
DSL counts as an external DSL because you can run it with racket <<mlangprogfilename>>
? I think this would mean you could use '#lang datalog` as an external DSL.
embedded DSL
I'm relying on wikipedia and web pundits; these are described as being built on the host language and usually adopting host language syntax. React is given as a Javascript example.
Is racket/class
an embedded DSL that uses the host language syntax?
What about regular expressions?
Do the #rx or #px values count as a programs in their respective DSL's?
Do they not count as most(?) general purpose languages include regular expressions?
The Racket reference refers to compiling them; 'it is faster to compile the string once to a regexp value' so I've (possibly incorrectly) concluded that regular expressions are a widespread embedded DSL, along with string interpolation like format
?
Is #lang 2d
a DSL that only changes the syntax? with the host language is not extended with additional functionality like classes and objects?
(I may be wrongly assuming that 2d reader passes cond
, match
and friends to Racket, and you can't use it with host languages that lack the set of forms it emits)
TSPL / 'Task Specific' PL - this paper describes Vega-lite as a TSPL. I think that means Sawzall counts as a TSPL?
Are there any other Racket examples?
Have I missed anything?
Are there good resources to look at?