Una cosa che nessuno ha ancora menzionato, quindi lo accennerò: Il desiderio di annidare i commenti spesso indica che il programmatore sta facendo male.
Innanzitutto, ammettiamo che l'unica volta in cui "il nesting" o "non nidificante" è visibile al programmatore è quando il programmatore scrive qualcosa strutturalmente come questo:
do_something();
/* comment /* nested comment */ more comment */
do_something_else();
Ora, quando viene in pratica una cosa del genere? Certamente il programmatore non sta scrivendo commenti annidati che letteralmente assomigliano allo snippet sopra! No, in pratica quando annidiamo i commenti (o vorremmo poterli annidare), è perché vogliamo scrivere qualcosa del genere:
do_something(); /* do a thing */
/* [ajo] 2017-12-03 this turned out to be unnecessary
do_something_else(); /* do another thing */
*/
E questo è BAD. Questo non è un modello che (come designer di linguaggi) vogliamo incoraggiare! Il modo corretto per scrivere lo snippet sopra riportato è:
do_something(); /* do a thing */
Quel codice "sbagliato", quella falsa partenza o qualsiasi cosa fosse, non appartiene alla base del codice. Appartiene, nella migliore delle ipotesi, nella storia del controllo della sorgente. Idealmente, non avresti mai nemmeno scritto il codice sbagliato, giusto? E se il codice sbagliato stava servendo lì, avvisando i manutentori di non ripristinarlo per qualche motivo, beh, questo è probabilmente un lavoro per un commento del codice ben scritto e intenzionale cercando di esprimere "don" 't fare X' semplicemente lasciando un vecchio codice che fa X, ma commentato, non è il modo più leggibile ed efficace per impedire alle persone di fare X.
Tutto questo si riduce a una semplice regola empirica che potresti aver già sentito prima: Non commentare il codice. (la ricerca di questa frase diventerà una lotto of opinioni in agreement .)
Prima di chiedere: sì, lingue come C, C # e C ++ forniscono già al programmatore un altro strumento per "commentare" grandi blocchi di codice: #if 0
. Ma questa è solo una particolare applicazione del preprocessore C, che è uno strumento grande e utile a sé stante. In realtà sarebbe estremamente difficile e speciale-casey per un linguaggio che supporti la compilazione condizionale con #if
e tuttavia non supporto #if 0
.
Quindi, abbiamo stabilito che i commenti nidificati sono rilevanti solo quando il programmatore sta commentando il codice; e abbiamo stabilito (tramite il consenso di molti programmatori esperti) che commentare il codice è una brutta cosa.
Per completare il sillogismo, dobbiamo accettare che i progettisti di linguaggi hanno interesse a promuovere le cose buone e scoraggiare le cose cattive (supponendo che tutto il resto sia uguale).
Nel caso di commenti annidati, tutto il resto è uguale - puoi tranquillamente ignorare le risposte con basso voto che affermano che l'analisi di% nidificato di co_de sarebbe in qualche modo "difficile" per il parser. (% Nidificato% co_de nidificato non è più difficile di% nidificato nidificato, che quasi ogni parser al mondo deve già gestire.)
Quindi, a parità di tutti gli altri, un disegnatore linguistico dovrebbe rendere facile per annidare commenti (cioè, commentare un codice), o difficile? Ricordare che commentare il codice è una brutta cosa.
Q.E.D.
Il testo della nota. Nota che se non permetti i commenti annidati, allora
hello /* foo*/bar.txt */ world
è un "commento" fuorviante - equivale a
hello bar.txt */ world
(che è probabilmente un errore di sintassi). Ma se fai permetti i commenti nidificati, allora
hello /* foo/*.txt */ world
è un "commento" fuorviante - equivale a
hello
ma lascia il commento aperto fino alla fine del file (che di nuovo è quasi certamente un errore di sintassi). Quindi nessuno dei due modi è particolarmente meno incline a errori di sintassi non intenzionali. L'unica differenza sta nel modo in cui gestiscono l'antipattern intenzionale del codice commentato.