Users should never see assertion errors (uncaught exception in
general) and therefore the assertion message does not need to describe
what went wrong.
In molti contesti, le asserzioni sono meglio utilizzate per individuare i bug (errori del programmatore) - cose che non dovrebbero mai accadere. Sono idealmente catturati nei test interni prima che raggiungano le mani dell'utente (e spesso servono allo scopo di individuare più problemi in anticipo durante i test interni anziché far passare i problemi agli utenti). Sono diversi dall'eccezionale flusso di controllo che è in genere il risultato di un errore esterno al di fuori del controllo del programmatore (provare a caricare un file corrotto, ad es.) E non in realtà un bug.
Nell'improbabile (ma non sempre impossibile) evento che possono e finiscono per raggiungere l'utente, dovrebbe essere ovvio quale tipo di messaggio di errore di asserzione sembra meno orribile per un utente normale.
Is there an additional explanation of which type of assertion messages
is better or why both types are unnecessary (other than personal
preference)?
Forse potrebbe essere utile eseguire ulteriori errori di asserzione?
Ad esempio, potrei eseguire una compilazione di debug di un'applicazione in un ambiente di team dopo aver acquisito nuovo hardware e driver ed eseguire un errore di asserzione come:
"Impossibile allocare l'oggetto buffer vertice!" .
Aha! Immediatamente so che il problema è nel codice GPU. Potrebbe non essere nemmeno una mia responsabilità, potrebbe essere il codice di Fred. Ora posso semplicemente rimbalzare il problema su Fred senza nemmeno studiare il suo codice sorgente.
Se ho il controllo del codice, tende ancora a darmi molte informazioni su quello che è successo a colpo d'occhio, che può essere piuttosto rilassante.
L'alternativa ai commenti consiste nel scavare nel codice sorgente, nella riga esatta del codice e nel file di origine in cui l'asserzione ha avuto esito negativo, quindi leggere i commenti, con un messaggio di errore dell'asserzione come:
Errore di asserzione in some_path / something / some_source.ext: 119: assert (successo) .
E anche quel piccolo momento di suspense in cui ora si scava in quel file sorgente citato e si va al numero di linea specificato per cercare di capire cosa diavolo è successo può essere piuttosto stressante, specialmente perché le asserzioni non dovrebbero mai fallire (ma a volte lo fanno comunque, facendoli davvero spiacevoli sorprese).
In generale è molto più stressante per me se entro nel mio appartamento a luci spente e le persone iniziano a urlare "RARRRRRGH!" in cima ai loro polmoni prima di cantare buon compleanno. È molto meno stressante se salta quella parte e inizia a cantare tanti auguri. "Phew, ecco perché mi hanno sorpreso!"
Direi che è piuttosto un sollievo dallo stress almeno per vedere più informazioni relative al motivo per cui un'affermazione ha fallito immediatamente nello stesso senso senza scavare nel file sorgente dove si è verificato dopo ottenendo quello sorpresa a sorpresa.
Nello stesso senso, se il tuo codice non riesce a compilare, non vuoi andare a cercare un numero di riga specifico di un file esterno contenente documentazione per ottenere anche una descrizione umana a distanza del perché la compilazione non è riuscita. È molto più rilassante conoscere il problema prima e avere almeno un po 'di informazioni in più sul motivo per cui questo errore imprevisto si è verificato il più rapidamente possibile dal momento che altrimenti ti lascerà di cattivo umore. Immagina se gli errori di compilazione ti mostrassero un dump esadecimale seguito da una citazione di un numero di riga specifico di un file di documento esterno tramite il quale puoi cercare la causa dell'errore.
Per i messaggi di errore, direi che le informazioni più lusinghiere sono spesso informazioni contestuali che ti forniscono un buon indizio su dove si è verificato l'errore (da un punto di vista di alto livello che non richiede a un numero di riga specificato di un file sorgente specificato) e non semplicemente perché si è verificato, poiché è tipicamente la prima reazione istintiva quando si incontra un fastidioso assertion failure ("Dove diavolo è successo?" che può a volte è una preoccupazione ancora più immediata del perché sia accaduto).