Hacker News new | past | comments | ask | show | jobs | submit login

The B52 is better than nothing.

I've encountered several interesting languages over the years and they would all have been really nice and painless to use only if it wasn't for their lack of standard libraries that are just there.

Good set of standard tools and libraries are more important for a language's success than the language itself. The language has to be quite bad in order to drive programmers away from good libraries.

It's the Python problem: I know the shortcomings of Python quite well and I would happily use some other language instead except that Python has almost everything and despite the shortcomings of the language itself, Python is by far the fastest way to code a quick program to solve some random, particular problem.

I don't like Java but in the case of Clojure, the heavy machinery in JRE is a critical life-saver. Sure the Java side is ugly but at least it's there for Clojure.

The world is full of lisps that you can't do anything with. Clojure isn't one of them.




Just curious, what for you are the shortcomings of Python?

By the way, I completely agree with your main point here. When programming in Clojure, the availability of the Java libs is a very useful thing and that makes Clojure itself useable for me.


Let me think. These are for 2.x line, I still haven't tried Python 3.x as it doesn't seem to be significantly leaner and more modern than Python 2.x. I'll go for Python 3 no later than when I absolutely have to.

1) Scoping: there's no nested lexical scoping but only function and global scope. Makes many unnecessary workarounds necessary. 2) Read-only closures: you have to use the list hack, you can't just assign to any closed-over vars. 3) No do-while. Surprisingly often needed and thus irritating. 4) Some shortcomings aren't inherent in Python: while I would always like to prefer generators over lists and list comprehensions, and consider iterators elegant, I started considering iterators and itertools as cumbersome and old-fashioned right after I saw lazy sequences in action in Clojure. 5) Various function and method names that I just never, ever recall without first rethinking it again. Like dict.setdefault() which is actually dict.get() but with a default value. There's probably a dozen of these, and each time I just wonder: why is it so difficult to properly rename a few functions and gradually deprecate the old ones. 6) Last, the classical "there are no proper anonymous functions": lambda doesn't cut it and having to specifically name "anonymous" functions is cumbersome. Combined with scoping limitations, even using a generic name like "_" for local functions to be passed as arguments can cause trouble.

There used to be more but I have done less and less with Python recently and much more with Clojure, so the irks are fading.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: