5 ms·
I confirm: the syntax is limited. There are only a few keywords and langage constructs. The power is in the number of functions made available, or the ones you
by nfrankel 8y ago
I confirm: the syntax is limited. There are only a few keywords and langage constructs. The power is in the number of functions made available, or the ones you create for yourself.
- outworlder 8y agoDoesn't Clojure have reader macros? The whole point of lisps is that you can extend them.
- virmundi 8y agoWhen I worked with Clojure the community seemed to treat macros as a nuclear option. Only use them when absolutely necessary. For some, this translated to “you can’t hug your children with nuclear arms”. If the community hasn’t changed, perhaps macros out of favor.
- serpix 8y agoThis still stands, macros are a really high level abstraction and do not compose. Almost always a function is enough. But if it saves a good chunk of repetition on something complex then go for it. A good example of code with macro overkill is compojure-api. There is just so many clever macros that you need to read the original source code with a microscope to know what the code expands to.
- didibus 8y agoActually, Clojure does not have reader macros, because it was thought to be the biggest cause of the lisp curse.
- grzm 8y agoNit: Clojure does not have user-defined reader macros. There are quite a few built-in reader macros, including #? added for reader conditionals.
- lispm 8y agoThen I'm surprised that it allows the user to define functions and macros.
- didibus 8y agoI think most schemes also don't have reader macros. How often do you actually use them in CL? I feel reader macros have the problem that it modifies/extend the foundational syntax. And that can become overloaded really quickly. Normal macros can change evaluation semantics, but not the fundamental syntax. Which makes it easier to navigate and understand in general. Also, reader macros are pretty hard to write in comparison. Racket has a nice take on them though. Making them more like all new programming grammars, and defining your dialect per file. Even there though, most alternate syntax is for research or fun mostly.
- lispm 8y ago> I think most schemes also don't have reader macros. Scheme even has a fixed syntax in the RnRS reports. Lisp does not have that. > Also, reader macros are pretty hard to write in comparison. Not really. One just reads things from a stream and returns an s-expression. > I feel reader macros have the problem that it modifies/extend the foundational syntax That's a feature. The main purpose of user-written reader macros is to extend S-expressions to support literal syntax of new user-defined data types. There is nothing scary about it at all. > Racket has a nice take on them though. Making them more like all new programming grammars, and defining your dialect per file My Lisp Machine had that already in the 80s. It supported different language syntax - from various Lisp variants to Pascal, C and other languages. > Even there though, most alternate syntax is for research or fun mostly. On my Lisp Machine it was actually useful.
- didibus 8y ago> Scheme even has a fixed syntax in the RnRS reports. Lisp does not have that. Could you link to the RnRS in question? I'm curious. > Not really. One just reads things from a stream and returns an s-expression. I feel like if I agree to this, I also agree that pre-processors are easy to write and use. And that undermines the innovation and superiority of syntactic macros introduced by Lisp. > The main purpose of user-written reader macros is to extend S-expressions to support literal syntax of new user-defined data types. This is possible in Clojure as well. You can extend the language with new data literals. But they must begin with # + char(s) and respect the existing reader semantics, as they are processed as a syntactic macro, and not a lexical one. So you could add #queue[1 2 3] for example. But you couldn't add |1 2 3| > On my Lisp Machine it was actually useful. If only they'd still make those, and had improved its performance.
- keymone 8y agoMaybe it’s a problem with translation? “Limited” comes with negative connotation, as in “you can’t do as much as the other, non-limited guy”. Maybe you wanted to say “minimal” instead? s-expression based syntax is as powerful as it gets, as it allows to concisely represent any AST.
- TeMPOraL 8y agoWhen talking about Lisp syntax, what you almost always want to say is "lisp has $most-positive-word-in-context syntax". So it's "limited" for some, "simple" for others, but the overall point is the same - no cruft and unnecessary sugar, and uniformity allows for easy programmatic transformations of code.