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}. :)