It's Like Déjà Vu All Over Again
"You could probably waste an entire day on the preceding links alone. But why take chances? We also give you Paul Snively..." — John Wiseman, lemonodor
The Sims. Ever wonder what the Sims could become if they set it up for massive multiplayer play? Total chaos. Totally huge. Add more sex, drugs, theft, lies, and nonprogrammed responses and you get a massive game. You could role play your life as a drug addict, serial killer, pregnant teen, terrorist, cop, worker bee, prostitute, media exec, teacher, etc. [John Robb's Radio Weblog]
Aaron Schwartz. Read this. Isn't Aaron 15? If I was his dad I would be very pissed. BTW: the season finale for NYPD Blue is about to start -- see you in two hours. [John Robb's Radio Weblog]
Hmmm. Where to start? This rests on some assumptions:
When Aaron mentions "drinking," he means that he was drinking alcohol.
Neither of Aaron's parents were present.
Aaron's parents were unaware of where he was and/or what he was doing.
Given that Aaron posted it on his weblog, how likely is it that he did anything that his parents wouldn't approve of? Given that he's traveling and speaking on invitation in the industry and is involved in standards efforts and is a prolific writer, isn't it rather obvious that he's unusually mature?
And finally, what business is it of ours anyway? If he didn't do anything wrong, he didn't do anything wrong. If he did, I strongly suspect that his parents did find out about it and dealt with it.
If the outrage is over the appearance that a 15-year-old consumed a lot of alcohol, then all I can say is, you'd better be prepared to chaperone your teen-agers to every party they go to.
11:41:13 PM
New Architect: Orbitz Reaches New Heights with Lisp as its secret weapon. The Lisp renaissance has begun! - The high-level algorithms are almost entirely in Lisp, one of the oldest programming languages. You're excused for chuckling, or saying "Why Lisp?" Although the language can be inefficient if used without extreme caution, it has a reputation for compactness. One line of Lisp can replace 20 lines of C. ITA's programmers, who learned the language inside and out while at MIT, note that LISP is highly effective if you ditch the prefabricated data structures. "We're something of a poster child for LISP these days," says Wertheimer. "Lisp vendors love us." [Roland Tanglao's Weblog]
The takeaway here is that there are problems to solve that you just do not want to try to solve with any of the currently-popular languages. ITA is tackling an incredibly hard problem and using one of the right tools for the job. Functional languages may indeed yet gain popularity as the pressure to do tougher and tougher jobs increases.
11:30:34 PM
Common Lisp is not, of course, the only Lisp. See DrScheme for an excellent Scheme development environment, perhaps in conjunction with The Little Schemer, an excellent, excellent text.
11:22:07 PM
I love all of the REST/RPC comments, but right now I'm going to talk about Python.
All of this "Python is JUST a scripting language" talk is a little bit wide of the mark. Consider Zope, MNet, Mailman, BitTorrent, 4Suite, cml2, gadfly etc.
Quite right. It's also worth pointing out that Emacs Lisp is a complete Lisp, but "just a scripting language" used to implement and extend Emacs. The discussion of Python that contends that Python is "just a scripting language" fails on the terms that this type of discussion almost always fails on, which is to define its terms.
The Lisp family of languages might be considered by many to be "scripting" languages because of an outdated impression that Lisp is interpreted and slow. This hasn't been true for over twenty years now. Lisp is still interactive, however. Perhaps that's another qualifier to determine whether a language is a "scripting" language or not. But note that there's no longer a connection between "scripting" and "interpreted."
People are not just using Python as script to glue other bits of code together. They are building new, interesting systems from scratch.
Also quite right. I should add at this point that in the "scripting" triumvirate of [Python|TCL|Perl], I would not hesitate to choose Python over the other two. True to form (for me), I find myself generally liking Lua and Ruby better than Python, however. But Lua and Ruby are nowhere near as popular, at least as of this writing. So on the whole spectrum, that puts Python solidly in the middle for me.
So as I wrote before, maybe it's just that Python is good enough to be worth criticizing.
Yes, Python's lambda is broken. But lambda is syntactic sugar which would not exist if it could be removed without screams from unreconstructed Scheme programmers.
IMHO, this is an abuse of the term "syntactic sugar," as syntactic sugar results in N language constructs where one would do, and in this case, the reverse obtains: you could just have a working lambda and get rid of the N. But this isn't the main point, as even Scheme has some constructs that, thanks to a complete lambda plus full upward continuations, it doesn't strictly need. So the question is how much sugar you prefer.
You aren't correct when you say: "the language has too many primitives" because of the lack of a decent lambda. Rather, lambda is deprecated because there are more readable ways to do everything it does in other languages. If you are still reaching for Lambda then you aren't thinking in Python yet. I seldom use it.
I'm certainly not in a position to claim that I'm thinking in Python. My problem is deciding whether I want to think in Python. Indeed, my question is: what's compelling about Python vs. any other language, but particularly a compact, expressive language like Scheme? That is, all of the good stuff that people tell me about sounds like stuff from the Lisp family, but not quite as good. And if the answer is merely "it's Lisp without the parenthesis," then thanks, and I'll go off and use Oz or Objective Caml, and no harm, no foul.
Since you are misjudging Python as a glue language, I think that your evaluation criteria are way off base. How could you at the same time gain new respect for C++ and then complain that Python isn't minimal enough. It's a fraction of the size of C++!
I didn't say I was gaining new respect for C++ as a minimal language, but rather as a multiparadigm language. C++ remains a big hairy mess, but at least it's become a big hairy mess that I can express things in using a variety of conceptual frameworks with the only significant mental anguish arising due to byzantine syntax.
C++ also wins on giving me the greatest amount of control over compile-time vs. runtime costs. No other language even comes close, in that regard.
You also imply that Python isn't "general" enough but don't go into any detail. Based on the types of stuff I've seen done with it, Python is extremely general. I've used video games written in Python, web sites build in Python, IDEs written in Python, web servers written in Python etc. How much more general do you want?
Mea culpa. I haven't written more on the subject precisely because I know my feelings at the moment are vague and ill-defined. They really are best summarized as: Python seems like a Lisp core with an Algol-derived syntax implemented as a pretty naïve interpreter. In other words, like Standard ML circa the mid 1980's. To me, given what I already know about other languages, it's hard to justify digging any further when I could be mastering Oz, Objective Caml, or Haskell instead.
Also, in my opinion, it is much more minimal than Ruby, and has many fewer special cases. How many different types of blocks and suites does Ruby have? What's the syntax for getting a reference to a method in Ruby?
I don't really mind a language having lots of constructs as long as the assignment of expressions to those constructs is relatively consistent. After all, I still like Common Lisp, and Common Lisp has, by some counts, seven namespaces. But I always know what types of things belong to what namespaces. In Python, it's the len()-as-function vs. method kind of stuff that rubs me the wrong way. It just feels, to me, not very consistent.
I disagree vehemently with the choice of whitespace-as-block-structure. -- so does everyone...for the first week.
This is the most interesting point, syntactically, to me, precisely because I love folding editors/outliners as programming tools (see Leo, also written in Python, for an excellent example of the genre). Once again, I have problems with it as a language construct as opposed to a tool construct.
I think that you need to give Python a serious try on a sizable project. I think that you will find that most of your complaints do not refer to real, substantive problems with Python. [YACCS Comments for It's Like Déjà Vu All Over Again]
You're probably right. OK, so if I put Python where I feel it realistically belongs on my list of languages to develop something beefy with, with an eye toward learning the language better, it unfortunately falls behind Oz, E, Objective Caml, Haskell, Erlang, Concurrent Clean, and Stella. I still perceive a problem here. But I'll happily concede that the problem isn't with Python per se.
11:11:44 PM
Hmm, if len() as a function annoys you, how do you feel about join() as a method?
Should all one-argument functions be methods?
First, John Wiseman was the one who made the specific comment about len(), but it happens that I agree with him. I would be inclined to make one-argument functions be methods, but I don't know that I would want it enforced by the language. The whole distinction between functions and methods bothers me a bit—and this is as true for C++, I should point out, as for Python.
Python doesn't rely on reference counting any more.
It has full cyclic garbage collection *plus* reference counting.
I helped make this happen. :)
So when does one happen, and when the other? Regardless, I'm glad to hear this.
Re method combination: this can be supported by Python's metaclass features.
Yes, a nice feature that Python shares with CLOS. But really, part of my argument was driving at something that Paul Graham wrote much more clearly about recently: by the time you get done improving Python, you've gotten another dialect of Lisp, but with more syntax and less performance.
An interesting point, epecially, as I acknowledged in the first place, real apps such as Mnet are being deployed in Python.
In the end, this comes down to taste, as I think will become clearer once I have time to respond to Paul Prescod, who I see has also been kind enough to add his voice to the discussion. More a bit later!
8:52:33 PM