Inspired by meh’s Ruby-Clj module, I created the python equivalent “pyclj” last weekend. Pyclj is a clojure literal reader/writer for python. It enables data exchange between python and clojure, in a clojure-native way. It’s Valentines Day today, I’d like to release it as the gift of python to clojure
The API is very simple. It’s all like python’s data modules (json, pickle)
clj.loads("[1 2 3]")
clj.dumps({"a":1, "b":2})
Clojure types are mapping to python data structures :
| Clojure | Python |
|---|---|
| list | list |
| vector | list |
| set | set |
| map | dict |
| nil | None |
| string | string |
| int | int |
| float | float |
| boolean | boolean |
| char | string |
| keyword | string |
But how we win clojure’s heart from ruby?
We are faster.
Considering clojure literal below:
Comparing ruby-clj(0.0.4.5, ruby 1.9.3p0) and pyclj(0.1.3 python 2.7.2):
s = "[1 2 3 true false nil {:a 21.3 :b 43.2} \"Hello\"]"
t1 = Time.now()
for i in 0...10000
Clojure.parse(s)
end
puts Time.now()-t1
import time
s = "[1 2 3 true false nil {:a 21.3 :b 43.2} \"Hello\"]"
t1 = time.time()
for i in range(10000):
clj.loads(s)
print time.time()-t1
The result:
ruby: 13.451157809
python: 0.712423086166
Edit 20120216 13:30
ruby-clj 0.0.5.3 has resolved the performance issue ![]()
The new result ruby-clj/0.0.5.4 Vs pyclj0.1.4 (on my laptop):
ruby-clj: 2.044872364
pyclj: 1.19659209251
The project is hosted on github. Feel free to join the development and enhance it.



