Bytecode: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
MerlIwBot (discussione | contributi)
m Bot: Aggiungo: bn:বাইটকোড Modifico: ca:Bytecode
m wl P-Code
 
(39 versioni intermedie di 30 utenti non mostrate)
Riga 1:
In [[informatica]], il '''bytecode''' è un linguaggio intermedio più astratto deltra il [[linguaggio macchina]] e il [[linguaggio di programmazione]], usato per descrivere le operazioni che costituiscono un [[Programma (informatica)|programma]]. È chiamato 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é 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é 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 un secondo programma che ne interpreta le istruzioni. Questo [[Interprete (informatica)|interprete]] è spesso indicato con il termine [[macchina virtuale]], in quanto può essere visto dal [[programmatore]] come un [[computer]] astratto che realizza al suo interno gran parte delle funzionalità di un computer reale. Questa astrazione dà la facoltàconsente di scrivere programmi ''[[portabilità|portabili]]'', e cioè architettati in modo 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é è 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 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_Framework .NET|.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 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 [[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= diEsempi bytecode===
* Bytecode di [[Java (linguaggio di programmazione)|Java]], che viene eseguito dalla [[Macchina virtuale Java|Java Virtual Machine]]
* Il [[Common Intermediate Language]] della piattaforma .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
* 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 ==
<references/>
 
== Voci correlate ==
* [[HotSpot]]
 
== Collegamenti esterni (in inglese)==
* {{FOLDOC}}
*http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html Descrizione del bytecode di Java
* {{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ì}}
* {{cita web|http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html La specifica|Specifica della Java virtualVirtual machineMachine|lingua=en}}
 
{{portale|informatica}}
[[Categoria:Linguaggi di programmazione]]
 
[[Categoria:Linguaggi di programmazione]]
[[bn:বাইটকোড]]
[[ca:Bytecode]]
[[de:Bytecode]]
[[en:Bytecode]]
[[eo:Bajtkodo]]
[[es:Bytecode]]
[[fi:Tavukoodi]]
[[fr:Bytecode]]
[[ja:バイトコード]]
[[ko:바이트코드]]
[[nl:Bytecode]]
[[pl:Kod bajtowy]]
[[pt:Bytecode]]
[[ru:Байт-код]]
[[sq:Bajtkod]]
[[sv:Bytekod]]
[[uk:Байт-код]]
[[zh:字节码]]