NOTE: This is not meant to be a comprehensive overview of each language. It's only meant to hilight points that I think are most noteworthy. There are *certainly* points I've completely missed, or have misjudged their importance. If you're looking to start a language war, look elsewhere. === Perl [many years of experience] === + CPAN http://en.wikipedia.org/wiki/CPAN#The_CPAN.27s_Influence - unnecessarily complex syntax for dereferencing (said to be fixed in Perl6, if it ever comes out) (not a major downside, but it *is* a statistically significant stumbling block when teaching the language to new people) - multi-threading has long been "will be available Real Soon now" === Javascript [a few months of experience] === + JS-the-language is more robust than people give it credit for... something like 1/3rd of the code in Mozilla is Javascript, rather than C. (comparing the gziped .exe size to the gziped .js size) - JS-the-API is why people wince when they think of Javascript... the APIs provided by Firefox/MSIE/Opera differ in both subtle and large ways, making it a pain to try to code cross-browser apps (though the situation is improving as time goes on, and things like Google Maps demonstrate what you can do when you try to push the limits (and have large development resources)) === Lua [several days of experience] === + A rather simplified grammar. While it's a downside in that it provides almost no syntactic sugar, it's a refreshing counterpoint to Perl's golf contests. (and, given that Lua's primary goal is to have as small of a footprint as possible, it's an entirely appropriate design decision) + I've only briefly browsed through the C-API-exposure side of things, but it really does look like it's an excellent way to add scripting onto any C program. + Used in LOTS of performance-conscious games. + Though aiming for a small footprint, it still considers regexps valuable enough to include in the standard library. === C# [several weeks of experience] === + It's Perl/Python/Ruby, with static typing, and some of the lower-level nitpicky mentality of C, which is appropriate for shrinkwrap code (eg. when footprint and performance matter) (though this nitpicky mentality doesn't lend itself to the kind of programs I usually write) + The system library is somewhat cleaner... it isn't bogged down with some of the baggage that Java has accumulated (though I'm sure it will accumulate a similar amount as the years pass) === AutoHotkey [a few months of experience] === - Suffers greatly from baggage from its early history. There are TWO DIFFERENT forms of several very basic language features, that actually act differently (they're not syntactic sugar either, quite the opposite, their existence is a clear detriment): - assignment: "=" and ":=" - conditionals: "if (expression)" and "if expression" - interpolation: "%varname%" and "varname" (which one is required depends on context) - has no true arrays or variable references; instead allows variable interpolation on the *left* side of assignment to allow assigning to a dynamic variable name + on the other hand, the system library is obviously outstanding enough to make it worth trudging through the awkward syntax for. The GUI-event-injection functionality is robust enough that everyone from game-hackers to sysadmins rely on it.