Python becomes a platform. Thoughts on the release of clojure-py.
khinsen.wordpress.com
khinsen.wordpress.com
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.
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.
And yes, this is relevant since Python and Clojure embody exactly this kind of tension.
Elegance is an often trotted epithet in mathematical writing, and sure, it has some sort of established connotation (minimalism, what we call orthogonality, etc.), but in the end it's almost always something like "it has sugar, and marmalade, and skittles and ketchup! All my favorite ingredients! I'm very glad they didn't put that icky caramel stuff in it".
Anyhow, Clojure sports a fair bit of ``pragmatism'' with its own, very leaky sequence abstraction, as you sometimes feed a vector to a function and you get a linked list and next thing you know, your head has been put in your ass (when you conj/cons an element to a sequence).
Lisp has also always leaned to a sort of messiness in its use, even if the language's features and libraries are held to a higher standard. Thus you see phrases like ``ball of mud'' used in a subtly positive way.
But this clojure-py project is very interesting to me. I've heard so many positive things about Clojure and Lisp in general. I've been wanting to explore Clojure, but I've been holding off because I knew I would need to become more familiar with the Java infrastructure to learn Clojure well, and learning the JVM is one challenge I just don't feel like tackling at this point in my life.
On the other hand, I love PyPy, and I've been fascinated by the progress in performance the PyPy team has been making. I'm even hoping to eventually implement a version of CoffeeScript on PyPy. Given my Python background and interest in PyPy, Clojure now seems much more approachable thanks to this implementation. I'll probably wait until it's a little more mature, but I look forward to trying clojure-py out!
I'm currently learning Haskell too. My ideal functional language would be one similar to Haskell which runs on the Python VM and has good interoperability with Python.
Immutable? Could you explain this a bit more? (As far as I know, "x += 1" will modify the block of memory that x points to)
>>> a = 1
>>> id(a)
32855992
>>> a += 1
>>> id(a)
32855968
So it's actually creating a new Integer object, which `a` then points to, or in other words: a += 1 is equivalent to a = a + 1
This behavior makes sense, if you wrote: a = 10
b = a
a += 20
You wouldn't expect b to be 30. 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.
So I backed up, practiced some (koans, 4clojure, Euler), read Stuart Sierra's Programming Clojure and then read TJoC. Both excellent books, btw.
[1] From the website: "[Joxa's] not Clojure though there is plenty of shared syntax."
> Joxa (pronounced 'jocksah') isn't Erlang, though its very compatible. Its not Clojure though there is plenty of shared syntax. It's not Common Lisp though that is the source of the macro system. While Joxa shares elements of many languages, it is its own specific language. of all these languages, and knowing these languages will help you get up to speed with Joxa, but it is its own unique language.
I doubt it, unless either their code doesn't use any external libraries, or Clojure writes a library abstraction layer containing all the Java/Python/etc libraries.
I meant that things like ClojureScript One (if you don't know it, please take a look, it's worth it) will be possible across a variety of domains. Simple interoperability between platforms, same data structures, fewer context switches, Clojure all the way down.
All 100 of them (Clojurers)?
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.
Not when compared to macros in lisp dialects. The closest python comes is: http://docs.python.org/library/ast.html but lisp with it's simple structure is much less unwieldy.
Edit: Nevermind, just read the project readme[1] where they explicitly mention targeting PyPy as a goal.
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.
> 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.
Absent is too strong a word, surely.
http://bitshaq.com/2011/07/14/basic-intro-to-python-meta-pro...