Java and C#
Java and C# are more recent languages which have learned from the mistakes of the past. They both have GC, neither have pointers, and they both support object-oriented programming. This makes programming in these languages comparatively non-painful, and they scale well. Both also have interesting mechanisms for achieving platform independence (which is beyond the scope of the present discussion). C# is part of the .NET framework, which (in theory) permits a considerable amount of inter-language interaction; this is in my opinion a huge win, but is also beyond the scope of the present discussion. Both languages tend to be quite verbose, which is off-putting to many people (including me), but that's not that big an issue. C# also contains an interesting mechanism for using unsafe code (i.e. code which uses pointers and doesn't use GC) but encapsulated in modules specifically marked "unsafe" (an idea borrowed from the Modula-3 language, which is now sadly all but defunct). If you feel you can't live without the ability to program with pointers, but you don't need them for most of your code, that's the right way to go.The abstraction level of both C# and Java is mediocre; it's much better than C, somewhat weaker (!) than C++, and not nearly as good as languages that support both object-oriented and functional programming (such as Lisp and Ocaml). Therefore, I find programming in these languages to be pretty boring and tedious. Many of the scalability features in these languages are not, strictly speaking, part of the languages at all but of the environment(s) built up around the languages. For instance, the support for components, versioning, packaging and documentation generation are all features of the environments. I hope we will soon start to see these kinds of meta-features in better languages than Java or C#.
No comments:
Post a Comment