Multipiattaforma: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
GrouchoBot (discussione | contributi)
m r2.6.4) (Bot: Aggiungo: tr:Çapraz platform yazılımları
Riga 3:
 
==Linguaggi di programmazione e applicazioni==
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).
Molti linguaggi informatici sono per loro stessa natura multipiattaforma poiché per un sistema ad [[alto-livello]] e comprensibile all'essere umano di istruire una [[CPU]] non c'è bisogno di dipendere strettamente da un particolare sistema operativo. Comunque, per fare cose del tipo creare una [[interfaccia grafica]] ([[GUI]]) usando il sistema dei [[widget]], un programma fa ''[[linking]]'' a delle [[libreria (informatica)|librerie]] che potrebbero essere specifiche per il sistema sul quale lo [[Programmatore|sviluppatore]] lavora. Sebbene il C++ di per sé è multipiattaforma, un programma scritto per [[Microsoft Windows|Windows]] che usa le [[Application programming interface|API]] di [[Win32]], ad esempio, solitamente non riuscirà ad essere compilato anche su un sistema [[Unix]]. Ci sono poi parecchie differenze su come gli sviluppatori dei vari [[compilatore|compilatori]] interpretano le [[specifica (informatica)|specifiche]] di un determinato linguaggio; in questi casi un programma potrebbe richiedere qualche accortezza in più prima di essere compilato su più sistemi.
 
Tuttavia, per numerosi compiti, è necessario che il programma faccia riferimento a delle [[Application programming Interface|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/>
Alcuni linguaggi di programmazione come [[Java (linguaggio)|Java]] sono stati disegnati per funzionare su ogni piattaforma che potesse usufruire di una [[virtual machine]]. Questi linguaggi, che usano il [[bytecode]] come rappresentazione compilata oppure che interpretano [[script]] direttamente, non hanno bisogno di essere compilati per un particolare [[sistema operativo]]. Le librerie native del sistema operativo non sono [[Linking|legate]] al codice distribuito, bensì l'ambiente [[run time]] reimplementa molte delle stesse funzionalità o fornisce una connessione comune tra funzioni analoghe sui differenti sistemi. È possibile però creare applicazioni Java che "girano" solo su un particolare sistema, usando [[Java Native Interface|JNI]] o usando un compilatore ''bytecode-a-linguaggio_macchina'' (''bytecode-to-machinecode''); ciò non è necessario nella maggior parte dei casi.
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 [[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)|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==