Hacker News new | past | comments | ask | show | jobs | submit login
Guile 3.0.10 now ships with support for parens-optional syntax (wisp) (draketo.de)
37 points by Y_Y 7 days ago | hide | past | favorite | 13 comments





Surprised to see so much hostility towards Wisp. I find it very clean and elegant. It won't cover every situation (sometimes it's just cleaner with parens), but it allows you to fall back to parens when needed! It's just really well thought out imho. I've used Wisp in a moderately large project and wouldn't hesitate to do it again if I had the chance.

I always liked Guile because 1) it is a Scheme, 2) it is maintained under the umbrella of the GNU Project and 3) it is the system language of GNU Guix.

Wisp may be contraversial, especially in elitist Lisp crowds, but IMO it makes lisp more readable by using the de-facto standard Lisp indentation as Python-esque semantic whitespace.


Bitching about parentheses in Lisp is like bitching about house cats having claws. Parentheses in Lisp are a feature, not a bug. They enable a great deal of Lisp's power.

If you really are allergic to parentheses the proper solution is to use a different language, not to mutilate Lisp by having its claws removed.


Problem is, any project now that can declare a dependency on 3.0.10 or higher can easily use this.

There is a psychological difference between "I can add wisp to my Guile project and write in it" and "I can count on Guile supporting wisp out of the box", and that difference will cause the insane whitespace nonsense to run rampant in Guile codebases.

Also, as of today, you're no longer a fully competent Guile developer if you don't know how to read and maintain wisp.


Does Racket suffer from this? Doesn't Racket support a bunch of different syntax and such?

(Mind, I'm a curmudgeon when it comes to this, I don't even like the mixing and matching of [] and ().)


With Racket one can roll their own syntax.

Tell me you don't know much about Guile without telling me you don't know much about Guile. The whole vision of Guile from the get-go was to give it the ability to transpile languages programmers liked, such as Perl or Python, into Scheme and thus become a universal extension runtime for GNU software.

That dream got closer to reality with Guile 2.0 and its multi-language "compiler tower" which already supports ECMAScript and a subset of Emacs Lisp. But Scheme is Guile's native tongue, so you don't have to learn how to use those in order to be a "fully competent Guile developer", and you wouldn't have to learn Wisp either.


I use to use Guile a lot a few years ago. I remember using Artanis to build a site and was great for the most part. Guile was going to be my "one for all" which I am always seeking.

I remember reading an article about wisp and being compared to (and writer saying is better than) python.

However, seeing it now ships with it -- sure, I am a little concerned about it. It opens the door for for mixture of code when searching for libraries or general scripts to use... now some of these might be in wisp.

A lot of this does not concern me (now) but I do understand the frustrations.

makes me wonder if the GNU Guix config files will start to have a mixture of syntax?

On the other end -- I dont think this is as big of deal as it seems. Guile is designed to support different languages like this. If you have a project.. pick your syntax.. have fun.


Kill it with fire.

semantic-whitespace is the worst idea since ideas, or at least since null. Cut and paste, or just moving code blocks around, doesn't work smoothly, there's no way to check the semantics other than the formating, it's difficult to judge the correct indent level many lines away, etc, etc.

Use actual delimiters to signify meaning, then auto-format to demonstrate the semantics are what you expect. A kind of double-entry book-keeping for coding.


In practice, it is not so hard. I have been using Python for decades, and there is no problem.

The same is true for YAML, which is not perfect for communicating among machines but is more accessible for human input/output communication. A good pattern is what Kubernetes does; it shows and reads YAML to/from humans and uses JSON and GRPC for proper machine-to-machine communication.


I believe it was Chris Okasaki who discovered that the thing that helped neophyte programmers go from not getting it to getting it in terms of blocks and scopes was semantic indentation.

Lisp's parens were originally a convenience notation for McCarthy's idea of lists, but not intended as something people actually code in. For most programmers they are, as they say in the Rust community, not very ergonomic.

Semantic indentation is a win, and will be good for the Lisp family. Embrace change or get left behind.


"I believe it was Chris Okasaki who discovered that the thing that helped neophyte programmers go from not getting it to getting it in terms of blocks and scopes was semantic indentation."

I don't believe a word, and it's not my experience, the indentation doesn't need to be semantic at all. Meanwhile cut&paste, which is heavily used when learning is broken, it's hard to match up indentation levels lines apart, and even tabs-vs-spaces is suddenly a thing again.

"Embrace change or get left behind."

Don't be ridiculous.


Reminds me of coffeescript. Even though it's no longer in vogue I have fond memories of coffeescript.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: