Vale la pena supportare big-endian per un'applicazione solo desktop?

2

Da quello che ho letto (altre domande sul sito, ecc ...) la stragrande maggioranza dei sistemi desktop ha architetture little-endian e Windows non supporta nemmeno big-endian. Ora mi chiedo se valga la pena di fare uno sforzo in più per gestire endianness per il piccolo numero di sistemi desktop big-endian (se ce ne sono) disponibili. L'applicazione in questione è solo a 64 bit e portatile (Windows e Linux) nel caso sia pertinente.

Un vantaggio pratico di andare esclusivamente little-endian sarebbe di risparmiare sulle conversioni htonl/ntohl per le comunicazioni di rete, consentendo l'invio diretto dei dati binari (dall'applicazione ad altre istanze di se stesso su una macchina remota). La differenza di prestazioni sarebbe trascurabile, ma ridurre la complessità del codice è piuttosto allettante.

C'è un motivo convincente per supportare big-endian sui desktop? Al giorno d'oggi i sistemi big-endian vengono utilizzati per i desktop?

    
posta Wingblade 31.07.2018 - 17:58
fonte

3 risposte

4

Si noti che "ordine dei byte di rete" è big endian , quindi se si stanno trasmettendo strutture standardizzate, è necessario per fare quella conversione.

Generalmente, la maggior parte delle persone evita questo problema trasmettendo i dati in una forma testuale (come XML o JSON).

Non ci sono chipset importanti e molto popolari che usano big endian, quindi potrebbe non essere un problema pragmatico per te. Ma le cose cambiano. E il codice ha un modo per essere rimosso da un posto e usato in un altro.

Scriverò il codice in modo convenzionale, supportando l'ordine dei byte di rete, in quanto questa sarà la cosa meno sorprendente da fare. Come dici tu, i costi delle prestazioni sono davvero minimi. E considera l'utilizzo di un formato testuale come JSON. Questo rende l'intero problema scomparso e ha anche altri vantaggi (facile lettura dei dati di traffico da parte delle persone e più facile sfruttare altri strumenti che si aspettano dati in formato JSON o XML).

    
risposta data 31.07.2018 - 18:23
fonte
2

Non pensare solo a cose nel tuo codice. Non sai mai quanto tempo sarà in uso.

Conosco personalmente i prodotti in uso dai primi anni '90, passando da MacOS basato su 68000 tramite PA-RISC HP-UX, poi x86 Linux a Windows x86 attualmente. Ci sono stati alcuni cambiamenti di architettura, endianness, sintassi dei file ecc. Durante quel periodo.

Quindi, se il tuo codice non accetta volentieri ad es. CPU big-endian, scrivere un test unitario che fallisce se eseguito su una macchina del genere. Poi tra 10 anni, quando i tuoi futuri colleghi trasferiranno il tuo codice su una nuova architettura, avranno una chiara indicazione del motivo per cui non funzionerà immediatamente.

    
risposta data 02.08.2018 - 19:39
fonte
0

Negli ultimi quattro anni non ho visto alcun codice che dipendesse da endianness, o avrebbe potuto essere reso più semplice o più veloce formulando ipotesi al riguardo.

    
risposta data 03.08.2018 - 08:58
fonte

Leggi altre domande sui tag