Portabilità

Da Wikipedia, l'enciclopedia libera.

La portabilità, (in lingua inglese porting), in informatica, indica un processo di trasposizione, a volte anche con modifiche, di un componente software, volto a consentirne l'uso in un ambiente di esecuzione diverso da quello originale.

Due attività collegate con il porting ma distinte da esso sono l'emulazione e la compilazione incrociata o cross-compiling.

Causa[modifica | modifica sorgente]

L'operazione di porting, cioè la creazione (scrittura) di un port, può essere richiesta a causa delle differenze tra le CPU, dalle diverse interfacce (Application programming interface API) dei sistemi operativi, dalla diversità dell'hardware o per delle sottili incompatibilità dell'implementazione del linguaggio di programmazione sull'ambiente target (quello su cui deve essere compilato il programma). Oltre alle più blasonate cause il porting può essere richiesto quando il programmatore ritiene che il codice di origine non sia stato scelto con attenzione, e di conseguenza non sia adatto allo scopo prefisso.

Descrizione[modifica | modifica sorgente]

Il porting può essere un'attività complessa e costosa; ciò dipende dalla "distanza" tecnologica fra l'ambiente di origine e l'ambiente di destinazione, dal tipo di componente software da "portare" e dagli strumenti con cui esso è stato costruito.

Un componente software si dice portabile se è possibile eseguirne il porting (specialmente se semplice e poco costoso in termini di risorse di lavoro); in questo senso, la portabilità si può considerare un caso particolare di riusabilità del software. Il caso limite è quello in cui un componente software può essere riutilizzato su diverse piattaforme senza che questo comporti alcuna modifica, ed oggi si tende a usare il termine portabilità proprio in quest'ultima accezione, che in ambito hardware o sistemistico è detta anche interoperabilità.

Nello scenario odierno, in cui calcolatori di ogni tipo sono in grado di comunicare e scambiarsi dati e programmi attraverso Internet, la portabilità rappresenta un fattore spesso decisivo nella scelta di tecnologie, metodologie e strumenti per la produzione del software. Allo stesso tempo, l'emergere di standard come quelli promulgati da ISO e ANSI (p.es. riguardo a formati di archiviazione dati o linguaggi di programmazione), e la conseguente convergenza di tecnologie e sistemi informatici rispetto ad almeno alcuni aspetti del loro funzionamento, gioca evidentemente a favore della portabilità del software in generale.

Esistono un gran numero di strumenti che aiutano il porting, come GCC, che permette di compilare diversi linguaggi sotto diverse architetture, e autoconf, che prima della compilazione, automatizza la ricerca di quelle piccole differenze che potrebbero impedire di compilare il sorgente e adatta di conseguenza il programma.

Esempio di porting[modifica | modifica sorgente]

Benché vi siano numerose sfumature nel significato che si attribuisce al termine "portabilità" in diversi contesti, vale la pena enfatizzarne almeno due: la portabilità dei dati e la portabilità dei programmi.

Portabilità dei dati[modifica | modifica sorgente]

Dipende dal formato in cui i dati sono archiviati su file. Per esempio, un file di testo memorizzato come sequenza di codici ASCII si considera generalmente portabile, in quanto questo tipo di codifica è oggi (quasi) universalmente adottata dai costruttori di calcolatori.

Portabilità dei programmi[modifica | modifica sorgente]

La portabilità dei programmi dipende essenzialmente dal linguaggio di programmazione usato. Alcuni linguaggi non si possono considerare portabili (ovvero non consentono la scrittura di programmi portabili) per il semplice motivo che per alcuni ambienti non esiste un interprete o compilatore del linguaggio; oppure perché i compilatori o interpreti disponibili in diversi ambienti presentano alcune differenze più o meno sottili relativamente alla sintassi che accettano o alla semantica che attribuiscono ad alcuni costrutti; cosicché, un programma che funziona correttamente su una macchina potrebbe esibire dei malfunzionamenti più o meno gravi, o addirittura non compilare, su un'altra. Quest'ultimo problema può essere risolto pubblicando uno standard del linguaggio, ovvero una sua descrizione il più possibile precisa e non ambigua, eventualmente gestita da un ente "autorevole" che abbia il compito di certificare l'aderenza di compilatori e interpreti a tale descrizione. Un esempio celebre in questo senso è data dal linguaggio C, di cui hanno fornito uno standard prima ANSI e poi ISO. Di conseguenza, i programmi C sono portabili nel senso che possono essere compilati in un qualsiasi ambiente (grazie all'API comune), ottenendo programmi in linguaggio macchina ovviamente diversi ma che esibiscono un comportamento semanticamente equivalente.

Si osservi che nonostante il C e il C++ siano linguaggi portabili, la diversità dei compilatori dei due linguaggi di programmazione pone una serie di problemi alla portabilità. Il solo fatto di avere un programma in C oppure in C++ non garantisce la portabilità del medesimo e quindi spesso bisogna fare uno sforzo aggiuntivo per superare le differenze tra i due sistemi e tra i compilatori.

Una forma più radicale di portabilità viene fornita dai linguaggi interpretati, ovviamente sotto la condizione che esistano interpreti per i diversi ambienti di interesse, e che questi interpreti esibiscano un comportamento equivalente (p.es. conforme a uno standard). In questo caso, il "porting" di un programma non richiede neppure ricompilazione. È per esempio il caso di Java; il software Java può essere eseguito in qualunque ambiente in cui sia installata la così detta macchina virtuale Java (più precisamente il JRE, Java Runtime Environment, scaricabile gratuitamente dal sito internet della Oracle). Altro aspetto della portabilità Java è quello che rende possibile l'inserimento di piccoli programmi Java (applet) all'interno di pagine Web destinate a essere visualizzate da diversi browser in esecuzione su macchine completamente diverse.

Il port dei videogiochi[modifica | modifica sorgente]

Port indica anche quelle versioni di videogiochi che, scritte per poter essere eseguite su una certa piattaforma, vengono convertite per poterle eseguire su altre (per esempio passando da una console per videogiochi a un computer). I primi port di videogiochi erano comunque vere e proprie riscritture del codice; in tempi recenti si preferisce invece scrivere e sviluppare il gioco utilizzando programmi capaci di emettere codice sorgente sia per computer che per console, delegando quindi l'operazione di porting a tali programmi.

Arcade perfect[modifica | modifica sorgente]

Arcade perfect è un termine utilizzato per descrivere videogiochi per varie piattaforme realizzati praticamente "copiando" la versione arcade, senza alterare alcunché. Questo significa che grafica, sonoro e giocabilità, assieme a tutte le altre caratteristiche del gioco, sono identiche alla versione arcade.

Si tratta dunque di porting, la conversione del programma originale per una nuova piattaforma, e non di emulazione vera e propria come avviene, ad esempio, con MAME.

Voci correlate[modifica | modifica sorgente]

Informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica