Linguaggio compilato: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Collegamenti esterni: Creato la sezione e aggiunto il template "Collegamenti esterni"
 
(30 versioni intermedie di 26 utenti non mostrate)
Riga 1:
{{C|La voce, riguardo ad un concetto enciclopedico, allo stato sembra una ricerca originale. Da verificare molte informazioni contenute con l'ausilio di fonti adeguate.|informatica|giugno 2018}}
Per '''linguaggio compilato''' si intende un [[linguaggio di programmazione]] che prevede la traduzione ''una tantum'' del [[codice sorgente]], in genere un file di puro testo, predisposto dal programmatore in [[linguaggio macchina]]; la traduzione viene eseguita da un programma detto [[compilatore]]. Si distingue dal [[linguaggio interpretato]], che invece è scritto in puro testo e viene tradotto, ad ogni esecuzione del codice, da un programma detto [[interprete]].
{{F|programmazione|giugno 2018}}
In [[informatica]] un '''linguaggio compilato''' è un [[linguaggio di programmazione]] implementato tramite un [[compilatore]], un programma che converte il [[codice sorgente]] in [[codice macchina]]. Differisce dal [[linguaggio interpretato]], in cui il codice è eseguito direttamente da un programma detto [[interprete (informatica)|interprete]].
 
Questo nome è vago e tecnicamente errato, perché ogni linguaggio può essere implementato sia con un compilatore, sia con un interprete. Inoltre, esistono e sono sempre più diffuse soluzioni miste, in cui un compilatore converte il codice in una forma intermedia (spesso detta [[bytecode]]), che viene interpretata o compilata in codice macchina a tempo di esecuzione da un [[compilatore just-in-time]].
Eseguita la traduzione in linguaggio macchina, si ottiene un [[file eseguibile]], che - in ambiente DOS/Windows - in genere è caratterizzato dall'estensione ''.exe'' (un tempo, piccoli programmi eseguibili avevamo l'estensione ''.com'').
 
== Caratteristiche ==
==Vantaggi dei linguaggi compilati==
Un programma compilato è generalmente autonomo, nel senso che non richiede che sia stato installato un secondo programma (l'interprete, appunto) per essere eseguito. Tuttavia, può richiedere che siano installati altri programmi e librerie per svolgere i propri compiti.<br />
*Il file programma compilato è immediatamente eseguito dal sistema operativo. In fase di lancio e di esecuzione, un programma compilato è quindi più veloce.
Un'altra conseguenza dell'assenza di interprete è il minor "peso" a tempo di esecuzione, in termini di tempo e memoria. Pertanto, un programma compilato risulta mediamente più veloce. Tuttavia, la differenza reale dipende dalle caratteristiche della macchina e dell'interprete utilizzato.<br />
*Il file programma compilato è generalmente autonomo. Copiato tale quale in un computer con sistema operativo identico o almeno compatibile con quello in cui è stata fatta la compilazione, non necessita di altri programmi o files per essere eseguito.
Al tempo dei primi PC, le [[CPU]] erano straordinariamente deboli e lente. Il vantaggio, in termini di velocità di esecuzione del programma, era assolutamente significativo e critico (secondi invece che minuti). Con i PC attuali e in ambiente grafico, la differenza nella velocità di esecuzione che passa fra unl'esecuzione linguaggiodi compilatoun eprogramma un buoncompilato linguaggioo interpretato rimane proporzionalmente la stessa, ma è praticamente inavvertibile (decimi di secondo invece che centesimi di secondo).
*Il file programma compilato è praticamente immodificabile. Non è possibile modificarlo per errore, ed è molto difficile (anche se un bravo [[hacker]] ci riesce) modificarlo deliberatamente.
*Il file programma compilato è praticamente incomprensibile all'uomo. Questo è molto utile quando il programma, per libera scelta dell'autore, è coperto da copyright. Un programma compilato può essere copiato illecitamente da chiunque, ma solo pochi riescono a "rubare le idee" che il programma contiene. E' uno dei motivi per cui in ambiro Free Software i programmi compilati vengono ''evitati''.
 
*Il filecodice programma compilatooggetto è praticamente immodificabile.: Nonnon è possibile modificarlo per errore, ed è molto difficile (anchemodificarlo sedeliberatamente unper bravoottenere [[hacker]]una cidiversa riesce)esecuzione modificarlodel deliberatamenteprogramma.<br />
==Svantaggi dei linguaggi compilati==
*IlInoltre, fileil programmacodice compilatooggetto è praticamente incomprensibile all'uomo. QuestoCiò èsi moltorivela utile quando il programma, per libera scelta dell'autore, è coperto da [[copyright.]]: Unun programma compilato può essere copiato illecitamente da chiunque, ma soloper pochi riescono a "rubareanalizzare le idee" che il programma contiene. E'è unonecessario deiun motivilavoro perdi cui in ambiro Free Software i programmi compilati vengono ''evitati''[[decompilazione]].
*Durante la programmazione, ogni modifica va verificata ricompilando il progetto e poi lanciando il file eseguibile ottenuto. In termini di rapidità di ''debugging'' e di aggiornamento, la differenza con un linguaggio interpretato è notevolissima.
*Non è possibile lanciare il programma eseguibile su un computer con un sistema operativo non compatibile.
*L'utente medio non ha alcuna possibilità di comprendere la logica del programma. Non è quindi in grado di individuare, o di proporre, alcun miglioramento (se non giudicando dai soli risultati dell'esecuzione.
*L'uso di soli programmi compilati mantiene l'utente finale in uno stato di sostanziale ''analfabetismo informatico''.
 
In termini di rapidità di ''[[debugging]]'' e di modifica del programma, la differenza tra compilatore e interprete è notevolissima.
==Esecuzione più veloce. Ma serve veramente?==
Al tempo dei primi PC, le [[CPU]] erano straordinariamente deboli e lente. Il vantaggio, in termini di velocità di esecuzione del programma, era assolutamente significativo e critico (minuti invece di secondi).
 
*Non è possibile lanciare il programma eseguibile su un computer consu cui non è installato un sistemainterprete operativoper nonil linguaggio in compatibileuso.
Con i PC attuali in ambiente grafico, la differenza nella velocità di esecuzione che passa fra un linguaggio compilato e un buon linguaggio interpretato rimane proporzionalmente la stessa, ma è praticamente inavvertibile (decimi di secondo invece che centesimi di secondo).
 
Il vero motivo per cui attualmente si utilizzano linguaggi compilati è quello di evitare che l'utente ci metta il naso; non a caso, la qiasi totalità dei programmi commerciali (compreso il [[Freeware]], che non è [[Free software]] sono compilati e distribuiti in formato .exe. Il sorgente (il codice scritto dal programmatore) è gelosamente custodito dall'autore.
 
Parallelamente, molto Free Software viene scritto in linguaggio interpretato, ed in caso contrario viene liberamente distribuito anche il codice sorgente.
 
==Alcuni esempi==
Il [[linguaggio C]] è il migliore esempio di linguaggio compilato, ampiamente utilizzato sia in ambiente [[DOS]]/[[Windows]] che in ambiente [[UNIX]]/[[Linux]]/[[Mac]].
 
[[Python]] é uno dei migliori, e più attuali, esempi di linguaggio interpretato; '''altamente''' consigliabile a chi voglia oggi avvicinarsi alla programmazione con un linguaggio su cui è veramente semplice fare i "primi passi", pur consentendo all'utente esperto praticamente qualsiasi cosa.
 
I linguaggi compilati rimangono di scelta in tutti gli ambiti in cui la velocità di esecuzione del software è fondamentale, deve essere monitorata, dove vengono sfruttate a fondo le risorse hardware, o le stesse sono limitate (applicazioni embedded, real time, videogiochi, multimedia).
In questi casi si rinuncia alla relativa facilità di realizzazione del software con linguaggi interpretati, in cambio di maggior controllo delle risorse offerte dai linguaggi compilati.
 
==Voci correlate==
*[[Linguaggio interpretato]]
*[[Linux]]
*[[DosDOS]]
*[[Windows]]
*[[Sistema operativo]]
*[[Python]]
 
== Collegamenti esterni ==
[[categoria:Linguaggi di programmazione]]
* {{Collegamenti esterni}}
[[Categoria:informatica]]
 
[[Categoria:{{portale|informatica]]}}
 
[[categoriaCategoria:Linguaggi di programmazione]]
[[en:Compiled language]]