Linked by Thom Holwerda on Thu 14th May 2009 09:43 UTC
General Development Microsoft has come one step closer to delivering a parallel programming language to developers. On May 8, Microsoft made Axum, the company's foray into parallel programming, available on its MSDN DevLabs portal. Axum is a .NET language for building parallel applications. According to a Microsoft description, Axum "is a language that builds upon the architecture of the Web and principles of isolation, actors and message-passing to increase application safety, responsiveness, scalability and developer productivity."
Permalink for comment 363661
To read all comments associated with this story, please click here.
RE[2]: Ugly
by tuttle on Thu 14th May 2009 16:21 UTC in reply to "RE: Ugly"
Member since:

"Microsoft does not have any hygiene when it comes to introducing new language features. Whenever they think some syntax candy is a good idea, they just add it to the language.

Most language features are around bringing down the verbosity of the language, which IMO is the only way a static language can hope to compete in the long run with dynamic languages.

There are areas where statically typed code will always be superior. But in general I agree that verbosity should be reduced. Static typing does not have to mean lots of boilerplate code.

But it has to be done right. Adding language features that have only a limited application domain is dangerous for a general purpose language like C#. I think making the syntax of the language extensible like lisp, scala, boo, nemerle and various other languages do is the better, more scalable approach.

"Just look at the mess that is C# 4.0. C# started as a decent programming language with some advantages over java. Nowadays it is just a grab bag of unorthogonal syntax features that do not work seamlessly with each other.

Examples? I think being able to declare a type to be late bound in a statically typed language to be exceedingly cool.

I think that dynamic is an atrocity. But that is just one example. My biggest complaint is that most recent (since 2.0) extensions are non-orthogonal.

-For example, generics do work with only a small subset of the language features. You can not use static methods, operators or constructors with parameters from generics. This makes generics basically useless for more complex applications than collections.

-There are various things that behave like a function and are implemented as functions on a MSIL level: static methods, instance methods, constructors, property getters, property setters. But only two of those (static and instance methods) are compatible with delegates. To create a delegate pointing to one of the other quasi-functions (constructors, properties), you have to create an adapter.

-There are extension methods, yet no extension properties. Why?

-Various new language features discourage factoring repetitive code into methods. For example the result of an implicitly generated type can not be passed to a method other than as an object since its type does not have a type name.

-The new property and collection initializer syntax encourages writing mutable classes. As do many other new language features. And we all know that the single most important thing when doing multithreaded programming is to use immutable objects as much as possible.

-Scala and other modern languages generate equality and hashcode functions for immutable objects. In C# you have to do all this yourself. And not even the collection classes override equality and hashcode.

"If you want to see how to do message-passing based concurrency beautifully without having to introduce a dozen new language constructs, take a look at scala actors. They are implemented as a library, yet they are very concise to use.

I find it odd that you criticize c# for being a "grab bag of language features", but you like scala. Its not that I dont like scala or anything (because I do, a lot), but if you were to say something bad about it, it is that the complexity is too high due to the amount of language features it has.

But most language features of scala are based on a very small core. And the type system is much more refined. Just leaving out static methods makes everything so much nicer. (I hope that they will remove constructors next :-)

Reply Parent Score: 2