Codice dipendente da porta e portabilità

0

La domanda è: qual è il codice dipendente dalla destinazione e in che modo influisce sulla portabilità di un software?

La motivazione per fare questa domanda

In una classe CS, mi viene detto che più software di codice dipendente dal target ha, più sarà portatile. Ma mi sembra sbagliato, in realtà penso che sia il contrario.

La giustificazione era che il codice dipendente dall'obiettivo significa un'implementazione specifica per un target e più target che si intende significa che è possibile eseguire software su più target. (L'obiettivo è definito come un ambiente hardware e software) Poiché è possibile eseguire il software su più target, rende il software più portabile.

    
posta ferit 09.05.2017 - 22:22
fonte

2 risposte

3

Justification was that target-dependent code means an implementation that is specific to a target and more target you cover means you can run software on more targets. ... As you can run the software on more targets, it makes the software more portable.

C'è una differenza molto importante tra i programmi che possono essere fatti per funzionare correttamente su più target e programmi scritti con codice portatile.

Assente uno standard, il modo in cui il codice viene eseguito correttamente su più destinazioni è quello di scrivere un'implementazione per target o gruppo di destinazioni che si comportano nello stesso modo. Questo tipo di sviluppo era il peggiore nel codice sviluppato per funzionare sui sistemi Unix durante gli anni '80 e l'inizio degli anni '90, in quanto i venditori concorrenti cercavano di catturare il più possibile il mercato e diventare lo "standard". Non era insolito per un programma fare un uso estensivo della compilazione condizionale o dell'esecuzione per farlo funzionare sulla zattera di sapori specifici del vendor di System V e BSD. Le implementazioni possono essere convenientemente legate insieme in un singolo file e selezionate in base a fattori esterni, ma ciò non cambia il fatto che ci siano più implementazioni. Programmi come questo non sono, per definizione, portabili perché ciò che viene eseguito su ogni target è diverso (cioè, è codice specifico target ). Sono, come fa notare gnasher729 nella sua risposta, ported .

La portabilità deriva dall'adozione di standard che offrono un'API ben definita per i programmi da utilizzare che gestiscono le idiosincrasie di un obiettivo dietro le quinte. Ad esempio, posso essere sicuro che questo bit di C verrà compilato ed eseguito come previsto su Windows, Linux, Solaris o OS X:

int file = open("somefile", O_RDONLY);
lseek(file, 12345, SEEK_SET);
char buffer[1024];
read(file, buffer, 1024);
/* Do something with buffer */
close(file);

Questo è un codice portatile perché tutti i target sopra elencati hanno compilatori e librerie ISO C conformi a POSIX, dove P sta per portable .

La cartina di tornasole per la portabilità non deve apportare modifiche perché possa essere eseguita su un nuovo target. Quello che il tuo prof sta dicendo si riduce a "un programma può essere eseguito su qualsiasi target in cui puoi battere il codice sorgente in sottomissione". Nel mio libro, questo è l'esatto opposto della portabilità e lo rende completamente sbagliato.

    
risposta data 11.05.2017 - 16:28
fonte
4

Quando chiamiamo software "portatile" significa che è facile far funzionare il software su bersagli diversi. Di solito ciò significa che è possibile far funzionare il software su bersagli diversi con un codice dipendente da target molto ridotto. Il software che è meno portabile ha bisogno di più codice dipendente dall'obiettivo per farlo funzionare su obiettivi diversi.

Ovviamente se fai girare il software su dieci obiettivi, avrai più codice dipendente dall'obiettivo rispetto a due bersagli. Ma ciò non significa che il software sia "portatile". Significa che il software è stato portato.

    
risposta data 09.05.2017 - 23:25
fonte

Leggi altre domande sui tag