6 ms·
Python becomes a platform. Thoughts on the release of clojure-py.
- beza1e1 15y agoLast time i looked the Python bytecode was not considered stable. This means, Python devs might change syntax and semantics in minor version changes. This would be a major problem for clojure-py.
- kibwen 15y agoI'm curious, can PyPy JIT-compile Python bytecode by itself, or does it require the source to be in Python? Because it would be really cool if you could target the Python "platform" and get a free JIT as well. Edit: Nevermind, just read the project readme[1] where they explicitly mention targeting PyPy as a goal. [1] https://github.com/halgari/clojure-py https://github.com/halgari/clojure-py
- masklinn 15y ago> I'm curious, can PyPy JIT-compile Python bytecode by itself, or does it require the source to be in Python? Considering you can run bytecode-only Python, it would be weird if Pypy's JIT only worked from source. Beyond that, they're apparently implementing Clojure on top of (in) Python, so they won't get the JIT for free (the interpreter code will be JITed, but the Clojure code won't be unless their runtime compiles to Python bytecode which does not seem to be the case). They'd get it for free if they implemented a Clojure in RPython as well, but would leave the Python ecosystem behind.
- obtu 15y agoFrom the article > clojure-py is an implementation of the Clojure language in Python, compiling Clojure code to bytecode for Python’s virtual machine Which means both the compiler (mostly an AST walk from the look of clojure/lang/compiler.py) and the Python bytecode it produces should benefit from PyPy's JIT.
- halgari 15y agoThis is very correct. We compile Clojure code to Python bytecode. Clojure functions become python functions, clojure deftypes are Python classes, Clojure namespaces are Python modules. And yes, it runs perfectly well on PyPy. Actually it sometimes runs a bit better. CPython segfaults with bad bytecode sequences (unbalanced stacks). PyPy actually throws an error so you can fix the code.
- agentultra 15y agoThe idea of a python implementation becoming host to other languages is somewhat interesting. Python has had a good interop story with the vibrant ecosystem of C libraries and is pretty good at being cross-platform as well. However, I'm not sure Clojure is going to impress Python developers for the reasons the author states. Python has metaprogramming and it has an immutable type (the tuple). However, Python has rejected functional purity for pragmatism so I'm not sure there will be a great many Python developers suddenly switching to clojure. It's generally not the implementation that impresses Python developers the most AFAIK -- it seems that most Pyhtonista's like the language more than anything. That being said I'd be interesting to see how far clojure-py goes. Pypy is the ideal implementation for this sort of project as they're aiming to be a JVM-like platform for dynamic languages.
- vutekst 15y agoClojure is not a purely functional language either. You can have side-effects anywhere, it's just that Clojure emphasizes immutable, persistent data structures.
- whateverer 15y agoUsers of a host platform are almost never the target of a port such as this. ``Pythonistas'' are not the audience here, it's Clojure programmers who wish to sneak Clojure in a Python environment or use its libraries in lieu of Java's. Also, I must add that I really dislike the use of the word ``pragmatism'' in the context of a programming language. It almost always is used to justify either sloppiness, misunderstanding or just plain (and save for the word, valid) aesthetic preference.
- CPlatypus 15y agoFair point about "pragmatism" but the contrary "elegance" often comes across as dogmatic or even elitist. Most languages strive for both pragmatism and elegance, but tend to favor one a little over the other. And yes, this is relevant since Python and Clojure embody exactly this kind of tension.
- 15y ago
- daviddaviddavid 15y agoI'm not sure why the author would say that metaprogramming is "absent" from Python. Do decorators and metaclasses not count as metaprogramming features? I'm sure that languages in the Lisp family might be better suited for metaprogramming than Python but the author's claim seems straightforwardly false.
- DanWaterworth 15y ago> "Do decorators and metaclasses not count as metaprogramming features?" Not when compared to macros in lisp dialects. The closest python comes is: http://docs.python.org/library/ast.html http://docs.python.org/library/ast.html but lisp with it's simple structure is much less unwieldy.
- pnathan 15y agoI'd rather see things being overlaid on a Lisp, ala http://common-lisp.net/project/clpython/ http://common-lisp.net/project/clpython/.
- rlander 15y agoI'd argue that clojure-py is important for a different reason: Clojure is slowly sneaking up on every popular runtime: JVM -> Clojure Javascript -> ClojureScript Erlang VM -> Joxa CPython/PyPy -> Clojure-py In a few years clojurers/lispers will be able to target multiple platforms with one simple language. As a pythonista myself, I used to feel overcome with nausea just by looking at Clojure/Lisp code. However, Erlang was my gateway drug into the functional/bizarre-syntax world and now, after a few weeks (and two books) with Clojure I'm having a bit of an identity crisis: my brain simply refuses to touch messy-non-Lisp code ever again.
- edwardw 15y agoWhat would that two books be? I'm reading the joy of clojure myself now. So far so good.
- rlander 15y agoYeah, I started with TJoC, but it felt like watching a movie before reading the book: it's fun, but you miss many of the insights that went into producing the movie. So I backed up, practiced some (koans, 4clojure, Euler), read Stuart Sierra's Programming Clojure and then read TJoC. Both excellent books, btw.
- lightcatcher 15y agoSadly, I believe all of these ports run slightly different dialects of Clojure (beyond the things that must be different, like interacting with code written in other languages).
- swannodette 15y agoClojureCLR and ClojureScript are not Clojure dialects - they are Clojure implementations. I'm not sure what the creators of clojure-py intend and Joxa is not Clojure as far as I can tell.
- rlander 15y ago
- zem 15y agoInterestingly, when I saw the release announcement a week or so ago, I thought "neat, but I can't think of any use I'd have for it". And then yesterday I ran across SimpleCV [http://simplecv.org/ http://simplecv.org/] and realised I could potentially use it from clojure, which would be really nice. There really is a lot of nice scientific/visualisation work going on in the python community and it is great to have access to it from clojure.
- exupero 15y agoI've used Clojure on and off but never really learned enough Java to be comfortable with it. Clojure-py has been a lot more fun because I can use the Python libraries I'm already familiar with.
- aklein 15y ago"Clojure is strong in two areas in which Python isn’t. One of them is metaprogramming, a feature absent from Python which Clojure had from the start through its Lisp heritage." Absent is too strong a word, surely. http://bitshaq.com/2011/07/14/basic-intro-to-python-meta-programming/ http://bitshaq.com/2011/07/14/basic-intro-to-python-meta-pro...