16 comments

[ 3.4 ms ] story [ 48.4 ms ] thread
Misleading title. In the first place the proper title is "Hy: Quickstart". In the second, Hy is nothing like clojure. It is a LISP like clojure is, true, but it doesn't have any of the libraries or even syntactic constructs of clojure, such as built-in maps.

It is a LISP built on CPython. That's cool, but it feels more like you're writing homoiconic python than clojure, down to the mutation-centric control flow and keywords.

I like the concept of Hy, but has anyone used it for something "serious"?
In other words, apart from parenthetical syntax, what value does it add over just writing Python? For example, what macros are useful "in the wild"?
Hy is beautifully imperative. For people put off by functional programming Hy is absolutely awesome.

The return/if/while/break/continue actually work without making you jump through hoops.

This is not a dialect of clojure, please fix the title.
The following function is valid in hy and clojure.

(defn fact [x] (if (< x 2) 1 (* x (fact (- x 1)))))

Yes, hy and clojure don't have access to the same libraries, but then neither do clojure and clojurescript, yet you'd agree that clojurescript is a dialect of clojure, yes?

(comment deleted)
It is a lisp, with visual similarities to clojure. Library access is irrelevant. The features that differentiate clojure are not there.

- Immutable and persistent data structures as the default

- Functional programming (no early returns or mutable bindings) as the default

- Reader literals for those data structures

- Concurrency primitives (including core.async)

- Protocols for polymorphism

From the hy docs: "Hy derives a lot from Clojure & Common Lisp, while always maintaining Python interoperability". Borrowing nice features where you find them is great, but it doesn't make it either a common lisp dialect or a clojure dialect. It just makes it a lisp with some similar stuff.

(comment deleted)
Clojure and Clojurescript DO have access to a lot of the same libraries.

There are also conditional reader constructs so that a library can, when necessary, offer different implementation details between Clojure and Clojurescript.

Ignoring libraries completely, Hy doesn't have the most important things that set Clojure apart. (As another poster points out.) Especially immutability.

This is nothing against Hy. I'm sure I would like it when I want a Lisp in a Python environment. But there's no good reason, and it is even misleading, to try to conflate it with clojure. It seems like it stands on its own strengths well enough.

(comment deleted)
It “feels” like Clojure for whatever that is worth. I find myself more naturally doing functional programming in Hy than in Python. The threading operators encourage this.
This is very nice. I wonder if all the examples from SICP will run in Hy?

The tutorial is very well written and show all the language features: http://docs.hylang.org/en/stable/tutorial.html

Funny quote from the quickstart:

   #! /usr/bin/env hy
   (print "I was going to code in Python syntax, but then I got Hy.")