So it turns out that TypeScript doesn’t really have incremental compilation. This means if I rely on some 3rd party modules then recompiling anything that depends on that 3rd party module will transitively recompile everything. I understand that TypeScript is not a build system so delegating those responsibilities to one is a sensible design decision. The trouble with build systems is they can get pretty hairy pretty fast and ideally I want to avoid the overhead of one. Fortunately we can avoid the hairy parts of a build system by using a few symlinks and declaration files. Continue reading
I’ve been playing around with a few multi-paradigm programming languages. The most recent one is called Picat. It’s a hybrid language that is a mix of logic, imperative, actor, and functional paradigms with built-in constraint solvers and planners. That’s a lot to take in so whenever I’m faced with a language with roots in the logic paradigm the first thing I try to do is solve “SEND + MORE = MONEY” cryptarithmetic puzzle. It’s a small and manageable problem and there are at least two ways to solve it so it allows one to exercise several features of the logic and constraint paradigms. Continue reading
tl;dr Badly designed DSLs create unnecessary complexity and lead to more problems than they actually solve.
One of my frustrations with the DevOps and cloud infrastructure tools is that most of them are badly designed DSLs that eschew all features of modern programming languages. Continue reading