To read all comments associated with this story, please click here.
Native code has a big disadvantage that interpreted code doesn't. Even the very best C compilers throw away a lot of semantic information that exists in the source code, simply because there's no way to exploit it in static machine code. Once the code is compiled, that's it. Runtime optimization is relegated to complicated and expensive micro-op decoding and reordering in hardware.
The potential exists for interpreted code to take us to new levels of runtime optimization through the use of dynamic, adaptive runtime optimization. In particular, interpreters can take us to new levels of thread-level parallelism that far eclipse the limitations of hardware multithreading.
Native code need not be left out of the party. Through the use of code-optimizing firmware or hypervisors, one can optimize for a variety of different objectives. This isn't something that hasn't been done before. Transmeta accomplished their impressive power efficiency through the use of a firmware "code morphing" technology that performed just-in-time compilation on x86 machine code to produced highly optimized Very Long Instruction Word (VLIW) native machine code.
In short, native code isn't necessarily faster than interpreted code. The present-day performance delta has more to do with the fact that static compilation has been more extensively studied than has dynamic compilation. The leading C compilers are pushing the limits of the technology, whereas the leading JIT compilers are barely scratching the surface.
If you're at all interested in dynamic JIT compilation, check out Psycho (not my project or anything):
http://psyco.sourceforge.net/introduction.html
But lack of native code, while producing a larger and slower app most of the time, is better in the long run for everyone.
Pardon? given the deminishing returns on CPU performance, I doubt anyone will notice the difference between a quality written managed application vs. an umanaged one.
Managed code is very immature at this moment, I'll put money on it, when 3Ghz core 2 machines are common place, with dual core considered 'low end', the difference in performance and teh snappiness to the end user won't even be noticeable.
Heck, the latest Lotus Notes 7 is based around Eclipse/SWT - if IBM can get an application as complicated and complex as Notes available on a platform with reasonable performance, I'm sure any company can achieve it.
As a side note; the new Microsoft Office 2007 uses Winforms for its user interface front end; so even now there are applications that are exploiting the power of managed code without any noticeable affect on performance.
You have C/C++, Qt/Gtk/WxWidgets. I will keep my responsive and fast KDE desktop with natively compiled applications for most of my tasks. The web is not for applications, is for information. I hope this thing about web 2.0 quickly vanishes as just another atempt to complicate things and reinvent the wheel.
You have C/C++, Qt/Gtk/WxWidgets. I will keep my responsive and fast KDE desktop with natively compiled applications for most of my tasks.
Last I checked, KDE is built on Qt and its odd dual-licencing scheme that will keep its open-source licence bound to Posix-like OSs for eternity.
Personally I'd rather see a wxWidgets that uses compile-time polymorphism on an LLVM-based packager that will compile the bytecodes natively on the destination platform for maximum optimization and then store the native code on the hard drive at install time.
We heard the same thing in the 80s regarding assembly to C. Nowadays, unless you're Michael Abrash you're unlikely to globally out optimize a fast C compiler.
At least C# (far from my favorite language) gives the ability to bypass bounds checking.
Don't worry, we've seen it all before. I think John Harris (from Hackers book fame) has stuck to his guns and is still programming in assembler.
You must never have seen this:
http://produkkt.abraxas-medien.de/kkrieger
It's 96K, give it a shot and tell me what you think about optimization.
That being said, I think virtual machine languages (platform independent applications) are the future. I'm sick of being stuck on "X" OS due to needing a certain application.
Oh boy. VM's are mentioned and people immediately start screaming about how slow they are...
That's just a load of crap! Java nor .NET are truly slow.
If you want an example, just try http://www.map24.com . This stuff is a Java applet, in 3D and with live data from the net. You can hardly say that this is slow!
Integration with the OS gets better every release. Specially .Net does a good job (at least on the windows platform). There really is no difference from running a native or vm application there.
They don't necessarily make an application easier to power to other operating systems. Having a version of the virtual machine for other OS's is only half of the problem. The developer has to use API's that aren't bound to any particular OS. Example: if a developer uses WinFXm it's not going to work on any other operating system but Windows.
The GREAT thing about virtual machines is that they can make the system more secure by sandboxing the application. They also allow the application to run on other instruction sets as long as there is a virtual machine(and the same libaries). Virtual Machines allow the explotation of instruction set extensions and the use of different architectures altogetger. It would be nice to be able to move away from x86 eventually.
"In fact, I think I'd rather have my balls crushed by a wooden mallot."
I couldn't have possibly put it better. ;-)
Running a bunch of Java, .Net, and Web apps is an exercise in total frustration. Even modern, fast machines with tons and tons of memory can be brought to a crawl by all the VM crap.
Don't get me wrong, I'm quite fond of both Java and .Net (particularily Mono), and I like the dynamic languages like PHP, Ruby, Perl, and Python.
But those mostly bring benefits to the developer (easier to use, faster to develop with). They bring virtually zero benefits to the end user, other than the greatly reduced memory leakes or buffer overruns that can occur more commonly in C/C++ programs.
But the extra time and effor it takes to eliminate memory leaks or buffer overruns is worth it in terms of the much faster end result.







Member since:
2005-11-13
With all these languages being ported to various virtual machines, I guess it won't be too much longer before people stop writing native apps altogether. This is unfortunately for the end user, who will have to put up with apps that are probably never gonna run as fast, or integrate as well as their would-be native counterparts. I don't look forward to a future of running a desktop of of .NET and Java apps, or even worse, Web 2.0 stuff. In fact, I think I'd rather have my balls crushed by a wooden mallot.
I'm sure it's fantastic for developers, who finally have any easy way to port their slow-ass apps across platforms, but certainly the bright minds in the IT industry could come up with a better solution than this.
Edited 2006-08-10 22:07