Portabilità di un linguaggio

Messaggioda Fab996 » 27/08/2018, 16:03

Perché i linguaggi interpretati sono più portabili rispetto ai linguaggi compilati?
Ultima modifica di Fab996 il 28/08/2018, 08:44, modificato 1 volta in totale.
Fab996
Senior Member
Senior Member
 
Messaggio: 555 di 1118
Iscritto il: 10/10/2015, 11:05

Re: Portabilità di un linguaggio

Messaggioda marco2132k » 27/08/2018, 17:01

In realtà la portabilità di un linguaggio è un tema parecchio vasto, che dubito riesca a venire liquidato in poche righe1.
Da quanto ho sempre sentito dire, è il codice scritto in un linguaggio interpretato ad essere più facilmente trasferibile in altre architetture ("write once, run (debug) everywhere" no?). Se è questo che intendi, credo che il motivo sia il minore lavoro che spetta al programmatore nell'ottimizzazione del codice rispetto a una determinata macchina, essendo questo svolto dall'implementazione stessa dell'interprete. Per definizione un linguaggio compilato è legato all'ISA per cui lavora il compilatore.

Se ciò che intendi è invece il linguaggio stesso (il compilatore, la sdk..), tutto ciò che al momento mi viene in mente è la storia di C (non C++ eh): un compilatore relativamente semplice, portato in (riscritto per) una pletora di sistemi differenti ("WOCE"); rimaneggiare il source nel passaggio da un'architettura ad un altra credo sia comunque inevitabile: la somma di due operandi sarà pure tradotta differentemente nell'eseguibile, però nota che ad esempio le operazioni di i/o comunemente gestite dalla libreria standard vanno anch'esse adattate, anche se non direttamente dall'utente del linguaggio. Un interprete deve per sua natura essere legato all'architettura nella quale deve "interpretare" il codice, quindi forse (forse invece sto dicendo una cazzcosa stupida) è un applicativo più complesso e più legato alla stessa di un compilatore

Altra diramazione è quella tra linguaggio macchina (assembly, anche le sue derivazioni di più alto livello) e linguaggio compilato: mentre il primo è tutt'uno (più o meno) con l'ISA dove si targetta lo sviluppo, il secondo è per l'astrazione voluta dal compilatore più indipendente da essa, e la disponibilità del compilatore stesso su più macchine permette una maggiore portabilità del prodotto finale.

Comunque attendi risposte più cristiane: non ho a che fare da parecchio con queste cose, né mai le ho approfondite più di tanto :roll:

Note

  1. E ti premetto che esula parecchio dalla mia competenza...
marco2132k
Advanced Member
Advanced Member
 
Messaggio: 48 di 2053
Iscritto il: 18/02/2018, 23:52

Re: Portabilità di un linguaggio

Messaggioda apatriarca » 27/08/2018, 17:37

Dove hai letto questa frase? Sinceramente ritengo non abbia senso siccome, come già detto giustamente da @marco2132k, il discorso è molto più complicato e sfugge ad una semplice approssimazione come quella che hai scritto.

Il primo problema è che non è semplice separare i linguaggi nelle due categorie di compilati e interpretati. Esistono infatti situazioni ibride, come linguaggi compilati in una rappresentazione intermedia o script che vengono compilati just in time. Esistono inoltre differenze di portabilità notevoli all'interno delle due famiglie. Ci sono sia linguaggi compilati che interpretati che sono disponibili per una sola architettura mentre altri linguaggi (sia compilati che interpretati) sono disponibili per decine di architetture.

Possiamo poi parlare di portabilità dell'eseguibile o del codice sorgente. La portabilità di un eseguibile, come nel caso dei linguaggi interpretati o di linguaggi come Java, è la portabilità del file che può poi essere eseguito dall'utente. In generale la portabilità di un file eseguibile dipende dalla portabilità dell'interprete o della macchina virtuale. In teoria (in pratica è più complicato) un linguaggio che dispone di questo tipo di portabilità può essere eseguito usando lo stesso file su più sistemi senza che sia necessario modificarlo/ricrearlo. La portabilità del codice sorgente significa che, a patto che siano disponibili i necessari strumenti di sviluppo sulla nuova architettura, il software può essere preparato per quella nuova architettura senza modifiche.

In pratica, a meno di star parlando di software che fanno solo uso di librerie standard, un codice può essere molto meno portabile dei suoi strumenti di sviluppo o interprete o macchina virtuale. Non è insomma per esempio difficile creare un software che funziona solo su Windows facendo uso di un qualsiasi linguaggio disponibile per molte più architetture.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5084 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Portabilità di un linguaggio

Messaggioda Fab996 » 28/08/2018, 08:59

Volevo dire il contrario, un linguaggio interpretato risulta più portabile rispetto ad uno compilato. Da quanto credo di sapere, un linguaggio come il C attraversa 4 fasi e durante quella di compilation e assembly il codice viene viene tradotto nel codice oggetto di una determinata architettura, quindi penso per questo sia meno portabile. Mentre per i linguaggi interpretati non so molto bene come funzioni.
Fab996
Senior Member
Senior Member
 
Messaggio: 556 di 1118
Iscritto il: 10/10/2015, 11:05

Re: Portabilità di un linguaggio

Messaggioda apatriarca » 28/08/2018, 09:23

Stai quindi parlando di portabilità dell'eseguibile. In questo caso è certamente vero che qualcosa che va interpretato può essere eseguito su architetture diverse mentre non è il caso per un eseguibile compilato per la macchina specifica. Tuttavia, parlando di linguaggi di programmazione ha più senso parlare di portabilità del codice sorgente. La differenza tra compilato e interpretato non è infatti insita nel linguaggio. Esistono ad esempio interpreti per il C e compilatori per Python. Da questo punto di vista un linguaggio come C è probabilmente il più portabile.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5085 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Portabilità di un linguaggio

Messaggioda Fab996 » 28/08/2018, 11:12

Un programma compilato su una determinata maccchina non ha bisogno di una nuova compilazione su una macchina diversa ma che ha stesso processore della prima?
Fab996
Senior Member
Senior Member
 
Messaggio: 557 di 1118
Iscritto il: 10/10/2015, 11:05

Re: Portabilità di un linguaggio

Messaggioda apatriarca » 28/08/2018, 11:56

Se il sistema operativo è lo stesso non ne ha bisogno.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5086 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Portabilità di un linguaggio

Messaggioda Fab996 » 28/08/2018, 13:17

Ma il codice oggetto non dipende dalla particolare architettura del processore, quindi dal ISA e non dal sistema operativo?
Fab996
Senior Member
Senior Member
 
Messaggio: 558 di 1118
Iscritto il: 10/10/2015, 11:05

Re: Portabilità di un linguaggio

Messaggioda apatriarca » 28/08/2018, 13:26

Un eseguibile contiene più informazioni rispetto alle istruzioni che vengono eseguite. Queste informazioni sono memorizzate in un formato che dipende dal sistema operativo.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5087 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite