This is just a conceptual thing, and it might sound silly at first, but the more I think about it the more it interests me.
At the most fundamental level the mechanisms of the .Net platform, for example, the type system, object allocation and instantiation, are relatively simple (although memory management might be more of a headache).
There was speak of a managed API in longhorn (which certainly didn't happen), but take the concept to the next level: computer hardware designed for an object oriented environment, with a hardware controlled type system, native support for v-tables (virtual/overridable functions), memory allocation, etc.
If machine language commands were tailored to the concepts of object oriented programming, the first thing we could do is write flexible, reusable, dynamic code like the code we write in .Net, but omit JIT compilation or interpretation and remove an intermediate step. Throw in (at least partial) hardware support for memory management and you get another bonus.
If current managed code can potentially rival speeds of unmanaged C and C++, imagine the kind of boost more appropriate hardware could give to managed code.
And, for .Net programmers, when the platform isn't abstracted from hardware, where does that leave us with portability? Well keep in mind that, according to Microsoft, .Net's primary purpose isn't portability (and Microsoft makes the point that integration between the OS and the managed platform, i.e. P/Invoke, can give you the best of both worlds when portability isn't an issue). But also consider that the compiled code won't be significantly different from current IL and implementing an emulator for object-oriented hardware would be very similar to implementing a software-based managed platform such as Java or .Net.
Of course the idea isn't very realistic anyways. The break from the current conception of computing would be too big, leaving us without backwards compatibility with current OS's and software. But I thought I would throw it out there.
At the most fundamental level the mechanisms of the .Net platform, for example, the type system, object allocation and instantiation, are relatively simple (although memory management might be more of a headache).
There was speak of a managed API in longhorn (which certainly didn't happen), but take the concept to the next level: computer hardware designed for an object oriented environment, with a hardware controlled type system, native support for v-tables (virtual/overridable functions), memory allocation, etc.
If machine language commands were tailored to the concepts of object oriented programming, the first thing we could do is write flexible, reusable, dynamic code like the code we write in .Net, but omit JIT compilation or interpretation and remove an intermediate step. Throw in (at least partial) hardware support for memory management and you get another bonus.
If current managed code can potentially rival speeds of unmanaged C and C++, imagine the kind of boost more appropriate hardware could give to managed code.
And, for .Net programmers, when the platform isn't abstracted from hardware, where does that leave us with portability? Well keep in mind that, according to Microsoft, .Net's primary purpose isn't portability (and Microsoft makes the point that integration between the OS and the managed platform, i.e. P/Invoke, can give you the best of both worlds when portability isn't an issue). But also consider that the compiled code won't be significantly different from current IL and implementing an emulator for object-oriented hardware would be very similar to implementing a software-based managed platform such as Java or .Net.
Of course the idea isn't very realistic anyways. The break from the current conception of computing would be too big, leaving us without backwards compatibility with current OS's and software. But I thought I would throw it out there.