C++ code draait ook op elk systeem waar de compiler back-end op draait. Of je nou een back-end moet implementeren of een VM, weinig verschil.
-Een vm kan je code beter optimalizeren voor snelheid. (je zou in theorie een java VM kunnen maken die via CUDA e.d. met je videokaart kan praten, dat VM zou er dan voor kunnen zorgen dat floatingpoint operaties op de videokaart worden uitgevoerd en de rest op de processor.)
Dat betwijfel ik. Ik denk dat een C++ compiler het beter zou moeten kunnen ivm een context op hoger niveau; in ieder geval niet minder goed.
-Een VM kan ook gebruikt worden voor extra veiligheid omdat een VM er voor kan zorgen dat de code niet buiten het VM komt. Ook kunnen applicaties die in een VM draaien meestal niet zomaar aan geheugen zitten dat niet door het VM gealloceerd is. (als in: slechte code, programma crashed, niet het hele systeem).
Native code kan niet buiten je process komen, daar is protected mode voor. Dat is een kwestie van een goed OS, wat er tegenwoordig wel is.
RayNbow schreef op zaterdag 20 december 2008 @ 01:30:
Wat is het nut van een OS? Precies, het vormen van een abstractielaag voor de applicaties die voor dat OS draaien. Een VM is niet veel anders, behalve dat tussen de VM en de hardware meer lagen zit.
[...]
Maar wat is het nut van de x86 instructieset? Juist, een abstractielaag vormen bovenop de microcode.
[...]
De reden is misschien dat mensen soms van wat meer abstractie houden zodat ze op een hoger niveau kunnen werken?

Maar het lijkt me een overbodig abstractie niveau. Er is weinig verschil tussen een compiler back-end en een VM, en back-ends waren er al voor vrijal alle systemen.
Een JVM kan (en doet dat ook) on-the-fly compilen. Het verschil zit dus in abstractie.
Ja, dus je gaat eerst een abstractie maken, en dan ga je alsnog compilen omdat het te traag loopt anders. Nodeloos ingewikkeld?
Ik ben wel blij als een door mij geschreven programma zonder moeite op een ander systeem draait.
Ik ken jouw code niet, dus daar kan ik geen uitspraken over doen. Toch valt het me op dat ik als Windows gebruiker vaak genoeg code tegenkom die ik niet werkende krijg. In de gevallen dat ik het werkende kreeg, moest ik vaak door veel hoepels springen.
Eerlijk gezegd heb ik nooit problemen meer tegenwoordig. Alles compiled en draait moeiteloos op meerdere systemen. Tenzij je echt iets op laag niveau met de hardware doet. Maar daar loop je met een VM helemaal meteen vast.
Security is iets wat meerdere lagen beslaat. Je OS regelt de security voor alle OS-gerelateerde zaken (diensten), maar het lijkt me best moeilijk voor een OS om te bepalen wat "secure" is in de hogere lagen.
Het is wel handig dat je security model platform onafhankelijk is, maar het niet iets dat je niet in een OS zou kunnen stoppen per process.
Ik zie het idd als een extra laag, die traag is en weinig toevoegt voor het merendeel van de applicaties. Het enige nuttige dat ik nog steeds zie is het draaien van remote code, zoals in een browser. Dat was volgens mij ook het hele doel aan het begin, totdat iedereen er ineens volledige applicaties in ging schrijven.
Dat klinkt allemaal leuk in theorie, maar in de praktijk is er vaak geen efficiente mapping naar een andere architectuur.
Overigens vind ik niks mis met java hoor, nu het er is. Op het moment dat je het kan compilen naar native code EN er is een VM aanwezig, dan is dat natuurlijk strict beter dan alleen een compiler. Ook vind ik de multi-threading support in java goed. Ik vond het alleen altijd vervelend om in te programmeren; de taal is zo... langdradig. Ook vind ik de argumenten om java te gebruiken vaak slecht. Uiteindelijk is het een keuze, en het maakt niet zo veel meer uit wat je kiest.
[
Voor 10% gewijzigd door
Zoijar op 20-12-2008 05:47
]