Qual è il significato esatto dell'indipendenza dalla piattaforma? [chiuso]

7

Qual è il significato dell'indipendenza dalla piattaforma?

Sto prendendo il caso di Java. Posso eseguire un'applicazione Java su Linux basata su piattaforma Windows? Oppure il contrario?

Posso usare uno stesso (o esatto) algoritmo di programmazione su entrambi i sistemi operativi?

A mio avviso, i tipi di file sono indipendenti dalla piattaforma come video, immagini, documenti ecc.

    
posta Dileep DiL 18.06.2011 - 17:25
fonte

5 risposte

22

Indipendenza dalla piattaforma nel software significa che puoi eseguire del codice con poche o nessuna modifica su più piattaforme.

Il diavolo si trova nei dettagli:

  • Dipende da ciò che definisci "la piattaforma". In alcuni casi questa può essere una configurazione hardware / macchina specifica. In altri gas può essere un "PC generico". In altri casi può essere una macchina virtuale e un ambiente di runtime (come nel caso di Java).
  • Niente è "perfettamente" indipendente dalla piattaforma: ci sono sempre alcuni casi d'angolo che possono catturarti. Ad esempio, se i separatori del percorso del file sono hardcode anziché utilizzare la piattaforma indipendente File.pathSeparator in Java, il tuo codice non funzionerà su Windows e Linux. Come programmatore, devi stare attento a queste cose, usa sempre l'opzione indipendente dalla piattaforma, se possibile, e verifica correttamente su piattaforme diverse se ti interessa la portabilità.
  • Ci sono sempre alcuni vincoli su piattaforme specifiche che non possono essere ignorate. Esempi sono cose come la lunghezza massima dei nomi di file o la RAM disponibile su un sistema. Non importa quanto tu tenti di essere indipendente dalla piattaforma, il tuo codice potrebbe fallire se provi ad eseguirlo su una piattaforma troppo stretta.
  • È importante notare che alcuni linguaggi sono indipendenti dalla piattaforma a livello di codice sorgente (C / C ++ è un buon esempio) ma perdono l'indipendenza dalla piattaforma una volta che il codice è compilato (poiché il codice nativo è specifico per la piattaforma). Java mantiene l'indipendenza dalla piattaforma anche dopo che il codice è stato compilato perché viene compilato in un codice byte indipendente dalla piattaforma (la conversione effettiva al codice nativo viene gestita in un secondo momento dopo che il codice byte è stato caricato dalla JVM).
  • A volte ci sono errori nelle implementazioni linguistiche che si verificano solo su determinate piattaforme. Quindi, anche se il tuo codice è teoricamente portatile al 100%, devi comunque testarlo su piattaforme diverse per assicurarti che non si verifichino errori insoliti!

Nel caso specifico di Java:

  • Java code è indipendente dalla piattaforma nel senso che la stessa applicazione o algoritmi Java (tipicamente compilati in bytecode Java e inseriti in un file .jar) eseguire identicamente su Windows e Linux.

  • Le librerie Java (ad esempio tutti i simpatici set di strumenti open source) sono in genere indipendenti dalla piattaforma, a condizione che siano scritte in puro Java. La maggior parte delle librerie tenta di rimanere con Java puro per mantenere l'indipendenza dalla piattaforma, ma ci sono alcuni casi in cui ciò non è possibile (ad esempio se la libreria deve interfacciarsi direttamente con hardware speciale o chiamare una libreria C / C ++ che usa codice nativo) .

  • La piattaforma Java / ambiente di runtime è indipendente dalla piattaforma nel senso che le stesse librerie (immagini, networking, file IO ecc.) sono disponibili e funzionano allo stesso modo su tutte le piattaforme . Questo viene fatto deliberatamente per consentire alle applicazioni che utilizzano queste librerie di essere in grado di girare su qualsiasi piattaforma. Ad esempio, le librerie Java che accedono al filesystem conoscono il fatto che Windows e Linux usano separatori di percorsi dei nomi di file diversi e tengono conto di ciò per te. Ovviamente, questo significa che sotto la cappa l'ambiente runtime fa uso di funzionalità specifiche della piattaforma, quindi è necessario un JRE diverso per ogni piattaforma. È possibile visualizzare un elenco di alcune delle piattaforme disponibili sul sito di download Java: link

  • La JVM stessa (ovvero la Java Virtual Machine che è responsabile della compilazione JIT e dell'esecuzione del bytecode Java) è indipendente dalla piattaforma nel senso che è disponibile su molte piattaforme (tutto dai mainframe ai telefoni cellulari). Tuttavia specifiche versioni della JVM sono necessarie per ciascuna piattaforma sottostante per tenere conto dei diversi codici di istruzioni native e delle funzionalità della macchina (quindi non è possibile eseguire una JVM Linux su Windows e viceversa). La JVM è confezionata come parte della piattaforma Java / ambiente di runtime come sopra.

Nel complesso, Java è probabilmente più vicino alla vera indipendenza dalla piattaforma che puoi ottenere, ma come puoi vedere c'è ancora un bel po 'di lavoro specifico per la piattaforma sotto il cofano.

Se ci si attiene a librerie e codici Java puri al 100%, la mia esperienza è che si può contare su Java come "efficace" indipendente dalla piattaforma e che generalmente rispetta la promessa di Write Once Run Anywhere. Ma dovresti comunque testarlo !!

    
risposta data 18.06.2011 - 18:32
fonte
5

Hai ragione, l'indipendenza dalla piattaforma significa che lo stesso programma funziona su qualsiasi piattaforma (sistema operativo) senza bisogno di modifiche.

Nel caso di Java l'applicazione viene eseguita in una Java Virtual Machine che di per sé non è indipendente dalla piattaforma. Questa deve essere l'interfaccia tra la macchina reale (sistema operativo) e il codice Java che hai scritto.

Nel caso di video, immagini ecc. questi sono documenti e sono dati per le applicazioni, quindi di solito sono indipendenti dalla piattaforma per natura.

    
risposta data 18.06.2011 - 17:48
fonte
1

In realtà la tecnica per raggiungere l'indipendenza dalla piattaforma è

  • Creazione di una piattaforma intermedia
  • Implementa quello intermedio in ciascuna delle piattaforme di cui hai bisogno (In lingue come JAVA)

Oppure puoi scrivere codice e compilare per ogni piattaforma (C / C ++). Secondo me, questa è anche una sorta di indipendenza dalla piattaforma. E in questo modo si può dire che gli algoritmi sono indipendenti dalla piattaforma.

Hai ragione in termini di vera indipendenza dalla piattaforma per i tipi di file. Ma il termine indipendenza dalla piattaforma non viene solitamente applicato ai file.

    
risposta data 18.06.2011 - 18:03
fonte
1

JAVA è un linguaggio di programmazione indipendente orientato agli oggetti. Il compilatore javac compila il codice sorgente e produce il linguaggio codice Byte (linguaggio universale).

Questo linguaggio non è comprensibile da nessun sistema operativo, deve essere prima elaborato, ed è qui che entra in scena uno speciale programma eseguibile (JVM). Un interprete della JVM legge il bytecode riga per riga e converte le istruzioni del codice byte in un linguaggio comprensibile specifico della macchina (in definitiva codice binario). Pertanto, il codice byte è indipendente dalla piattaforma, ma il codice interpretato è specifico della macchina e verrà eseguito nell'ambiente su cui è installata la JVM. I programmi JAVA sono indipendenti dalla piattaforma e JAVA è indipendente dalla piattaforma.

Lo slogan di Sun MicroSystems era WORA : Write Once Run Anywhere.

    
risposta data 18.06.2013 - 14:15
fonte
0

Poiché la JVM richiede un host, posso dirti che un programma Java non è indipendente dalla piattaforma. Inoltre, il linguaggio Java in base alla progettazione ha dei requisiti sul file system che risultano in nomi di classi brevi se il sistema utilizza una partizione FAT16:

class FOOBAR

è uguale a

class Foobar

e il nome

class AbstractPrinterFactory

impossibile.

Come confronto, C ha pochissimi requisiti di runtime e può quindi offrire maggiore portabilità. È ancora possibile eseguire il backport di programmi C più piccoli su dispositivi veramente di fascia bassa.

    
risposta data 17.05.2014 - 19:50
fonte

Leggi altre domande sui tag