Not really, but it's pretty close. Maybe it's because I'm using
Mono instead of someone's
commercial product, but
I'm really not happy with how the latest incarnation of my
languages
project is turning out. Granted, it's short: I'm at 158 lines right now,
and could probably trim that a bit, although it'll grow as I add the last
few needed commands (so far, the shortest complete implementation is the
Ruby
asynchronous
version). The problem is that the C# version of "asynchronous file I/O" is
completely different from what you'd expect coming from any of the other
languages I've implemented this in (that actually provide a language-offered
async handler): it uses threads. Not a terrible thing in and of itself, mind
you (heck, a few of versions I wrote for this little hobby project are done
using threads, specifically the old Java version before NIO became more
generally available). It's just not exactly what I was expecting, and made a
few things more complicated than they needed to be. It seems as though
is considered evil in the Windows world for some
reason. Okay, no problem, I'll implement it their way; that was, after all,
the point of the exercise...to really learn the idioms of the platform.
Doesn't mean I actually like it all that much, though. I was actually
surprised by going through this exercise; I'm still a big fan of
Python after this, but
Ruby really proved it's worth here,
and I was utterly amazed at how easy the
Tcl
version ended up being to implement (hear that, Prof. Dueck? one of your old
students actually liking Tcl! ;-)). I still hate
Perl, but less so than before (I still
think it looks like line noise when you're done writing something, though),
and the
PHP version still amuses the heck
out of me. The Java version ended up way more complicated than it needed to
be, but that's mainly because I wrote it before NIO; I've only started work
on a version using
, but I suspect it will turn out
much shorter and far less complicated. And, at the end of it all, the C
version is by far the most complicated of the bunch, due to the complete
lack of modern libraries of code that can be relied upon, and having to
reinvent the wheel everywhere. A good learning experience, all around.