@BrEgOrs...
My $.02 is usually worth at least that much.. you're welcome :)
Most computer user I've ever talked to takes a look at price first, then functionality, and finally, whether or not it will work on their computer. The rest either don't care about cost, or just don't care at all. That's the real world that I've seen.
Hmmm... the world I've seen is actually the opposite. Different worlds, I suppose.
I imagine there are some computer users that make ill-informed decisions on their software purchases based on price alone. In my experience, this only happens when accountability for that purchase is low (such as a home computer user, or a high ranking manager making a decision without any responsible thought). Responsibly obtaining components is an entirely different topic. My opinion is.. Functionality, support, price, and ROI is the responsible path.
But about maintaining enterprise level applications, the benefit is the LANGUAGE.
This is usually a religious battle, but I'd say design approach is more important here than language. In a well designed system, language is an implementation detail. In fact, an enterprise application might have a number of applications using a number of languages.
In my endeavors, I've installed a .NET dependent application such as A@o@e's Reader 6.0.x on a WindowsXP Home Edition computer with a measly 256Mb of RAM. The (obviously stated) minimum. This little computer, with two RDRAM slots both filled with 128Mb PC800 chips, was a word-processing, web-browsing, Adobe 5.x reading Frontpage running not-quite-so power-house. I put the .NET framework on, a requirement of installation, (sans-SDK of course), and updated to the latest Reader of the time. At the end of the day, the computer was a DOG when Adobe was loaded, even without a document open, despite the minimum system requirement of 32Mb of RAM. After about 5-6 days of use, I was questioned about why the computer was slower, and I explained the situation about the requirement of the latest Adobe Reader to read the desired documents, and downgrading to 5.x wasn't an option. I then investigated RAM costs at the time, and Two 256Mb RDRAM PC800 chips was well over the $100 price limit the user was willing to pay. The end result was a user who was getting along JUST FINE before .NET, had to shell out well over $100.00 to continue what they were doing before. To this day, this user simply puts up with the dog-slowness of their system. They've even got I-Tunes and other applications loaded. It takes 3 minutes for their system to boot up, and well over two for it to shutdown after it's been running non-stop for a week. They put up with this loss of productivity because they simply don't have the spare cash to upgrade their hardware. I checked RDRAM prices for them the other day... The running price for 2x256Mb is $171.00. They still won't upgrade!
I think what I mentioned in the previous thread is that the .Net platform mostly targets enterprise solutions. In reality, that's where the money is for them. These environments are where they actually charge for Visual Studio (though I suppose some smaller operations could get away with the Express editions provided it doesn't violate the EULA). And the platforms that these applications usually hit are powerful server hardware or powerful developer workstations.
Only really recently has Microsoft started targetting the casual user. .Net has been out for ... what? 7 years or so? And the express editions just came out last year?
That said, the computers you get on a desktop today are about as powerful as the servers were 7 years ago, so it's only natural that they would market .Net to this group of PCs.
You have to be careful when you see minimum and recommended requirements. This has usually went through the marketing wringer before it settles in front of your eyes.
From MS's site:
Note: A system should meet these or the minimum requirements for the operating system, whichever is higher.
Technically, the requirements were correct. They recommend 256MB to get .Net alone to operate at the acceptable level for most applications. The requirements of your machine's total footprint (.Net + monolithic Adobe app + Windows itself + whatever else you needed) brought it well above the minimum.
Marketing. Sucks, doesn't it?
That said, I will agree with you on some terms of bloat. System.dll (the basic core assembly leveraged by pretty much every derived .Net assembly) is pretty large. The bloat is there for a reason though... which leads to your next response...
What is the exact difference between emulating the IL and emulating the previous platform? Your running an emulator either way.
There is a difference between compiling for byte-code IL and compiling for purposes of emulation.
With byte code compilation, the assembly is storing a lot of information about the application. It's storing "type" information, structures, and so on (coined as "Metadata" by Microsoft). More or less, it's shipping a more compact, slightly cryptic version of your source-code. From this type of information, a compiler can be written to best handle the situations presented in this assembly.
Emulated binaries require a fair amount of guesswork on the part of the compiler that needs to translate. Often times, emulation compilers eject code that focus on stability over efficiency.
You've probably used MAME, right? Ever wonder why it practically takes a super computer to run games that ran on Commodore 64 level hardware back in the day? And why some of those emulations are glitchy and unstable?
The guesswork the emulation layer has to go in is largely the reason why.
But I beg to differ with you on the CPU issue. The fact is, that if the framework doesn't recognize the new CPU, and the CPU is not backwards compatible with a recognized one, then the framework will have to be updated before the IL dependent app can even run.
I'm sorry. I should have been clearer here. A compiler specific to the CPU needs to be written before it can utilize IL. This is true for any other languages using this distribution model (i.e. Java)
This level of abstraction creates platform independent applications.
These things used to happen with MFC, MSVC runtimes, common controls, etc. The only apps that didn't get updated were the ones that were statically linked. What is the major difference between updating a framework and updating an API in a WIN32 DLL? You still have to update...
A lot of the challenge of this is how Windows treats COM. It's not so much the API itself, but the objects that wrap around it. If an API forces the object to break compatibility, it's fatal to the application consuming that object in the COM world. .Net handles the versioning a lot more elegantly with regard to backward compatibility issues (the "bloat"/metadata stores information about the version of the external component it's consuming).
Similar issues, but MaxIDE would still be faster, because it didn't have an IL overhead to worry about. Have you ever ran an emulator, of say, another OS? What was faster? Running the app natively, or emulating another CPU?
You said they were both running, and it took 7 seconds for the IDE to refocus. Or was I misunderstanding you?
At this point, IL overhead is not an issue anymore. Everything is running as compiled native code.
The 7 seconds is all the threaded operations re-establishing their state.
For example, the studio IDE has an instance of the compiler running at all times to catch errors as you enter them into the editor.
What is the difference between spitting out an API as WIN32.DLL or as .NET assembley DLL? It's still a darn DLL! The only benefit I see of .NET is C#. If Microsoft spit out a WIN32 C# compiler, I would be in heaven!
I agree here. They really shouldn't have called it a DLL as they really aren't the same thing (and, under certain compilation conditions, it's actually a .PE file). It's almost like putting a windows .exe on a Mac and expecting it to run there.
Sounds great to me. I like C#! I wish I could compile a native WIN32 app with it without the .NET overhead. The choice would be nice. Of course, this will probably never happen since certain people decided to bundle an awesome language with a bloated design.
Your only choice here, unfortunately, is C++. C++ is already a platform independent language, so Microsoft's approach to it isn't (for as long as they support Win32) to absorb it into ".Net" borg collective, but rather let it co-exist with .Net applications (or emit the .Net equivalents of Win32 if the developer chooses to do so)