TCL is ahead by a nose at this point with Unicode support baked in (vs. using a library) and file system handling built in (again vs. using a library).
TCL is ahead by a nose at this point with Unicode support baked in (vs. using a library) and file system handling built in (again vs. using a library).
Tcl's file system interface is definitely an advantage if you're trying to avoid third party libraries. However, depending on what you need to do with Unicode strings, Lua's strings are "8-bit clean" and have no difficulty storing Unicode characters; Lua's string functions (the pattern-matching functions in particular) aren't Unicode aware.
Still, Tcl's anonymous functions aren't quite what many people consider to be lambdas:
% set inc {x {expr $x + 1}}
% apply $inc 1
2
% apply $inc 1
2
% $inc 1
invalid command name "x {expr $x + 1}"
% inc 1
1
This works fine with `apply`, but if you treat it like a normal function, it does some strange things. Conversely, functions that are defined with `proc` aren't compatible with `apply` unless you wrap them up.I'm not saying it's inadequate, just that the anonymous functions don't quite work how you expect lambdas to work.
One thing to note though, your final [inc 1] has nothing to do w/ $inc. In the interactive REPL (which I'm assuming you used), Tcl will (by default) essentially autocomplete commands if it can, and [inc] completed to [incr], which is "increment". [incr] adds (by default) 1 to the named variable and returns its result. In this case, the variable name happens to be "1", later accessible via "$1", or [set 1], for example.
[edit: I erroneously initially described the "1" in [incr 1] as the integer constant 1; @groovy2shoes reply below reflects my original error. This does go to show another neat feature of Tcl: no keywords.]
I find Tcl's command model interesting because it leads to a very tiny semantics. A few years ago I spent a lot of time thinking about how it could be extended to have lambdas, and I couldn't come up with a way that wouldn't break the command model in some way or another. They aren't something Tcl needs to have, I just thought it'd be convenient. (Tcl's evaluation model allows you to simulate higher-order procs, which, along with `apply`, covers many use cases of lambda).
kamloops$ tclsh8.6
% info commands up*
update uplevel upvar
% uptime
7:17PM up 1 hr, 7 users, load averages: 0.06, 0.12, 0.17
% ls fu
ls: fu: No such file or directory
child process exited abnormally
% ls -ld fu
ls: fu: No such file or directory
child process exited abnormally
% ^fu^foo
ls -ld foo
-rwxr-xr-x 1 joe users 7300 Mar 23 2011 foo
% history
1 info commands up*
2 uptime
3 ls fu
4 ls -ld fu
5 ls -ld foo
6 history
% !2
uptime
7:20PM up 1:03, 7 users, load averages: 0.13, 0.12, 0.16That explains why X11.app launched that one time I forgot a `$` before my `x`...
kamloops$ cat ls.tcl
#!/usr/pkg/bin/tclsh8.6
ls foo
kamloops$ ./ls.tcl
invalid command name "ls"
while executing
"ls foo"
(file "./ls.tcl" line 3)
kamloops$ tclsh8.6
% source ls.tcl
invalid command name "ls"
% ls foo
foo
%
Now, back to your regularly scheduled Lua topic :) $ tclsh
% set a set
set
% puts $a
set
% $a b 9
9
% set b
9
% set set set
set
% $set set
set
% rename set foo
% foo set
set
% foo a
set
% foo a 9
9
% puts $a
9
%
[1] http://news.ycombinator.com/item?id=3536419[edit: formatting]
I don't need speed as I'm doing offline processing and not worried about lambdas at this point. The unicode is important as I am looking to take Greek and Hebrew text and process it.
If that's how it ends up, then so be it, but I'll try TCL first and know that I have Lua as a reasonable fall back plan.
The bad thing about Tcl is probably its library support. It has an extension mechanism, but for a lot of "contemporary" projects (web etc.), you're actually more likely to find working Lua "Rocks" than tcl modules.
jim: http://jim.tcl.tk/
But as a language, Tcl will allow you to experiment a completely different way of thinking. Lua is neat but not so different from what you already know.
what i do not use tcl for is: web. unfortunate lack of a framework.
it has good support for downloading stuff, ftp, http, bignums and algorithms if needed.