Basilisp is a Clojure-compatible(-ish) Lisp dialect targeting Python 3.9+. Basilisp compiles down to raw Python 3 code and executes on the Python 3 virtual machine, allowing natural interoperabilit...
The Hy compiler works by reading the Hy source code into Hy model objects and compiling the Hy model objects into Python abstract syntax tree (ast) objects. In other words, at runtime it is essentially Python source code. Similar to Typescript and CoffeScript (JS).
Basilisp is hosted on the Python virtual machine, so its compiler generates native Python bytecode. Similar to Clojure and Scala (Java/JVM) or Elixir (Erlang/BEAM).
Personally in these cases, I prefer the second approach, because the first one is basically “syntactic sugar”: a Python lispy syntax (embedded), on the other hand Basilisp is a “more complete implementation”, that is, a language independent of the host language with all the strengths and weaknesses of its host system/VM.
I agree, the second approach is more direct, so the only limitation comes from the properties of the VM itself. Transpiling to Python means also inheriting semantic quirks of the intermediate language. It makes sense for ClojureScript to do it, since js is the layer that browsers expose, but if you have the option to target the VM bytecode directly then that’s a much better option.
Isn’t hy also a lisp for Python? What’s the difference here?
As @yogthos@lemmy.ml mentioned, they differ in implementation:
Personally in these cases, I prefer the second approach, because the first one is basically “syntactic sugar”: a Python lispy syntax (embedded), on the other hand Basilisp is a “more complete implementation”, that is, a language independent of the host language with all the strengths and weaknesses of its host system/VM.
I agree, the second approach is more direct, so the only limitation comes from the properties of the VM itself. Transpiling to Python means also inheriting semantic quirks of the intermediate language. It makes sense for ClojureScript to do it, since js is the layer that browsers expose, but if you have the option to target the VM bytecode directly then that’s a much better option.
Exactly, The transpilers are necessary when the target system only works exclusively with a single language.
I think it’s the same idea, but different implementation.