Hacker News new | ask | show | jobs
by madhouse 4530 days ago
I hate significant whitespace, and the syntax of Python (not enough parens; allows crazy oneline hacks with comprehension, yet still forces indentation otherwise; blindly following pep8 often results in horrible mess of a code, etc).

Hy gets rid of both the significant whitespace, and the syntax too. Yet, allows me to have bidirectional interop, so people using my modules are none the wiser, as long as I make a little effort to remain python compatible (macros used only internally, and not exposed in the API, and using valid python names for functions and other stuff).

2 comments

Significant whitespace kind of makes sense in general: humans make heavy use of whitespace to parse code visually, which means that when it isn't significant, the machine and the human are essentially using different parsing algorithms.

As for "getting rid of the syntax", I think that's a bit disingenuous. Much like Clojure, Hy cheats by collapsing nesting:

    (for (i (range 1 10)
          j (range 1 10))
        ...)

    {1 2 3 4} ==> {1: 2, 3: 4}
I mean, this isn't just getting rid of syntax. It's getting rid of structure. As a purist, my stance is that you either keep the structure (`{(1 2) (3 4)}` or you add syntax (`{1 2, 3 4}`, and unlike Clojure, make the comma significant). What you don't do is tuck syntactic information in the parity of the rank of an argument.
Understandable, I always forget about people not liking the whitespace requirements. You and I fight on different sides of the whitespace-brackets/parens war. I definitely see the disliking of comprehensions with the abuse they get, but with a little bit of restraint I find them to be one of the most useful and clean feature of python.

EDIT: Thanks for the perspective.