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.