Multipiattaforma: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Luckas-bot (discussione | contributi)
m alcuni link sistemati
Riga 5:
Molti linguaggi informatici ad alto livello sono per loro stessa natura multipiattaforma, poiché sono definiti per una macchina astratta (cfr. la macchina astratta C, la macchina virtuale del Java e di altri linguaggi).
 
Tuttavia, per numerosi compiti, è necessario che il programma faccia riferimento a delle [[Application programming Interfaceinterface|API]] che sono diverse sui diversi sistemi operativi (gestione delle finestre, accesso allo ''hardware'', funzioni per il ''[[multithreading]]'', e così via). Ad esempio, sebbene il C++ di per sé sia multipiattaforma, un programma scritto per [[Microsoft Windows|Windows]] che usa le [[Application programming interface|API]] di [[Win32]], solitamente non riuscirà ad essere compilato anche su un sistema [[Unix]], in quanto le API che rendono disponibili quelle stesse funzionalità su Unix sono scritte diversamente.<br/>
Una soluzione comune è quella di realizzare una API intermedia, implementata in una [[libreria (informatica)|libreria]] che sia a sua volta portabile, e quindi implementata in modo diverso per le diverse piattaforme (mantenendo invariata l'interfaccia). Il codice del programma viene ''[[linking|linkato]]'' a questa libreria. Un esempio tipico è quello delle [[Interfaccia grafica|interfacce grafiche]] ([[GUI]]).<br/>
Molti linguaggi offrono una piattaforma costituita da librerie comuni (''librerie standard''), che permettono una copertura maggiore o minore delle esigenze tipiche di un programma.
 
Un altro problema è dato dal fatto che un linguaggio può ''non specificare'' il comportamento di una certa sintassi; in questo caso, il comportamento effettivo dipende dalla implementazione specifica in uso a [[tempo di esecuzione]], e ciò rende possibile scrivere un programma il cui corretto funzionamento si fondi su uno di questi comportamenti specifici (con la conseguenza che il programma non risulta portabile).
 
Inoltre, per alcuni linguaggi, compilatori diversi rispettano in modo diverso o incompleto le [[specifica (informatica)Specifica|specifiche]] del linguaggio stesso; in questi casi potrebbe essere necessario fare maggiore attenzione nella scrittura del [[codice sorgente]] di un programma, prima di compilarlo su più sistemi.
 
==Limiti e soluzioni==
Poiché fornire e [[collaudoCollaudo del software|collaudare]] versioni compilate di un programma per ogni [[Sistema operativo|OS]] ed ogni CPU è praticamente impossibile, i progetti di [[software libero]] ([[open source]]), o che altrimenti permettono all'utente di compilare il proprio ''object code'', possono essere considerati ''più'' multipiattaforma. Allo stesso modo, i [[Linguaggio interpretato|linguaggi interpretati]] o che richiedono una ''virtual machine'' sono più multipiattaforma quando ognuno può compilarsela. [[Hotspot (informatica)|Hotspot]], la virtual machine di [[Java (linguaggio)|Java]] della [[Sun Microsystems]], è fornita solo sotto forma di binari [[precompilati]], con supporto per parecchie piattaforme (''ma non tutte'', nemmeno potenzialmente). Per esempio, Sun supporta [[Linux|GNU/Linux]] solo sull'architettura [[i386]] (e parzialmente [[AMD64]]) così che chiunque ha Linux su un [[PowerPC]] o su computer [[SPARC]] non può utilizzare Java, se non compilando nel linguaggio macchina nativo oppure utilizzando strumenti di terzi.
 
Molte [[Application programming interface|API]] sono specifiche per una singola piattaforma. Si può dire che le [[OpenGL]] siano invece multipiattaforma perché non sono legate a un particolare sistema operativo, architettura CPU o marca di hardware grafico. API legate a una sola piattaforma possono essere ricreate sugli altri sistemi creando un livello di compatibilità, come ad esempio le librerie [[WINE]], che consentono ai programmi che richiedono le librerie di [[Microsoft Windows|Windows]] di poter funzionare su UNIX.