Okay, so I'm just
minding my own business, when
suddenly one of the former
CRL employees (who now works at
Musicmatch) emailed me, asking me if I was interested in a job there. I declined, and we got into other conversations. For example, he had read my
Solace development diary, and he pointed out how much
SoLISP looked like
TCL. I told him that I couldn't see how it could be, since TCL is
imperative whereas
SoLISP is imperative-
functional. Then he said that TCL is more functional than I thought, and went into details why. He said that SoLISP's syntax was strikingly like TCL's, as well.
So I went and found a TCL tutorial (honestly, I'd programmed a little in TCL in the past, but not enough to really grok it).
Command:
SoLISP: cmd arg arg arg ...
TCL: cmd arg arg arg ...
Compound command:
SoLISP: command ; command
TCL: command ; command
Variable substitution:
SoLISP: $var
TCL: $var
Typeness:
SoLISP: everything's a string
TCL: everything's a string
Nesting structure:
SoLISP: (EXPR) for executed, undetermined for quoted
TCL: [EXPR] for executed, {EXPR} for quoted
(So that's a little different, at least :)
Execution model:
SoLISP: lazy string parsing
TCL: lazy string parsing with a lot of caching and function tables and stuff
I was not amused. All these years that I'd bashed TCL, and then I go and
reinvent it (and
badly) based on a
dream. I feel dirty. The contact said it was "
just desserts." :)
Oh, and TCL is very easy to integrate into existing systems. Now I'm glad I hadn't yet bothered to get arond to coding SoLISP - all I have to do is add in some database-backend and message-passing builtins (and my security model is already covered)...
At least this takes a huge burden off my shoulders. I just need to write a simple wrapper class for TCL, instead of a whole newfangled language...
I just realized, though, that a better title for this node would be {$SoLISP = $TCL}. :)