Bytecode: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m typos
m wl P-Code
 
(66 versioni intermedie di 47 utenti non mostrate)
Riga 1:
IlIn [[informatica]], il '''bytecode''' è un linguaggio intermedio più astratto deltra il [[linguaggio macchina]]. e Èil chiamato[[linguaggio di programmazione]], usato per descrivere le operazioni che costituiscono un [[Programma (informatica)|programma]]. È così chiamato perché spesso le operazioni hanno un codice che occupa un solo [[byte]], anche se la lunghezza dell'intera [[istruzione (informatica)|istruzione]] può variare perchèperché ogni operazione ha un numero specifico di parametri su cui operare. I parametri di queste operazioni possono consistere di registri o [[indirizzi di memoria]], un po' come accade per il linguaggio macchina.
 
== Descrizione ==
Un linguaggio intermedio come il bytecode è molto utile a coloro che realizzano [[linguaggi di programmazione]] perchèperché riduce la dipendenza dall'[[hardware]] e facilita la creazione degli [[interprete (informatica)|interpreti]] del linguaggio stesso.
 
Il bytecode può anche essere usato come [[rappresentazione intermedia (informatica)|rappresentazione intermedia]] di un [[Programma (informatica)|programma]] da far compilare a un tipo speciale di [[compilatore]], chiamato [[compilatore just-in-time]] il quale traduce il bytecode in linguaggio macchina immediatamente prima dell'[[esecuzione (informatica)|esecuzione]] del programma stesso, per velocizzarne l'esecuzione.
 
Un programma in bytecode è eseguito mediante unaun secondo programma che ne interpreta le istruzioni. Questo [[macchinaInterprete virtuale(informatica)|interprete]], unè interpretespesso diindicato bytecodecon chiamatoil termine [[macchina virtuale]], cosìin perchèquanto può essere visto dal [[programmatore]] come un [[computer]] astratto che realizza al suo interno gran parte delle funzionalità di un computer reale. QuestoQuesta daastrazione il vantaggioconsente di poter scrivere programmi ''[[portabilità|portabili,]]'' e cioè programmiarchitettati chein possonomodo tale da poter essere eseguiti su diversi tipi di [[Sistema operativo|sistemi operativi]] e di [[Architettura (computer)|architetture. hardware]]. Questo è un vantaggio che hanno anche i [[Interprete (informatica)|linguaggi interpretati]], tuttavia un interprete di bytecode risulta essere molto più veloce di un interpeteinterprete di un [[linguaggio di programmazione ad alto livello]] perchèperché è un linguaggio con poche e semplici istruzioni e più vicino al modo di funzionamento dell'hardware ([[processore]] e [[memoria (informatica)|memoria]]) del computer.
 
La prima [[implementazione]] di compilatore da [[codice sorgente]] a bytecode, nonché di interprete di bytecode, è stato il sistema [[Smalltalk]], sviluppato negli [[anni 1970]] al [[Xerox Palo Alto Research Center|centro di ricerca di Palo Alto della Xerox]].
Il linguaggio più famoso tra quelli che fanno uso del bytecode è [[Java (linguaggio)|Java]]. Java ha sia una macchina virtuale ([[Java Virtual Machine]]) che interpreta il codice bytecode sia un compilatore just-in-time che traduce il bytecode in linguaggio macchina. La piattaforma [[.NET_framework|.NET]], e quindi anche il linguaggio [[C_sharp|C#]], ha a disposizione tecniche simili a quelle del linguaggio Java.
 
Il linguaggio più famoso tra quelli che fanno uso del bytecode è [[Java (linguaggio di programmazione)|Java]]. Java ha sia una macchina virtuale ([[Macchina virtuale Java|Java Virtual Machine]]) che interpreta il codice bytecode, sia un compilatore just-in-time che traduce il bytecode in linguaggio macchina. La piattaforma [[Framework .NET_frameworkNET|.NET]], e quindi anche il linguaggio [[C_sharpC sharp|C#]], ha a disposizione tecniche simili a quelle del linguaggio Java. Il linguaggio [[Gambas]] fa uso di Bytecode.
Oggi, per migliorare la velocità di esecuzione, anche molti linguaggi interpretati, come [[Perl]], [[PHP]] o [[Python]], fanno uso del bytecode. Essi traducono il programma in bytecode e poi lo interpretano tramite una macchina virtuale. Il linguaggio [[Ruby]], invece, non usa il bytecode, ma traduce il codice in una struttura sintattica ad albero che ricorda molto la rappresentazione intermedia che si usa nei compilatori, tale struttura viene poi usata dall'interprete per eseguire il programma.
 
Oggi, per migliorare la velocità di esecuzione, anche molti linguaggi interpretatidinamici, come [[PerlPHP]], [[PHPPython]], [[Ruby (linguaggio di programmazione)|Ruby > 1.8]] o [[PythonTcl]], fanno uso del bytecode. in maniera più o meno esplicita a seconda delle implementazioni. Essi traducono il programma in bytecode e poi lo interpretano tramite una macchina virtuale. I Illinguaggi [[Ruby (linguaggio di programmazione)|Ruby 1.8]] o [[RubyPerl]]<ref>Perl ha solo un supporto sperimentale per la pre-compilazione. {{Cita web | url=http://search.cpan.org/~nwclark/perl-5.8.8/ext/B/B/Bytecode.pm#KNOWN_BUGS | titolo=B::Bytecode Perl compiler's bytecode backend | autore=Beattie, Malcolm and Enache Adrian | anno=2003 | editore=[[CPAN]] }}</ref>, invece, non usausano il bytecode, ma traducetraducono il codice in una struttura sintattica ad albero che ricorda molto la rappresentazione intermedia che si usa nei compilatori,; tale struttura viene poi usata dall'interprete per eseguire il programma.
Un tipo particolare di bytecode è costituito dai [[p-Code]], che possono occupare più di un singolo byte e avere istruzioni di varie dimensioni, un pò come le [[opcode]] di molte [[CPU]]. I p-Code funzionano a un livello di astrazione molto più alto rispetto ai bytecode, essi, ad esempio, possono avere operazioni tipo "stampa questa stringa" o "pulisci lo schermo". Sia il linguaggio [[BASIC]] che alcune versioni del [[Pascal (linguaggio)|Pascal]] usano i p-Code.
 
Un tipo particolare di bytecode è costituito dai [[pP-Code]], che possono occupare più di un singolo byte e avere istruzioni di varie dimensioni, un po' come le [[opcode]] di molte [[CPU]]. I p-Code funzionano a un livello di astrazione molto più alto rispetto ai bytecode, essi, ad esempio, possono avere operazioni tipo "stampa questa stringa" o "pulisci lo schermo". Sia il linguaggio [[BASIC]] che alcune versioni del [[Pascal (linguaggio)|Pascal]] usano i p-Code.
==Esempi di bytecode==
*Bytecode di [[Java (linguaggio)|Java]], che viene eseguito dalla [[Java Virtual Machine]]
*Il [[Common Intermediate Language]] della piattaforma [[.NET_framework|.NET]], eseguito dal [[Common Language Runtime|Common Language Runtime (CLR)]], la macchina virtuale .NET
*[[CLISP]], una implementazione del [[Common Lisp]] il cui compilatore produce solo bytecode
*[[CMUCL]], una implementazione del [[Common Lisp]] che può produrre sia bytecode che codice macchina
*Il bytecode di molte implementazioni del linguaggio di programmazione [[Smalltalk]]
*Il linguaggio [[Ocaml]], opzionalmente il compilatore può produrre una forma di bytecode molto compatta
*[[O-code|La macchina O-code]] del linguaggio di programmazione [[BCPL]]
*[[p-Code|La macchina p-Code]] dell'[[Pascal UCSD]], una implementazione particolare del linguaggio [[Pascal (linguaggio)|Pascal]]
*Il linguaggio di programmazione [[Icon (linguaggio)|Icon]]
 
==Esempi= diEsempi bytecode===
==Collegamenti esterni (in inglese)==
* Bytecode di [[Java (linguaggio di programmazione)|Java]], che viene eseguito dalla [[Macchina virtuale Java|Java Virtual Machine]]
*http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html Descrizione del bytecode di Java
* Il [[Common Intermediate Language]] della piattaforma [[.NET_framework|.NET]], eseguito dal [[Common Language Runtime|Common Language Runtime (CLR)]], la macchina virtuale .NET
*http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html La specifica della Java virtual machine
* [[CLISP]], una implementazione del [[Common Lisp]] il cui compilatore produce solo bytecode
* [[CMUCL]], una implementazione del [[Common Lisp]] che può produrre sia bytecode che codice macchina
* Il bytecode di molte implementazioni del linguaggio di programmazione [[Smalltalk]]
* Il linguaggio [[Ocaml]], opzionalmente il compilatore può produrre una forma di bytecode molto compatta
* La [[O-code|La macchina O-code]] del linguaggio di programmazione [[BCPL]]
* La [[p-Code|La macchina pP-Code]] dell'[[Pascal UCSD Pascal]], una implementazione particolare del linguaggio [[Pascal (linguaggio)|Pascal]]
* Il linguaggio di programmazione [[Icon (linguaggio)|Icon]]
 
== Note ==
[[Categoria:Linguaggi di programmazione]]
<references/>
 
== Voci correlate ==
[[de:Bytecode]]
* [[en:Byte-codeHotSpot]]
 
[[es:Bytecode]]
== Collegamenti esterni (in inglese)==
[[fi:Tavukoodi]]
* {{FOLDOC}}
[[fr:Bytecode]]
* {{cita web|1=http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html|2=Descrizione del bytecode di Java|lingua=en|accesso=20 agosto 2005|urlarchivio=https://web.archive.org/web/20050806005646/http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html|dataarchivio=6 agosto 2005|urlmorto=sì}}
[[ja:バイトコード]]
* {{cita web|http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html La specifica|Specifica della Java virtualVirtual machineMachine|lingua=en}}
[[nl:Byte-code]]
 
[[pl:Kod bajtowy]]
{{portale|informatica}}
[[ru:Байт-код]]
 
[[Categoria:Linguaggi di programmazione]]