Domanda

Come si può scegliere se qualcuno giustifica i propri compromessi di progettazione in termini di codice ottimizzato, chiarezza di implementazione, efficienza e portabilità?

Un esempio rilevante ai fini di questa domanda potrebbe essere la gestione di file di grandi dimensioni, in cui un "file di grandi dimensioni" è "abbastanza pochi GB" per un problema che sarebbe semplificato usando metodi di accesso casuale.

Gli approcci per la lettura e la modifica di questo file potrebbero essere:

  1. Usa gli stream in ogni caso e cerca il posto desiderato - che è portatile, ma potenzialmente lento e non chiaro - funzionerà praticamente per tutti i sistemi operativi.
  2. mappa la parte pertinente del file come un blocco di grandi dimensioni. Ad esempio, mmap un pezzo di file da 50 MB per l'elaborazione, per ogni blocco - Funzionerebbe per molti sistemi operativi, a seconda delle sottigliezze dell'implementazione di mmap per quel sistema.
  3. Basta mmap l'intero file: ciò richiede un sistema operativo a 64 bit ed è il modo più efficiente e chiaro per implementarlo, tuttavia non funziona su sistemi operativi a 32 bit.
È stato utile?

Soluzione

Non sei sicuro di ciò che stai chiedendo, ma parte del processo di progettazione è analizzare i requisiti di portabilità e prestazioni (tra gli altri fattori).

Se sai che non dovrai mai eseguire il porting del codice e hai assolutamente bisogno delle migliori prestazioni, allora adegui la tua implementazione di conseguenza. Non ha senso essere portatile solo per se stesso.

Nota anche che se desideri prestazioni e portabilità, non c'è nulla che ti impedisca di fornire un'implementazione per ogni piattaforma. Naturalmente questo aumenterà i costi, quindi davvero, spetta a te dare la priorità alle tue esigenze.

Altri suggerimenti

Senza vincoli, a questa domanda razionalmente non si può rispondere razionalmente.

Stai chiedendo " qual è il miglior colore " senza dirci se stai dipingendo una casa, un'auto o una foto.

I vincoli includerebbero almeno

  • Lingua prescelta
  • Piattaforme target (server multi-CPU di livello industriale o iPhone?)
  • Ottimizzazione per velocità rispetto a memoria
  • Costo (chi sta finanziando questo e c'è un vincolo di consegna?)

Nessun software potrebbe avere " ultimate " portabilità.

Un esempio di questo tipo di problema che viene gestito usando una varietà di metodi ma con un vincolo stretto sia sullo specifico input / output richiesto sia sulla misurazione di "best" sarebbe il progetto WideFinder .

Fondamentalmente, devi pensare prima di scrivere codice. Ogni progetto è unico e un'analisi dei bisogni potrebbe aiutare a decidere ciò che è primordiale per esso. Ciò che renderà la migliore soluzione per qualsiasi progetto dipende da alcune cose ...

Prima di tutto, questo progetto dovrà essere o eventualmente essere multipiattaforma? A seconda della scelta, scegliere il giusto linguaggio di programmazione dovrebbe essere più semplice. Quindi, potresti anche usare più di una lingua nel tuo progetto e questo è del tutto normale. Portabilità non significa necessariamente meno prestazioni. Tutto ciò che implica è che comporta un lavoro più duro per raggiungere i tuoi obiettivi perché avrai bisogno di un codice di qualità. Inoltre, ogni linguaggio di programmazione ha la sua filosofia. Scopri cosa sono. Una cosa è certa, alcuni problemi spesso ritornano ancora e ancora. Questo è il motivo per cui conoscere i diversi schemi di progettazione può fare la differenza a volte, ma alcune lingue hanno i loro modi di dire e possono essere molto rilevanti quando si sceglie una lingua. Un'altra cosa che necessita di qualche riflessione è i diversi approcci che puoi avere per il tuo progetto. Multithreading, socket, sistemi client / server e molte altre tecnologie sono tutti lì per l'uso. Scegliere la tecnologia giusta può aiutare a migliorare un progetto.

Conoscere le esigenze e le diverse soluzioni disponibili oggi è ciò che aiuterà a decidere quando arriva il momento di scegliere i diversi compromessi.

Dipende molto dai driver per il progetto. Se stai facendo uno sviluppo aziendale interno, fai la cosa più semplice che potrebbe funzionare sul tuo hardare target. Mod per richieste di prestazioni secondo necessità.

Se sai di dover supportare diverse piattaforme hardware il primo giorno, dovrai chiaramente scegliere un'implementazione portatile o utilizzare approcci multipli.

La portabilità per il bene della portabilità è stata uno spiel di marketing per Java sin dall'inizio ed è un fatto della vita per C per convenzione, e credo che la maggior parte delle persone che la rispettano "sono cresciute". con Java o C lo dirò.

Tuttavia, la vera portabilità assoluta sarà vera solo per le applicazioni più banali per la maggior parte delle applicazioni con media complessità - qualsiasi cosa con elevata complessità avrà bisogno di modifiche specializzate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top