

Python becomes a platform. Thoughts on the release of clojure-py. - cing
http://khinsen.wordpress.com/2012/03/15/python-becomes-a-platform/

======
agentultra
The 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.

~~~
whateverer
Users 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
Fair 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.

~~~
whateverer
I guess one could pinpoint it to the clashing of the traditions of pure
mathematics and engineering which one finds in Computer Science.

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.

------
rlander
I'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.

~~~
cabalamat
> In a few years clojurers/lispers will be able to target multiple platforms
> with one simple 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.

~~~
rlander
I did not mean to imply that Clojure code would be portable across runtimes
(though it is a possibility).

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.

------
daviddaviddavid
I'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
> "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> but lisp with it's simple structure
is much less unwieldy.

------
kibwen
I'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>

~~~
masklinn
> 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
From 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
This 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.

------
pnathan
I'd rather see things being overlaid on a Lisp, ala <http://common-
lisp.net/project/clpython/>.

------
zem
Interestingly, 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/>] 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.

------
aklein
"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-
pro...](http://bitshaq.com/2011/07/14/basic-intro-to-python-meta-programming/)

------
beza1e1
Last 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.

------
exupero
I'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.

