Previous | Next --- Slide 17 of 73
Back to Lecture Thumbnails
ufxela

One clarification that Kayvon made that helped me understand the difference between these two types of DSL's better is that External DSL's and Internal DSL's differ in the abstraction which they provide. In the case of External, they provide an entirely new programming language, whereas Internal, they "build" on an existing language. The notion of external and internal DSL's specifies nothing about how each is implemented, however. For example an External DSL could be implemented by having it compile down to C++ code. Similarly, an internal DSL that was built off of python could be compiled down to python code, but it could also end up being compiled into C++, or CUDA--just because an internal DSL's programming abstraction is in a certain language doesn't mean that it must be implemented in that language.

suninhouse

To follow up on @ufxeia, I think one of the important things that bridge the gap between abstraction and implementation is compiler.

anon33

I also think the difference between a DSL and a library is quite blurred in many cases. Unless the domain requires a fundamentally new type system and syntax, I can't think of too many cases where it's not at least theoretically possible to write optimized domain-specific functionality in the abstraction of a library. What do y'all think?

blipblop

@ufxela thank you, I found this clarification valuable!

Please log in to leave a comment.