I like Eric Normand's take here: https://lispcast.com/magical-leverage-languages/
On Sun, Apr 28, 2019 at 9:46 AM <r...@chartbeat.com> wrote: > I agree Erik, macros and the dsl idea are edge cases imho. Having written > clojure for 4 years now (and with 30 as a professional developer) I’ve only > written a few macros and they were for very specific use cases where I > wanted to support something specific. > > I think they are over-hyped features which most people will never use. > That said, it’s nice to have macros when you need them > > On Apr 28, 2019, at 9:41 AM, James Reeves <ja...@booleanknot.com> wrote: > > Macros allow for experimentation in language design, not only by third > parties, but also by the developers of the language themselves. If you have > an idea for some new piece of syntax, it can be tried out in a library > first. > > Macros are also useful for precompiling code for performance. If you have > a literal data structure you need to transform, or even one that's > partially literal, you can use macros to transform those parts at compile > time. > > That's not to say macros are written often; but they have an important > niche. > > Regarding DSLs, I don't think applications are often written using an > encompassing internal DSL. I think most of the time when people talk about > a DSL, it's actually just an overly complex API. > > In my view, a good DSL is both more consise within a domain, and less > powerful than a general purpose language. A regular expression, for > example, can concisely search through text, but has no side effects and is > guaranteed to halt at some point. Certain regex libraries even go further, > and guarantee they will halt within a time proportional to the input text. > > Ideally we should be aiming for the *least* powerful tool for the job, > which often means using data to describe a solution rather than arbitrary > code. Not only is this more reliable, it's also more transparent and allows > for greater introspection. > > For example, my own Integrant <https://github.com/weavejester/integrant> > library replaces the dependency management of an application with a data > structure. This is less powerful, because the dependencies need to be > explicitly mapped out beforehand, but it's also more reliable and allows > for introspection. > > Going further, Cognitect's Vase <https://github.com/cognitect-labs/vase> > allows for micro-services to be expressed almost entirely through a data > structure. > > Maybe these examples allow people to write applications faster, but I > think it's more important that they allow applications to be written more > reliably. Over time, applications that are reliable and predictable are > going to be easier for people to continue developing. > > On Sun, 28 Apr 2019 at 05:46, Erik Assum <e...@assum.net> wrote: > >> First of all, this might very well be a ramble without much sense, but >> please bear with me. >> Secondly, I’m writing this first and foremost not as an application >> programmer. >> >> Having programmed in the crud-application business some twenty years >> professionally, the last couple of them in Clojure, there are (at least) >> two things (that might be related) that puzzle me: >> >> 1) The power of macros >> I see, and acknowledge that eg the go-macro core.async is a wonderful >> piece of work, and that it’s really cool that it could be done in a >> library. But as an application programmer, I really don’t care if it’s a >> macro or a language feature, and I couldn’t really see myself investing >> that amount of time (nor would I have the skills to do so if I had the >> time) to solve my concurrency problems in such a general manner. >> >> 2) The creating of a DSL for your problem domain, and then write a custom >> compiler to solve your problem >> In my (most optimistic view) every program that I write is somewhat an >> internal DSL, built up of domain-specific functions, glued together with >> Clojure. But I don’t feel that this is very specific to how I program in >> Clojure vs other languages. >> >> So what I’d really like to achieve with this post is two things >> >> 1) Arguments ranging from “Oh, you should look at it from this angle” to >> “That’s how I feel too” to “You’re totally wrong, because…” >> >> 2) Pointers to blogs/articles/codebases which shows how applications >> written either with extensive use of macros or by implementing an internal >> DSL (and compiler) are significantly quicker to develop than their >> brute-force alternatives. >> >> You might consider this as a first effort to create a presentation around >> the subject :) >> >> Erik. >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clojure@googlegroups.com >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > > > -- > James Reeves > booleanknot.com > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.