Poor C++ programmers! First they got loads of new keywords (Managed Extensions to C++), and now they ‘invent’ the C++/CLI which deprecates all previously introduced keywords.
And look at that: virtual R^ Clone() new;
That does not even look like C++ to me – more like Delphi. Anders Hejlsberg LOVES introducing keywords and obscure syntax… *sigh*
Anders has nothing to do w/ the C++ team, he’s architect on the C# team. It’s also well known that VC8 is 97% ANSI compliant, you don’t have to use any of the MS extensions (managed or otherwise) if you don’t want to. do yer homework before posting like that.
microsoft is very close to the inflection point. most companies are waking up to realize “dotnet” doesn’t actually solve any business problems. it is just “windows api 2.0” — i.e. further microsoft lock-in, further microsoft robbery, etc.
microsoft can change c++ all they want … but they will only lose customers quicker the more microsoft lock-in “features” they add.
it’s time for a change. the world knows it. microsoft will soon know it.
This begs the question of why does microsoft has to break
all their old API’s every 1.5 to 2 years ?
It’s expensive to invest so much time writing a project, only to have to reivent it to add a few features or when the new tool comes out. Why can’t they invent templates that allow seamless import of old projects ?
I have abandoned using Ms VB for major projects simple because the AAPI changes so much it’s painful keeping things up to date.
Since when did Mono provide a c++ binding for the CLI? The article is for people who wrote apps using Managed Extensions and want to migrate to the coming ECMA standard.
“That does not even look like C++ to me”
Obviously you’ve never overloaded an operator.
“microsoft can change c++ all they want … but they will only lose customers quicker the more microsoft lock-in “features” they add.
MS hasn’t “changed” c++ at all. The ISO standard is still very much intact. C++/CLI is a new ECMA extension designed to be compatible with the original standard. You can still use ISO C++ if you choose to.
“This begs the question of why does microsoft has to break
all their old API’s every 1.5 to 2 years ?”
What, exactly, is broken? I use VC++ 7.1 full time @ my job and most of my work is still done using MFC, ATL, and occasionally Windows API. Just because they’ve given developers another way to get the job done doesn’t mean the “old way” has been broken in any way. Seriously. What’s been broken? Do you actually make your living coding against MS APIs or were you just shooting off at the mouth?
C’mon people! A little more honest, informed conversation and a little less slashdot wannabe postering, please!
uh, “managed” c++ is a proprietary, patented, vendor-specific extension to c++.
i also use vc++ 7.1 all day and i really wish there was a “turn off all the microsoft crap” button that would turn the ide into a c++ programming ide, not a microsoft-windows-dot-net-in-your-face programming ide.
for example, when you try and look something up in the online help, vstudio usually hides the portable crt stuff from the programmer.
and microsoft has stopped putting any effort into the crt, instead focusing solely on dotnet api’s.
i get the feeling visual studio is set for a fall as it has become so incredibly bent.
“and microsoft has stopped putting any effort into the crt, instead focusing solely on dotnet api’s”
So then explane me please why they rewrote almost all of the string manipulation functions in order to reduce the possibility of buffer overflows. MS didn’t abandon the CRT, but the CRT is mature and doesn’t need that much maintanance where else .NET is fairly new.
Actually, I still sort of like VStudio. The popup help is useful when starting out with MS APIs and working on a new large project. The contextual help carryover from environments like the old Turbo stuff was nice too. It’s too bad that other OSes don’t have IDEs that are quite as easy to look things up in.
The major drawback that I’ve had with VStudio is that it’s GUI(visual/RAD) designer isn’t quite as good as others, but part of that problem is that I really don’t care for MDI.
C++ CLI: yep no one else hase it, but maybe pnet will eventually or a more C++ like CLI implementation. (After all they already support plain C, and it looks like there may be a Java implementation coming as well as a hoard of scripting languages, and hopefully one of the “free” Pascals(i.e. either fpc or GNU Pascal).)
The main drawback with the “free” .net implementations is the lack of Windows Forms unless you are on x86. I just wonder how complete pnet’s will ever be considering the stage at which WINE is, which is a comparable project.
This is the biggest change to C++ in Windows/DOS since it first came out in the 80’s. Microsoft is doing things quicker than the C++ Committee, which means that C++0x, the next generation of C++, will have to do a lot of catch-up in areas such as garbage collection, VM-compatibility, concurrency. I do hope that things will turn out for the better with C++.
Actually, Microsoft’s new extension syntax is not bad, and since MSVC is one of the most standard compliant C++ compilers, you are given the choice to use straight ISO/C++ or not (as a previous poster pointed out), so I don’t see how anyone can complain about those extensions being bad. If I need Linux/UNIX portability, I would simply not use it.
But on the other hand, isn’t it great to have the flexible choice of using garbage collection for your C++ classes when it makes sense, and using normal new/deletes where it doesn’t? When the other extras are put in there, you can’t say that Microsoft are off track. After all, they have the right to do things in their way.
All of the software in my company is ported to Linux, except where it doesn’t make sense (i.e. strictly Windows system stuff) so the availability of those extensions just adds more choice for me, and is not bad at all.
Anononymous said:
> The major drawback that I’ve had with VStudio is that it’s GUI(visual/RAD) designer isn’t quite as good as others, but part of that problem is that I really don’t care for MDI.
I agree that it is a major drawback. It lacks a modern GUI tool unless you are using C# and VB# with WinForms. If you are using C++, you are stuck, WinForms or Win32. And no, manual UI coding doesn’t count as RAD , nor does the old Resource Editor.
I use C++ and would like Microsoft to provide a C++ GUI in the spirit of C++ Builder,
but one of their officials long ago said that they have consciously avoided doing that in order for
VB to be a viable platform. Microsoft and Borland divided areas, but Microsoft knew it continue to dominate with it the new .NET (which Borland follows right now, and information about the next C++ Builder will be announced in December AFAIK).
Anyone know if Microsoft has an intention to do a XAML visual RAD designer? I surmise that since XAML separates layout from program code, now there is, how to say, “less than no reason” for Microsoft not to support all .NET supported languages in a visual designer, including C++. Unless they again convolute it on purpose in favor of VB and C#.
Whatever happens, things are getting interesting in C++ world.
The IDE isn’t as “in-your-face” as you would have us believe. If you start an ATL-based project, for example, you’ll never see any sign of .Net from the IDE. The same holds true for MFC.
And, yes, MS is continuing development of the MFC & ATL libraries. VC 7.x saw many an enhancement over the previous version.
“”managed” c++ is a proprietary, patented, vendor-specific extension to c++”
Yes, “mangaged” is proprietary, Windows-specific. If you don’t like it, don’t use it. Nobody is goint go *make* you write your C++ code to the .Net apis. As I said in my earlier post, ISO C++ is still available to you. .Net is just another way to do what we MFC developers have been able to do all along (though .Net does make these things an order of magnitude easier)
I would point out, however, that its next to impossible to use any vendor’s tools without running into their own proprietary vendor-specific “extensions”. That’s just the way it goes.
“on the other hand, isn’t it great to have the flexible choice of using garbage collection for your C++ classes when it makes sense, and using normal new/deletes where it doesn’t?”
Very cool indeed! What’s really cool, IMO, is to be able to expose .Net to legacy (VB even) apps by writing your interfaces using ATL and your implementation classes using the .Net bindings. It can be the best of both worlds wherein you get the easier, more modern platform for new development w/o having to throw away a substantial investment in yesteryear’s tech.
hmm isnt c++ bloated enough even in the standard version ???
I mean nearly nobody really gets his mind arround all the template stuff … (for example). why isnt microsoft extending it via librarys (which should be the prefered way … )
* see the boost librarys for example
* (or the ‘Boehm-Demers-Weiser conservative garbage collector’ if you want garbage collection…)
the core-language should be as small and simple as possible imho
ps for sean:
>> “That does not even look like C++ to me”
>>
>>Obviously you’ve never overloaded an operator.
maybe he has seen to many bad examples for the use of overloaded operators
“Anyone know if Microsoft has an intention to do a XAML visual RAD designer?”
Yes, it’s similar to the MVC model currently used in ASP.NET (i.e. when you drop a control on a page, the necessary tags are generated behind the scenes for you). Dragging a control onto the page will generate the necessary XAML tags for you, unless you want to do it all by hand (intellisense will support XAML). You brought up an interesting question about XAML in C++; I’m not sure if C++ will support it or not. We can only hope…
@slom
“the core-language should be as small and simple as possible imho”
if you want something small and simple, then C++ is probably not the way to go. Look into Smalltalk or Lisp 🙂 That being said, the VC compiler is pretty well known to be the best C/C++ compiler for the Windows platform, and as everyone (including myself) has already stated, if you don’t need to use certain extensions, then don’t. VC will compile straight ANSI C/C++ with no problem whatsoever, and produces highly optimized/very fast code.
Yes, that is the other great thing! All the “legacy” code sees is an old-style COM object. Good that you commented!
@slom:
Why do you think C++ is bloated? Again, you may not use templates and stuff if you don’t like it.
* I agree that the the Standard C++ library should be extended a lot. Actually some people working on Boost are in the C++ committee.
* The Boehm-Demers-Weiser conservative garbage collector’ is just that, a conservative i.e. a restricted collector, so it is an inefficient one in comparison with the .NET or Java collectors. This is because C/C++ has pointers can be casted to anything, so that you don’t really know what they point to. You can have assistance from the compiler but it is computationally inefficient in comparison with languages that are designed without C-style pointers.
If you read the article, you will see that they evade those
in order for managed C++ classes be a first-class .NET objects (bolding is mine). You can see how they are allowing the use of a the high-performance .NET garbage collector with C++:
“There are a number of pointer operations, such as casting and pointer arithmetic, that are disallowed for objects stored on a garbage collected heap. This lead to confusion among users, and we believe a separate token better captures the notion of a CLI reference type.”
I’ve never understood why you’d use Managed C++, targetting Windows, when you’ve got C# available. It seems like a lot of pain and ugliness with no clear advantages. A C++ (or Java) developer can pick up C# in an afternoon…
the advantage is that C++ is the only “.Net-supported” language that can run on the native and managed heaps simultaneously. See some of the comments above about exposing .Net functionality as a COM object (kind of a reverse interop) as an example. You simply cannot accomplish the same thing with C# or VB. So the issue isn’t whether we can learn C# quickly. I’ve used C# a few times — at times its nice. The issue (at least for myself) is that I’d rather not sacrifice the power and flexibility absent in the other .Net languages.
>> Why do you think C++ is bloated? Again, you may not use
>> templates and stuff if you don’t like it.
Because, one very often heard advise is that a good c++ programmer should restrain himself to some basic features of c++ ( at least i have read it quite some time)
Because code is (should be ??) read more often than written, so it is important that other people understand it. I have no problems with normal use of templates, but there are uses i just dont understand (see template metaprogramming stuff)
Ok , back on topic:
imho this IS NOT C++ , in the same way that objective-C is not C. It’s as simple as that. ( beeing c++ (from the point of the language) should be defined as this programm can be correctly processed by every c++ compiler and not by the compiler that can compile this language x is also able to compile c++, therefore x must be valid c++)
Maybe thats the main point i have with that (i know that they call it c++/cli, but somehow that still gives the impression that this is c++, isnt it )
towards the design decisions:
i see your(and seans) point, why it is ‘good’ to have c++ integrated into .net . i also knew of the limitations of for example the Boehm-Demers-Weiser gc, and it was in no way my intention to say that this is the perfect solution.
BUT what i wanted to say is that the way the Boehm-Demers-Weiser gc is integrated into c++ is a much better way than providing a pseudo c++ whith once again a new way to reference your classes
(which leaves us with: normal (ie placed on the stack), c-style pointers, c++-style references and finally .net-style “hats”. throw const and static into the mix and than tell me again with a strait face that this is not TOO complicated. the same goes for object creation (malloc,new,gcnew))
and all that despite the fact that c++ already has a common built in way to change memory allocation, in overiding new and delete (even on a per class base).
why dont use that and derive all managed classes from ie. dotnet::gc_managed ??
why
new string^ mystring
instead of
new gc_handle < string > mystring ??
instead we reinvent the wheel, and build this bastard(imho) of a language.
ok this is getting to long
disclaimer: take everything i said with a big grain of salt, as im neither a language designer, nor do i have great experience with .net. On the other hand please educate me if you can
Poor C++ programmers! First they got loads of new keywords (Managed Extensions to C++), and now they ‘invent’ the C++/CLI which deprecates all previously introduced keywords.
And look at that: virtual R^ Clone() new;
That does not even look like C++ to me – more like Delphi. Anders Hejlsberg LOVES introducing keywords and obscure syntax… *sigh*
Anders has nothing to do w/ the C++ team, he’s architect on the C# team. It’s also well known that VC8 is 97% ANSI compliant, you don’t have to use any of the MS extensions (managed or otherwise) if you don’t want to. do yer homework before posting like that.
This is what happend when you develop with a progrmming language that ms is the only one in control.
Why, could they save money? There is no C++ Compiler for the CLI on an other platform then .NET.
And when did Microsoft start controlling C++?
microsoft is very close to the inflection point. most companies are waking up to realize “dotnet” doesn’t actually solve any business problems. it is just “windows api 2.0” — i.e. further microsoft lock-in, further microsoft robbery, etc.
microsoft can change c++ all they want … but they will only lose customers quicker the more microsoft lock-in “features” they add.
it’s time for a change. the world knows it. microsoft will soon know it.
This begs the question of why does microsoft has to break
all their old API’s every 1.5 to 2 years ?
It’s expensive to invest so much time writing a project, only to have to reivent it to add a few features or when the new tool comes out. Why can’t they invent templates that allow seamless import of old projects ?
I have abandoned using Ms VB for major projects simple because the AAPI changes so much it’s painful keeping things up to date.
Wally
boost
“they can save money by using Mono”
Since when did Mono provide a c++ binding for the CLI? The article is for people who wrote apps using Managed Extensions and want to migrate to the coming ECMA standard.
“That does not even look like C++ to me”
Obviously you’ve never overloaded an operator.
“microsoft can change c++ all they want … but they will only lose customers quicker the more microsoft lock-in “features” they add.
MS hasn’t “changed” c++ at all. The ISO standard is still very much intact. C++/CLI is a new ECMA extension designed to be compatible with the original standard. You can still use ISO C++ if you choose to.
“This begs the question of why does microsoft has to break
all their old API’s every 1.5 to 2 years ?”
What, exactly, is broken? I use VC++ 7.1 full time @ my job and most of my work is still done using MFC, ATL, and occasionally Windows API. Just because they’ve given developers another way to get the job done doesn’t mean the “old way” has been broken in any way. Seriously. What’s been broken? Do you actually make your living coding against MS APIs or were you just shooting off at the mouth?
C’mon people! A little more honest, informed conversation and a little less slashdot wannabe postering, please!
Xfce is using a Standard C++ library when it reaches version 4.4.
uh, “managed” c++ is a proprietary, patented, vendor-specific extension to c++.
i also use vc++ 7.1 all day and i really wish there was a “turn off all the microsoft crap” button that would turn the ide into a c++ programming ide, not a microsoft-windows-dot-net-in-your-face programming ide.
for example, when you try and look something up in the online help, vstudio usually hides the portable crt stuff from the programmer.
and microsoft has stopped putting any effort into the crt, instead focusing solely on dotnet api’s.
i get the feeling visual studio is set for a fall as it has become so incredibly bent.
“and microsoft has stopped putting any effort into the crt, instead focusing solely on dotnet api’s”
So then explane me please why they rewrote almost all of the string manipulation functions in order to reduce the possibility of buffer overflows. MS didn’t abandon the CRT, but the CRT is mature and doesn’t need that much maintanance where else .NET is fairly new.
“i get the feeling visual studio is set for a fall as it has become so incredibly bent.”
The fact that you still use it speaks for itself.
Actually, I still sort of like VStudio. The popup help is useful when starting out with MS APIs and working on a new large project. The contextual help carryover from environments like the old Turbo stuff was nice too. It’s too bad that other OSes don’t have IDEs that are quite as easy to look things up in.
The major drawback that I’ve had with VStudio is that it’s GUI(visual/RAD) designer isn’t quite as good as others, but part of that problem is that I really don’t care for MDI.
C++ CLI: yep no one else hase it, but maybe pnet will eventually or a more C++ like CLI implementation. (After all they already support plain C, and it looks like there may be a Java implementation coming as well as a hoard of scripting languages, and hopefully one of the “free” Pascals(i.e. either fpc or GNU Pascal).)
The main drawback with the “free” .net implementations is the lack of Windows Forms unless you are on x86. I just wonder how complete pnet’s will ever be considering the stage at which WINE is, which is a comparable project.
.net yeh?? from what i understand they wont let .net fall ever hear of that vaporware called longhorn that is suppost 2 be hard core intagrated .net
This is the biggest change to C++ in Windows/DOS since it first came out in the 80’s. Microsoft is doing things quicker than the C++ Committee, which means that C++0x, the next generation of C++, will have to do a lot of catch-up in areas such as garbage collection, VM-compatibility, concurrency. I do hope that things will turn out for the better with C++.
Actually, Microsoft’s new extension syntax is not bad, and since MSVC is one of the most standard compliant C++ compilers, you are given the choice to use straight ISO/C++ or not (as a previous poster pointed out), so I don’t see how anyone can complain about those extensions being bad. If I need Linux/UNIX portability, I would simply not use it.
But on the other hand, isn’t it great to have the flexible choice of using garbage collection for your C++ classes when it makes sense, and using normal new/deletes where it doesn’t? When the other extras are put in there, you can’t say that Microsoft are off track. After all, they have the right to do things in their way.
All of the software in my company is ported to Linux, except where it doesn’t make sense (i.e. strictly Windows system stuff) so the availability of those extensions just adds more choice for me, and is not bad at all.
Anononymous said:
> The major drawback that I’ve had with VStudio is that it’s GUI(visual/RAD) designer isn’t quite as good as others, but part of that problem is that I really don’t care for MDI.
I agree that it is a major drawback. It lacks a modern GUI tool unless you are using C# and VB# with WinForms. If you are using C++, you are stuck, WinForms or Win32. And no, manual UI coding doesn’t count as RAD , nor does the old Resource Editor.
I use C++ and would like Microsoft to provide a C++ GUI in the spirit of C++ Builder,
but one of their officials long ago said that they have consciously avoided doing that in order for
VB to be a viable platform. Microsoft and Borland divided areas, but Microsoft knew it continue to dominate with it the new .NET (which Borland follows right now, and information about the next C++ Builder will be announced in December AFAIK).
Anyone know if Microsoft has an intention to do a XAML visual RAD designer? I surmise that since XAML separates layout from program code, now there is, how to say, “less than no reason” for Microsoft not to support all .NET supported languages in a visual designer, including C++. Unless they again convolute it on purpose in favor of VB and C#.
Whatever happens, things are getting interesting in C++ world.
Cheers,
Vesko
The IDE isn’t as “in-your-face” as you would have us believe. If you start an ATL-based project, for example, you’ll never see any sign of .Net from the IDE. The same holds true for MFC.
And, yes, MS is continuing development of the MFC & ATL libraries. VC 7.x saw many an enhancement over the previous version.
“”managed” c++ is a proprietary, patented, vendor-specific extension to c++”
Yes, “mangaged” is proprietary, Windows-specific. If you don’t like it, don’t use it. Nobody is goint go *make* you write your C++ code to the .Net apis. As I said in my earlier post, ISO C++ is still available to you. .Net is just another way to do what we MFC developers have been able to do all along (though .Net does make these things an order of magnitude easier)
I would point out, however, that its next to impossible to use any vendor’s tools without running into their own proprietary vendor-specific “extensions”. That’s just the way it goes.
“on the other hand, isn’t it great to have the flexible choice of using garbage collection for your C++ classes when it makes sense, and using normal new/deletes where it doesn’t?”
Very cool indeed! What’s really cool, IMO, is to be able to expose .Net to legacy (VB even) apps by writing your interfaces using ATL and your implementation classes using the .Net bindings. It can be the best of both worlds wherein you get the easier, more modern platform for new development w/o having to throw away a substantial investment in yesteryear’s tech.
hmm isnt c++ bloated enough even in the standard version ???
I mean nearly nobody really gets his mind arround all the template stuff … (for example). why isnt microsoft extending it via librarys (which should be the prefered way … )
* see the boost librarys for example
* (or the ‘Boehm-Demers-Weiser conservative garbage collector’ if you want garbage collection…)
the core-language should be as small and simple as possible imho
ps for sean:
>> “That does not even look like C++ to me”
>>
>>Obviously you’ve never overloaded an operator.
maybe he has seen to many bad examples for the use of overloaded operators
“Anyone know if Microsoft has an intention to do a XAML visual RAD designer?”
Yes, it’s similar to the MVC model currently used in ASP.NET (i.e. when you drop a control on a page, the necessary tags are generated behind the scenes for you). Dragging a control onto the page will generate the necessary XAML tags for you, unless you want to do it all by hand (intellisense will support XAML). You brought up an interesting question about XAML in C++; I’m not sure if C++ will support it or not. We can only hope…
@slom
“the core-language should be as small and simple as possible imho”
if you want something small and simple, then C++ is probably not the way to go. Look into Smalltalk or Lisp 🙂 That being said, the VC compiler is pretty well known to be the best C/C++ compiler for the Windows platform, and as everyone (including myself) has already stated, if you don’t need to use certain extensions, then don’t. VC will compile straight ANSI C/C++ with no problem whatsoever, and produces highly optimized/very fast code.
@sean:
Yes, that is the other great thing! All the “legacy” code sees is an old-style COM object. Good that you commented!
@slom:
Why do you think C++ is bloated? Again, you may not use templates and stuff if you don’t like it.
* I agree that the the Standard C++ library should be extended a lot. Actually some people working on Boost are in the C++ committee.
* The Boehm-Demers-Weiser conservative garbage collector’ is just that, a conservative i.e. a restricted collector, so it is an inefficient one in comparison with the .NET or Java collectors. This is because C/C++ has pointers can be casted to anything, so that you don’t really know what they point to. You can have assistance from the compiler but it is computationally inefficient in comparison with languages that are designed without C-style pointers.
If you read the article, you will see that they evade those
in order for managed C++ classes be a first-class .NET objects (bolding is mine). You can see how they are allowing the use of a the high-performance .NET garbage collector with C++:
“There are a number of pointer operations, such as casting and pointer arithmetic, that are disallowed for objects stored on a garbage collected heap. This lead to confusion among users, and we believe a separate token better captures the notion of a CLI reference type.”
@jason knight:
Thanks for the info. I hope too!
I’ve never understood why you’d use Managed C++, targetting Windows, when you’ve got C# available. It seems like a lot of pain and ugliness with no clear advantages. A C++ (or Java) developer can pick up C# in an afternoon…
– chrish
@Chris
the advantage is that C++ is the only “.Net-supported” language that can run on the native and managed heaps simultaneously. See some of the comments above about exposing .Net functionality as a COM object (kind of a reverse interop) as an example. You simply cannot accomplish the same thing with C# or VB. So the issue isn’t whether we can learn C# quickly. I’ve used C# a few times — at times its nice. The issue (at least for myself) is that I’d rather not sacrifice the power and flexibility absent in the other .Net languages.
Vesselin Peev:
>> Why do you think C++ is bloated? Again, you may not use
>> templates and stuff if you don’t like it.
Because, one very often heard advise is that a good c++ programmer should restrain himself to some basic features of c++ ( at least i have read it quite some time)
Because code is (should be ??) read more often than written, so it is important that other people understand it. I have no problems with normal use of templates, but there are uses i just dont understand (see template metaprogramming stuff)
Ok , back on topic:
imho this IS NOT C++ , in the same way that objective-C is not C. It’s as simple as that. ( beeing c++ (from the point of the language) should be defined as this programm can be correctly processed by every c++ compiler and not by the compiler that can compile this language x is also able to compile c++, therefore x must be valid c++)
Maybe thats the main point i have with that (i know that they call it c++/cli, but somehow that still gives the impression that this is c++, isnt it )
towards the design decisions:
i see your(and seans) point, why it is ‘good’ to have c++ integrated into .net . i also knew of the limitations of for example the Boehm-Demers-Weiser gc, and it was in no way my intention to say that this is the perfect solution.
BUT what i wanted to say is that the way the Boehm-Demers-Weiser gc is integrated into c++ is a much better way than providing a pseudo c++ whith once again a new way to reference your classes
(which leaves us with: normal (ie placed on the stack), c-style pointers, c++-style references and finally .net-style “hats”. throw const and static into the mix and than tell me again with a strait face that this is not TOO complicated. the same goes for object creation (malloc,new,gcnew))
and all that despite the fact that c++ already has a common built in way to change memory allocation, in overiding new and delete (even on a per class base).
why dont use that and derive all managed classes from ie. dotnet::gc_managed ??
why
new string^ mystring
instead of
new gc_handle < string > mystring ??
instead we reinvent the wheel, and build this bastard(imho) of a language.
ok this is getting to long
disclaimer: take everything i said with a big grain of salt, as im neither a language designer, nor do i have great experience with .net. On the other hand please educate me if you can