Domanda

Ho letto di come lo stile di programmazione fail-fast in linguaggi come Erlang finisce con programmi molto più brevi rispetto allo stile difensivo presente nella maggior parte degli altri linguaggi.È corretto per tutti i tipi di programmi e qual è il motivo di ciò?

È stato utile?

Soluzione

I programmi fail-fast non sono necessariamente più brevi dei programmi in stile difensivo:dipende dall'implementazione e dalle misure necessarie per rendere sicuro il tuo codice difensivo.

Nel caso di Erlang, i programmi fail-fast sono generalmente più brevi a causa dello stile dichiarativo e del modo in cui la VM si assicura di generare casi di errore per te.Ad esempio, nella funzione:

day(1) -> sunday;
day(2) -> monday;
day(3) -> tuesday;
day(4) -> wednesday;
day(5) -> thursday;
day(6) -> friday;
day(7) -> saturday;

Qualsiasi valore imprevisto passato alla funzione risulterà in un errore che può essere rilevato e gestito da un altro processo (ad esempio:un supervisore).Inoltre, tali errori non metteranno mai in pericolo il sistema nel suo insieme e non richiederanno l'aggiunta di codice alla funzione stessa: tutto viene eseguito al di fuori del normale percorso di esecuzione mediante comportamenti predeterminati.

In un linguaggio dinamico in cui il fail-fast non è la norma, dovresti controllare manualmente i limiti e lanciare tu stesso un'eccezione.Quindi devi rilevare l'eccezione localmente (prova di livello superiore ...catture incluse) se non vuoi che l'intero sistema vada in tilt.Il codice di gestione degli errori solitamente deve essere inserito nel normale percorso di esecuzione.

In un linguaggio statico in cui il fail-fast non è la norma, la durata del codice dipenderà molto dal sistema di tipi in uso.Se il linguaggio consente di definire tipi in cui i casi limite finiscono per essere controllati dal compilatore, di solito non è necessario gestirli all'interno del codice, al di fuori di eventi non deterministici (file non funzionanti, input inaspettato dell'utente, ecc.). linguaggi con tali sistemi di tipo, molti errori verranno rilevati prima del runtime e quindi non avrai così tanti casi difensivi.

Quando la gestione degli errori non può essere evitata, i linguaggi che supportano idiomi fail-fast (come Erlang) consentiranno un codice probabilmente più chiaro rispetto ai linguaggi che non lo fanno (statici o meno), principalmente perché il codice per casi speciali non è mescolato con il codice per il percorso di esecuzione ideale.

Altri suggerimenti

vedere paragrafi 4.3 e 4.4 di Joe Armstrong tesi .

Lo stile fail-fast di programmazione si concentra su una migliore leggibilità del codice e debugging. L'esperienza utente è un obiettivo secondario:. Un utente può sperimentare messaggi di errore o errori di programma strano, ma la qualità superiore del codice consente ai programmatori di trovare facilmente i bug e risolvere il problema

programmazione stile difensivo, invece, si concentra su input convalida dall'utente e da altre porzioni di codice. Il codice è più prolisso, perché il programmatore deve verificare attentamente in ingresso e non riescono con grazia in caso di errore. Questo ha portato a più di codice (dai programmatori punto di vista) e un'applicazione più robusta (da parte degli utenti punto di vista).

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