Here's his examples rewritten in Python (Python is not Ruby despite that both are nice languages):
with atomicio_handler(afile) as handle:
handle.write("foo")
if blah:
raise Exception, "baz"
handle.write("bar")
with atomicio_handler(afile) as fh1:
with atomicio_handler(anotherfile) as fh2:
...
the concept of passing functions (which many programmers are not comfortable with)
If this is true, I am apparently quite the programming badass, and so is anyone who has conquered the "callback function" section of your C textbook of choice. In some cases, I wouldn't know what to do without them, and I enjoy the fact that Python makes it seem very natural to be passing them around.
Technical arguments aside, this is one of the most levelheaded language/framework rants I have seen in a long time. I wish more people ranted like this. But I guess they wouldn't call it a rant then.
The thing I most dislike about Python is the collection classes aren't sufficiently orthogonal.
What do I mean? Python has two main built-in collection types, list and dict. If you have a list you can use "in" to ask whether the list contains a value:
>>> a = ['a','b','c']
>>> 'a' in a
True
>>> 'zzz' in a
False
But if you're using a dict, "in" tells you whether the dict's keys contains a value (not the dict's value).
>>> d = {'x':'a', 'y':'b'}
>>> 'a' in d
False
>>> 'x' in d
True
To enumerate over a dict's key-value pairs, you use .items():
>>> d.items()
[('y', 'b'), ('x', 'a')]
But to enumerate over the key-value pairs in a list, you have to use enumerate():
> Python has two main built-in collection types, list and dict
And tuples.
> To enumerate over a dict's key-value pairs, you use .items():
You can also use enumerate.
> But to enumerate over the key-value pairs in a list, you have to use enumerate():
Just like you can with lists.
Python's collection operations do the right thing on collection data types. The fact that those data types also have type-specific operations merely means that those data types have some properties that are not common to all collection types, which is pretty much the reason why they exist.
php doesn't have a seperate list vs. hash type. that's what i'm getting at. maybe if you knew something about the language you wouldn't have just thought this was a random insult.
Pedant here. The fact that a Python lambda cannot be multi-line is not directly related to the whitespace thing. After all, it's easy to put several statements on one line by separating them with semicolons. No, the issue is, a Python lambda cannot include any statements; it can only contain an expression. Expressions and statements are different animals in Python. That's a fundamental issue.