[PLEASE MAKE SURE YOU ALSO GET THE tcl-discussion FILE]

To: Glenn Vanderburg <glv@utdallas.edu>
Subject: Re: Tcl vs Perl 
In-reply-to: Your message <199508152030.PAA04739@utdallas.edu> of Tue, 15 Aug 95 15:30:33 CDT.
References: <199508152030.PAA04739@utdallas.edu> 
Date: Tue, 15 Aug 95 14:33:26 MDT
Message-ID: <17588.808518806@mox>
From: Tom Christiansen <tchrist@mox>

> > If you'd really really like to see my dirty laundry list on 
> > the language, I'll send it to you.

> Actually, I would.  I suspect I know most of the things you'll mention, 
> but I would be interested to see what you think.  (I certainly learned a
> lot from your csh paper, although it didn't convince me ... I had already
> been convinced about csh long ago.)

here's my rough draft, never really fleshed out.  errors and omissions
welcome.  someday i'll post this.

--tom

tee cee ell is merely a string substitution language in a lot of ways.
here are some of my rags on tcl.  i know their answers and i don't 
like it.

* there is no 1stclass citizen besides a string, and all else is a hack.

* how do you pass things?  you have to use PASS BY NAME and even then maybe
play horrid scoping games.  this an evil that all users of algol68 have
long since repented of.

* why are associative arrays broken?

    set array("some string value") "another string value"

because the idiot lexer passes the wrong thing to set.

* why is EVERYTHING wrapped in catch/throw?  

* why is eval so dangerously prevalent?

* why can't you distinguish between strings and numbers? 

* why are numbers broken?  why when i read in east
coast zip codes do the leading 0s screw me up? 

* why can't you say:

    func_taking_list [ func_returning_list ] 

because things don't really return lists. they return strings.
you have to say

    eval func_taking_list [ func_returning_list ] 

* why isn't it 8 bit clean?

* why don't you have proper namespace protection?  why don't
you have closures and lexical variables and dynamic variables?

* why don't you have proper function pointers?

* what's so horribly wrong with 

    set $$something "value"

* why can't i comment out code intuitively:

    while { $old_test }  {
    #while { $new_test } {
	func
    }

* why can't i put braces where i want to?

    if { [ condition 
		"that's very long"
		"with any args
	 ]
    } {

    } 


* why can't you access arrays intuitively?  why must you use
lappend?

* why is there order(n) access time on lists?  why must all
O(n) algorithm thus turn into O(n**2) and O(n**2) thus
become O(n**3)?  

* why are you forced to pass string instead of real functions?

* why do runtime errors popup so late rather than 
compile times errors much earlier?
