Frequently, the first thought I have when I see projects is, "okay, neat, but why does this exist?", and the answer takes some digging. It's wonderful that in this example the answer is made so obvious.
Frequently, the first thought I have when I see projects is, "okay, neat, but why does this exist?", and the answer takes some digging. It's wonderful that in this example the answer is made so obvious.
hey, that describes my very first development job! i wrote a cross-platform tcl-based installer for a desktop application at the first company (a small startup) i ever worked for. it was really easy to write (i was literally 17 years old) and there were fairly solid libraries for doing windows-y registry-ish things and unixey install things too. one of the senior guys on the team took my code and integrated it into their cross-compiled build system and it spat out a very decent product that helped our users install the program on i think 3 or 4 different platforms (win95, linux/X, and solaris, possibly HPUX or some other weird platform). that was my very first significant contribution to any software project.
i seem to remember that at the time the shrinkwrapped installer licenses cost $10's of thousands for commercial use. it probably took about 60-80 hours of my time at $17.50 an hour... clearly a bargain.
Me too. Especially the comparison of tcl to their language:
set x [expr {[lindex $red $i] - [lindex $blue [lindex $green $i]]}]
vs
x = red[i] - blue[green[i]]
I had to work in Tcl early in my career...80 hours a week for a straight year, so I recognized that madness immediately.It's just bizarro lisp without the parentheses.
On the topic of expr, though, it can be avoided if desired in favor of Lisp-style prefix operators: http://www.tcl.tk/man/tcl8.5/TclCmd/mathop.htm
Not cherry picked, an "official" page describing lindex: http://wiki.tcl.tk/1481 Objectively compare that with most any other language's docs for lists/arrays/whatever. "Everything is a string" does have some downfalls.
All I meant is that it was clear from the context that an example was chosen showing a weakness of the language (relative to standard C-like syntax) and that it's not quite fair to judge the whole language based on that one example.
Tcl's incredibly simple syntax and lack of syntactic sugar are what lead to situations like that example. But those same things are also responsible for making the language Lisp-like and fairly homoiconic. You can do incredible things in Tcl thanks to its simple syntax which is amenable to macros and code generation.
Little wasn't a slam on Tcl, if you think that then you miss the point. Little is trying to bring people to Tcl. The Tcl ecosystem has a boatload of good stuff, people should check it out.
But many people are put off by Tcl's syntax, it's fine for glue, which is what Ousterhout intended, but it sucks for 300,000 lines of code. If you want to write big programs then perhaps some type checking could help you. And perhaps some familiar syntax might help. Little is for people that have to maintain a pile of code.
I'm aware of tsv package (shared variable), but this is just sharing scalar variables or arrays. You cannot share objects, procedures, namespaces, resources, etc - and that is the major reason for sharing memory across threads.
1) Application memory consumption grows more than it should, because same extensions have to be loaded several times in the same application, but in separate threads;
2) Resources such as images (or any other kinds), or OO objects, cannot be transferred between threads efficiently, the only way is to serialize them to scalar representation, which then can be passed through either tsv (mentioned above) variables, or through a message to another thread - then deserialize them there. Apart from precious time which it costs, you also make a full copy of resource/object, growing memory consumption even more.
For stuff that has to be fast, I generally reach for 'C', so I have not plumbed the depths of performance with sockets in Tcl.
Again, though, I drank the "everything is event driven" Kool-Aid years ago and it works for me.
is decent place to start. Then move on to
and there are all the Tk (GUI) APIs and libraries.
If you wade through that, or you get stuck, #tcl on freenode is a great resource.
Edit: #tcl told me to pass on this:
set j [ lindex $red $i ]
set k [ lindex $green $i ]
set m [ lindex $blue $k ]
set x [ expr $j - $m ]
I just finished skimming through the paper you have linked on the site and liked it quite a bit. It directly answered another question I had, which was what would it take to implement Lisp-style syntax in the same fashion as you did for C-style syntax? I'd normally talk myself out of ideas like that, but your paper is talking me into thinking about it more.
Thanks for sharing all of this!
I'm tickled pink that Little is on the front page of hacker news.
Ok, sounds reasonable. Except... now you have to hire another person to do language development/maintenance :)