Can anyone with experience in C# and .NET find any blatant errors in the actual factual parts?
C#
In the beginning, or very near to it, there was C. Dennis Ritchie created C while working for AT&T. C was a programming language favored by many in the seventies and eighties because it provided a structured programming language that featured the speed, performance, and ease of systems level programming that formerly had been enjoyed by assembler. And it was supposed to be portable. While C wasn’t as fast as hand-optimized assembler code, it was typically a lot faster than the more application specific languages such as COBOL and FORTRAN once compiled. Unfortunately, C had a syntax that lent to quite elegant and compact code. In other words: code that was nearly indistinguishable from line noise. Having code indistinguishable from line noise was sometimes considered a mark of diabolical skill and programmer cunning by some programmers. This was because the code took up less space in an un-compiled file, but also because it prevented all but the most skilled programmers from being able to take over the management of the codebase, thus providing job security. Compact code is also said to run faster, because it looks a bit more like assembled code. The 1980s brought invention of robust telecommunications protocols and the internet, including automated connection mechanisms like SLIP and PPP. This development meant that an entire generation of programmers grew up without actually seeing what modem line noise looked like. As a result, code that looked like line noise fell out of favor, leading to C code even novice programmers could understand. Soon, the original idea of C being portable came back into vogue, as well as the ambition to have more interesting and useful code be reusable as well as compliable on different platforms. This led to C morphing into C++ which was merely an obese version of C with bits of object oriented utility compiled into the final product, causing bloat.
Around 1990, Sun Microsystems designed a specialized programming language called Oak, which was originally supposed to run on set-top boxes and other consumer devices. Oak, or Green as it was also known, was like C and C++ in a straightjacket. No longer could one create pointers into the operating system, also – features like multiple-inheritance and operator overloading disappeared in order to prevent programmers from doing some of the incredibly stupid things possible in C++. In compensation for the limitations of a memory access strategy that removed “Unsafe constructs” and mandated only providing data structures within objects – several memory management underpinnings were added with garbage collection memory management being the most welcome. Because of the wide variety of embedded platforms in the consumer electronics market, the Oak/Green project utilized a virtual machine that interpreted an intermediate byte-code language.
Unfortunately, the Oak language and runtime was mostly snubbed by consumer electronics. The result was a renaming to Java, and an implementation retooled to fit the needs of the World Wide Web. This led to a boom in hype, web page applets, and unified management applications. The latter allowed many vendors to create multiplatform GUI tools to manage heterogeneous enterprise appliances and applications. Ultimately, the hype wore out, and Sun found itself competing against Microsoft for control of the Java specification and virtual machine implementation on X86 workstation platforms. The resulting conflict and waning interest caused Sun to decide to further re-tool Java into a server-side framework known as J2EE, which they nearly managed to actually sell, for profit, to enterprise customers.
Microsoft, fearing a loss of control of a lucrative sector, decided to follow suit. They release .NET – a code and transaction framework that has all the great features of Java and J2EE, but costs nothing to license to users of windows. A co-released language component of .NET is C#.
C#, also known as C-“Pound” to those who actually can tell the difference between music, code, and line noise, has many similarities to Java. Both languages were intended to compile into an intermediate interpreted byte code that would in turn be run using a virtual machine. In the case of C#, this is known as the CLR or Common language Runtime. While C# could, in practice be used to generate actual compiled architecture specific binaries, in practice most implementations compile to the Common Intermediate Language(CIL) created to run on the Common language Infrastructure (CLI) C# features many of the strict limits imposed by languages such as Java and Pascal. This should come as no surprise as one of the principal designers of C# is Anders Hejlsberg – who worked on Turbo Pascal.
The C# object oriented syntax is based on C++, but with simplifications including strong type checking, array bounds checking, and restrictions on the use of un-initialized variables. It features the same garbage collection and memory management hand-holding that java does. Other features include security minded limits on global variables and pointers.
Despite its intentions of portability, the .NET implementation of C# is only available on Windows. Other implementations of C# have been created that support Linux and MacOS X operating systems – notably Mono and DotGNU. Portability is also limited by patent issues surrounding portions of the Base Class Library(BCL). Parts of the BCL are designated as an ISO standard, but some portions are excluded and thus covered by patents which may limit the ability of non Microsoft implementations of the full BCL.
C# and the associated CLR environment have certain benefits for Microsoft oriented programmers. CLR presents more opportunities to interoperate with Microsoft COM and other technology frameworks than the JVM does. The CLR also allows more flexibility in the selection of languages than Java, which is itself a language specification tied to the compiler and byte code. In short, C# and the CLR do what Microsoft wished Java could do, if it hadn’t been invented by Sun: Namely interfacing with proprietary and patent encumbered Microsoft specific components. C# has potential to become a more generally used platform, and open source implementations of the .NET framework will improve its market penetration as a language. It remains to be seen whether the gaps in the non Microsoft implementations of C# and .NET style frameworks can implement enough features and developers to make it a de-facto standard that will be adopted by the architects of competing cross-platform development frameworks.
From:
no subject
system, also – features shouldn't be a - after the also
nted by Sun: Namely - Namely shouldn't be capitalized.
First paragraph, especially, feels choppy due to too many short sentences.
Dunno if you care about those sorts of things, though.
From:
C++
Drew Olbrich
C++ is like jamming a helicopter inside a Miata and expecting some sort of improvement.
Drew Olbrich