Brainf##k is the only true way of coding, you know it, I know it. :lol:
I don't think you understand me wrong by syntax, but by semantics, when you say that I overgeneralize. Or that I argue elitist. You just assume the elitist anti-elitist position in the discussion, and thus I must be wrong. The reason is just, that you assume that a single existing programmer, who knows what his program does in managed code, is enough to show that managed code is not just for people who don't understand what their program will do.
But on the same time, I can also show you examples of many other things being used for something else, despite being build for a different purpose. Does that have any impact on the purpose, which is what I am talking about?
There is no IQ check in managed code compilers, which prevent skilled software engineers from using them. But when they do, they limit themselves to the limitations of the managed code.
Which is sure no problem, but it definitely backfires at them, when they start to argue, that managed code is not better or worse than unmanaged code in their eyes. Because then, I can argue, that they either did not look close enough at it, to make a useful observation, or really lack the knowledge of alternatives to notice the difference in practical programming. Because, there are differences. And the differences are not such, that managed and unmanaged programs fill different habitats. The fields of application of managed code are a subset of the fields of application of unmanaged code. unmanaged code can be used on machines or for tasks, which are not available to managed code. And at the same time unmanaged code can do the roles of managed code - no wonder as managed code is just unmanaged code working with the managed code as data. Which means, they are comparable in each task and in the comparison, even if you include effort needed for the programming, the unmanaged code will have advantages - the machine dependent implementation effort for portability is just done for managed code mostly by different people when implementing the VM and when developing the managed code syntax. All fine when somebody already did the task for you, all bad if you have to do the work yourself and implement a VM on a uncommon machine as well as adapting the standard library of the programming language to the new environment. For managed code, you just have to deal with the many other differences between the target machines, which can affect your task.
But then, if you use standardized languages like C++, with compiler back-ends being available for almost any other machine, this is not that much of a difference anymore - instead of one "executable" for all platforms, that is interpreted by the VM, you have multiple, with each being optimized for the platform, and with the platform availability depending only on your compiler able to produce outputs for this processor model and you having a standard library working for this architecture. Which is often simpler to be achieved than getting the VM ported as the VM itself requires the availability of these two factors for getting implemented + the managed code run time files.
So, unless you have somebody insane enough to write a VM and the run times with a hex editor or at least assembler, the availability of a VM and it's standard library will mean that a unmanaged code compiler backend and standard library will exist for it as well already.
So, the advantages of managed code really get limited ONLY to the skills of the development team. If you can do better, you will use better tools in an economic decision - I don't want to argue about politics, because OSI layer 9 is unpredictable.
---------- Post added at 10:21 PM ---------- Previous post was at 10:16 PM ----------
Memory management is a lot easier in .NET and Java than it is in lower-level languages.
No, it is not easier. you just get away with it easier, if you don't think about it. The garbage collection will fix your deficits. Of course, as long as it can. What if it can't tell for sure that a reference counter is zero and a object no longer in use? Watchdog timers? Scan every object and it's references for not being visible to any process of the program? That is why it is easy to make a Java program use 1600 MB of RAM for a turn base strategy game, which would use just 65 MB when done in C++ with the same features and a proper managed memory handling.