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 didnt 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 isnt abstracted from hardware, where does that leave us with portability? Well keep in mind that, according to Microsoft, .Nets primary purpose isnt 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 isnt an issue). But also consider that the compiled code wont 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 isnt very realistic anyways. The break from the current conception of computing would be too big, leaving us without backwards compatibility with current OSs 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 didnt 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 isnt abstracted from hardware, where does that leave us with portability? Well keep in mind that, according to Microsoft, .Nets primary purpose isnt 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 isnt an issue). But also consider that the compiled code wont 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 isnt very realistic anyways. The break from the current conception of computing would be too big, leaving us without backwards compatibility with current OSs and software. But I thought I would throw it out there.