I was hired (a long time ago) to write a language for a Very Large Telco Equipment Supplier in Canada in order to support their automated regression testing effort for their digital telephone switches.<p>It was called, ingeniously enough, "T" (no, not <i>that</i> "T"). As far as I (and cursory Google searches) know, it was never released to the adoring public.<p>I used lex and yacc (half jokingly referred to as 'ick' and 'yuck') and K&R C for the compiler and VM.<p>The particular type of testing we were targeting involved writing test cases that would read/write over serial lines to a telephone switch's console program. Therefore, the language needed to have good serial/terminal I/O, and it needed to have amazing string/pattern matching.<p>I wrote two features that I am still particularly fond of:<p>- regexps were a built in type. Strings were written like 'hi there' and regexps were written like `hi ..ere` - supported standard unix regexps<p>- associative arrays. Lots of languages have these now, like python's dict<p>The cool thing about it was how we tried to allow strings and regexps have a polymorphic relationship at the language level. The statements:<p><pre><code> x == 'some string' or x == `some [^t]ring`
</code></pre>
would be valid for strings in x, though the regexp had other operators that didn't make much sense with strings. It got really interesting when we combined the regexps with the associative array:<p><pre><code> dict['hello'] = 4
dict['help'] = 2
dict[`he.*`] == [2, 4] # true</code></pre>