5 ms·
Almost any problem can be meaningfully and usefully solved by introduction of a DSL. It's a remarkably flexible technique. Ruby is a really bad language to wri
by tel 12y ago
Almost any problem can be meaningfully and usefully solved by introduction of a DSL. It's a remarkably flexible technique.
Ruby is a really bad language to write good DSLs in. Metaprogramming is an awkward replacement for better DSL facilities.
Maybe this book can demonstrate better techniques?
- mattgreenrocks 12y agoIsn't the DSL just an ad-hoc implementation of a rules engine in many cases?
- tel 12y agoCan be. I see a lot of those, but rules engines are far from the only denotation of a DSL. It just tends to be that people want DSLs to be sort of natural language which drives people to end up with something like predicate logic which drives people to end up with something like Prolog and then you might as well have a rules engine.
- ritchiea 12y agoInteresting, that runs counter to the prevailing sentiment that Ruby's metaprogramming makes it great for writing DSLs. What language features do you prefer for writing DSLs?
- tel 12y agoTyping, phantom typing, straightforward lambdas, sum types, tail-recursion, direct syntax abstractions (both Lisp and Idris are great examples). I find that metaprogramming in Ruby is a tremendous hack for getting something like syntax abstraction and something like control over evaluation order. Personally, syntax abstraction doesn't feel super important for deep or shallow embedded DSLs (though it's obvious a big deal in external DSLs if you want to walk that minefield). You need more than nothing, but making it "human language like" is ridiculous. Controlling flow is a big part of it though. Ruby's block syntax does a lot here, but frankly functions/abstractions never feel first class in Ruby---only Objects do and Objects are too heavyweight.
- dkarapetyan 12y agoWhat would those be?