In June 2005 the Ecma General Assembly approved the third edition of the standards for C# and CLI. With the first edition of the standards in 2002 and their adoption by ISO/IEC in 2003, the industry was given powerful tools to enable vendor-neutral development of Web services. Today, Ecma is keeping pace with the growing needs of the developer community by publishing the third edition.
What exactly has been enhanced in this version of C# ?
What exactly has been enhanced in this version of C#?
From the C# 3rd Edition standard at:
http://www.ecma-international.org/publications/standards/Ecma-334.h…
Page xv (17 in the PDF):
This third edition cancels and replaces the second edition. Changes from the previous edition include the
addition of the following features:
• Pragma directives
• Anonymous methods
• Static classes
• Partial [class] declarations
• Allowing set and get accessors for properties and indexers to have different accessibility.
• Generic types and methods
• Iterators
• Nullable types
In short, this is Microsoft’s C# 2.0. Chapter 8 includes a brief language overview with plenty of examples demonstrating the new language features.
I could not find the proper information on the ECMA website. Does anyone know if this new version standardizes:
1) APIs for building a graphical user interface
2) APIs for media playback
3) APIs for user authentication and access control
4) APIs for database access
5) APIs for transaction management
6) Standardized mechanisms and APIs for deployment/lifecycle for server business objects
You can download the PDF files:
Standard ECMA-334
C# Language Specification
3rd edition (June 2005)
http://www.ecma-international.org/publications/standards/Ecma-334.h…
Standard ECMA-335
Common Language Infrastructure (CLI)
3rd edition (June 2005)
http://www.ecma-international.org/publications/standards/Ecma-335.h…
Does anyone know if this new version standardizes:
1) APIs for building a graphical user interface
No.
2) APIs for media playback
No.
3) APIs for user authentication and access control
No.
4) APIs for database access
No.
5) APIs for transaction management
No.
6) Standardized mechanisms and APIs for deployment/lifecycle for server business objects
No.
Given the above answers, you might be inclined to ask “why bother with the ECMA standard?”
That’s the right question to ask, but for the wrong reasons.
Here are some other questions: Does Perl provide any of those? Python? C? C++? Ocaml? D?
No.
(And the mere presence of an API is not the presence of a standardized API. All of those langauges have bindings for GTK+, but those bindings haven’t been passed through a standards committee, and thus haven’t been standardized. QED. That’s the same measure that you’re holding ECMA to, otherwise I would mention Gtk#, Gstreamer#, PAM, System.Data, and ASP.NET as solutions for most of your questions.)
Does Java standardize any of those? Arguably not, depending on whether or not you accept the JCP as a standards body. 🙂 The JCP is no ISO or ECMA, and the CLI + C# have been passed as formal standards by both ECMA and ISO. (Yes, I’ll get flamed for saying the above, but I’m just trying to make a point here. 🙂
So, “why bother with the ECMA standard?” The answer is itself a question: why both with anything? Because it fulfills your requirements, that’s why.
Why ECMA CLI and not Perl? Or Python? Or C, C++, Java?
Because ECMA CLI (with C#) is the new C. 🙂
C is nice because it is available everywhere. Not necessarily the C libraries, but the language itself. This can lead to non-portable code — see any Windows or Mac OS app — but that doesn’t matter, the language is well known. Those wishing to write portable code can do so, but have no obligation to do so. C++ is the same. Despite a lack of API portability, both of these have done very well.
Why C#? Because Microsoft is the 800 ton gorilla of the computing world, and they’ve decreed that the future of Windows programming is managed code — Win32 is for legacy programming. See WinFX, Indigo, Avalon, etc. (We may wish that they fail in this, but this is unfortunately unlikely.)
So, you’re a programmer and/or company. You currently provide Windows applications. You have these choices:
1. Forget about portability, and go hog-wild with managed code. You’re stuck on .NET. If you need to support another platform, you need to maintain a completely separate code base.
2. Don’t do anything, and stick with Win32. You won’t be able to make use of Microsoft’s latest functionality. This might be an acceptable trade-off, it might not.
3. Use a portable language/environment, and let someone else worry about the issues (Java). Nice, but it means you’re perpetually stuck on a lowerst-common-demoninator platform and can’t make use the latest-and-greatest Microsoft functionality. This may be an accpetable trade-off, it might not be.
4. Use C#, and design your code in the same way as portable C/C++ programs: conditional compilation, and/or runtime platform detection with separate code paths. Done properly, you can target .NET, Mono, Rotor, Portable.NET, and anything else that comes along. You can make use of the latest-and-greatest Microsoft features on .NET, and write fall-back support for Mono. In short, you have the possibility of pleasing everyone, while maintaining a (more) portable core.
Approach 4 is the more difficult approach, but it’s what Mono provides. ECMA CLI is the new C: a stable base platform that developers can build off of. Not necessarily portable, but the support is there to write portable software if it’s needed.
As soon as Java is released as free software .NET will die. Nobody wants to use a proprietary Microseft techonology that’s encumbered with tens of patents.
“Microseft”
Maturity level low.
Relevance of comment: low as well.
I’m no fan of Microsoft’s business practices, but .NET contains some pretty snazzy technology. The core of it is now an open standard (unlike Java), and it’s hardly Microsoft’s fault that the two major open source versions (Mono and “Portable.NET) are as limmited as they are.
Mono lacks much of the security infrastructure (says so on their web site) as well as scalability, and Portable.NET suffers from many things, not the least of which is due to the fact that it’s largely written in C. That was a brain-dead move in many people’s opinion, including mine.
Hello,
Scalability is something that you obtain as your software evolves and its used for different scenarios. Thinking with scalability in mind helps, but like optimizations they are better done once your code is complete.
So in short, scalability comes with age. Mono 1.0 certainly suffered in many areas. But one year of development has helped Mono scale in many common scenarios: asp.net webforms and web services, remoting, IO and long-running operations. There is a lot of room to improve of course, and we will only find these problems as people put more pressure on Mono.
Miguel.
The core of it is now an open standard (unlike Java)
Java consists of many standards. The ECMA stuff has been submitted as a standard but gives you absolutely nothing to do anything with. .Net is not a standard and never will be. Learn the difference.
Ooh, testy!
Already well aware of it all, thanks you very much sir or maddam! Never did I calim that .NET itself is a standard.
Learn to read ;^)
As soon as Java is released as free software .NET will die.
Java is free now. You can download JDK, JRE for free. And the .NET is still alive 😉
AC1: “As soon as Java is released as free software .NET will die.”
AC2: “Java is free now. You can download JDK, JRE for free. And the .NET is still alive ;-)”
I think the point that AC1 was making is that free software as in free to modify without restriction vs. free to download.
>As soon as Java is released as free software .NET will >die. Nobody wants to use a proprietary Microseft >techonology that’s encumbered with tens of patents.
Really? I never heard of this issue before. I think I’ll stop using .NET immediately.
Just go to their website and look around. You can email them and they’ll send you bound printed copies.
Did anyone read this:
Dr. Nigel Perry, computer scientist, New Zealand, and convener of the Ecma C# technical committee commented: “C# is a standardized modern object-oriented language which is available across multiple platforms; complete releases for Windows, Linux and MacOS X are all expected by the end of this year, making it very attractive for both commercial projects and teaching.”
So WHO is releasing “complete releases” for Linux ? is he refering to ECMA, Microsoft or (probably more likely) Mono ? What an unclear statement in a press release …
It’s rubbish basically. It could mean Mono, or it could mean Rotor or just about anything. Every comment in that article was utterly meaningless, and every time I see Open Standards I want to stick my finger down my throat.
And God knows what they mean by vendor-neutral web services. You can’t do anything with web services, or anything at all really, with the ECMA stuff by itself.
who cares about scalability of mono?
Would you build complex EAI with it?
It would miss a huge part of the “EE” that Java has, such as the connector architecture, JTA/JTS and, well, support from almost anyone.
OTOH, would you use it for pure web stuff?
It does not seem to me that it has support for scalability enhancing technologies such as AppServer clustering (or (F|S)CGI+load balancing lightweight server), memcached-like tech, distributed transaction support (a part from the shared nothing stuff) and so on.
And, I mean, we’re all using Catalyst and Rails nowaday, don’t we?
It is true, the mono is not too advanced at this moment – and IMHO it is one the biggest mistake of the OSS community. But on windows IMHO the C#/.NET 2.0 far more useable then java if you want to create small or middle-size solutinos. And the .NET will better and better while java is stalled. The M$ rich enought to develop the .NET and it is important for the company, but it is not true for SUN/java.
“Why ECMA CLI and not Perl? Or Python? Or C, C++, Java?
Because ECMA CLI (with C#) is the new C. 🙂 ”
I thought C++ was the new C
C# is the new Java
Ruby is the new $_!@Perl
Python is the same old python
Python is the new basic.