document updated 16 years ago, on Feb 23, 2008
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.