Okay, okay, I'll bite. Hear me, before the rotten tomatoes hit: I. like. TCL.
In fact, I'm going to go out on a dangerous limb and say that complaining about the [expr] syntax - which seems to be his only concrete complaint in the whole article - reminds me of nothing so much as saying, "But Lisp is horrible - look at all those parentheses!"
You've heard the trope that languages, as they get more advanced, begin to resemble Lisp? PG reckons we've seen every other feature but macros, but I beg to differ. TCL is the only other language I've ever used where I could be coding, spot a common pattern, and just define a first-class construct that lets me go:
Sure, TCL lacks a heap, and garbage collection, which make it untenable for big programs. But if there's one thing Lisp should have taught you, it's that an initially ugly syntax is often hiding something truly golden.
Have you worked with the ACS (ArsDigita Community System), and/or with AOLserver? Or have you and the ACS simply converged on the obvious idiom?
ACS code looked a lot like what you just typed. In the hands of a bunch of Lisp programmers from MIT, Tcl could really be made to sing. It had, at best, the same relationship to Lisp that PHP has to Perl... but IMHO it was a much better Web programming language than PHP, if only because the designers were a bit more careful to avoid inane inconsistencies.
The reason why ACS was any good was because AOLServer was an awesome multithreaded webserver with a great API. Tcl was only there because it was the easiest language to embed into a multithreaded app at the time (now that distinction goes to lua). I'm not sure the Tcl code in the ACS was a good example of anything... in places it was as bad as the worst Perl script you have seen. (I know, I probably wrote 20% of the codebase.)
I'm not sure the Tcl code in the ACS was a good example of anything...
Pragmatism?
And, yes, I understand that nobody really chose Tcl at the time... nor would anyone choose Tcl again. It was more a matter of lemons and lemonade. And not always very tasty lemonade. ;)
I guess pragmatism is valid, but there were quite a few half-baked modules tossed in there just to make it look like the toolkit was more comprehensive than it really was. Also, I think openACS expunged them, but in the initial releases at least 25% of the code was dedicated to Philip's rambling comments about how a particular function would be much more elegant in common lisp.
there were quite a few half-baked modules tossed in there just to make it look like the toolkit was more comprehensive than it really was.
Has there ever been an open source toolkit that didn't look like this? I assure you that Drupal is just the same, only the half-baked modules are numbered in the thousands...
Your statement about Philip's rambling comments is both ROTFL-funny and 100% believeable. ;) Hey, just because you're being a pragmatist doesn't mean you can't complain about it at great length...
Actually, that was a custom app built on the tcl httpd (whose procs-as-paths structure was a revelation to me at the time). I also did some fun things like a Java-style try/catch/finally system, which was useful when playing with xmlrpc. (Plus, the rest of that distributed system is in Java, so it felt like a nice idiom).
I gently dispute your "bunch of Lisp programmers from MIT" characterisation - but only gently, because I know what you mean. TCL can give you The Macro Enlightenment (aka, "Oh, that's what 'code is data' means") before ever seeing Lisp - after which, of course, Lisp macros feel conceptually familiar - but the latter is definitely n times more powerful.
I had to use Tcl for a large scientific software system and grew to like its strengths. There's something to be said about an overly simple syntax and nice coupling to C.
So I learned Lisp long before either Tcl or a "pop infix" language. Common Lisp has it all, and then some.
I learned Python and Tcl at roughly the same time. It looks to me like Python and Tcl got in a big tug-o'-war fight over Lisp's features, and the rope broke and each got half.
Python ended up with the data structures, but not the syntax. Tcl ended up with the syntax, but not the data structures. And advocates on both sides scream "how can you do anything without #{feature_x}?".
And I say "ah, Lisp has both!", and everybody gets together and says "oh, shut up, you".
Tcl isn't that bad. We've got a few web apps running quite happily on AOLServer. In the late 90s/2000 AOLServer was a country mile ahead of everything else.
Am I the only human being alive that reads articles like these and has next to no experience programming? I read the whole thing and got the gist of it, but I'm not a programmer. Still, I find rants, tips, and other things of this nature enthralling reads.
That might lead you down the path of <gasp> learning to program, or worse liking programming, or even worse yet changing jobs so that you program full-time.
Pretty much the path I took. Though, seems to be working out, particularly with some startup plans slowly taking shape.
Tcl had a bunch of things going for it that made it an excellent embedding language: a lightweight runtime, simple, consistent semantics, and (for the time) an excellent C API.
If you'd like Lisp without parens, how about Logo?
Logo seems like Forth backwards: prefix instead of postfix; neither language needs parens for function calls because they both know how many arguments each function call uses.
In fact, I'm going to go out on a dangerous limb and say that complaining about the [expr] syntax - which seems to be his only concrete complaint in the whole article - reminds me of nothing so much as saying, "But Lisp is horrible - look at all those parentheses!"
You've heard the trope that languages, as they get more advanced, begin to resemble Lisp? PG reckons we've seen every other feature but macros, but I beg to differ. TCL is the only other language I've ever used where I could be coding, spot a common pattern, and just define a first-class construct that lets me go:
with-db-transaction conn { select_1_or_error $conn "SELECT ..." ... }
Sure, TCL lacks a heap, and garbage collection, which make it untenable for big programs. But if there's one thing Lisp should have taught you, it's that an initially ugly syntax is often hiding something truly golden.