L' \u000d
escape termina un commento perché gli escape \u
vengono convertiti uniformemente nei corrispondenti caratteri Unicode prima che il programma venga tokenizzato. Si potrebbe ugualmente utilizzare \u0057\u0057
al posto di //
per iniziare un commento.
Questo è un bug nel tuo IDE, che dovrebbe evidenziare la riga di sintassi per chiarire che\u000d
termina il commento.
Questo è anche un errore di progettazione nella lingua. Non può essere corretto ora, perché ciò spezzerebbe i programmi che dipendono da esso. \u
gli escape dovrebbero essere convertiti nel corrispondente carattere Unicode dal compilatore solo in contesti in cui ciò "ha senso" (valori letterali e identificativi di stringa, e probabilmente in nessun altro luogo) oppure dovrebbe essere vietato generare caratteri nell'intervallo U + 0000–007F , o entrambi. Ognuna di queste semantiche avrebbe impedito al commento di terminare con l' \u000d
escape, senza interferire con i casi in cui le \u
fughe sono utili; nota che ciò include le uso delle \u
fughe all'interno dei commenti come un modo per codificare i commenti in uno script non latino, perché il l'editor di testo potrebbe avere una visione più ampia di dove\u
gli escape sono significativi rispetto al compilatore. (Non sono a conoscenza di alcun editor o IDE che mostrerà \u
escape come caratteri corrispondenti in qualsiasi contesto.)
Esiste un errore di progettazione simile nella famiglia C, 1 in cui la barra rovesciata viene elaborata prima che vengano determinati i limiti dei commenti, quindi ad es.
// this is a comment \
this is still in the comment!
Ho sollevato questo per illustrare che sembra facile commettere questo particolare errore di progettazione e non realizzare che è un errore fino a quando non è troppo tardi per correggerlo, se sei abituato a pensare alla tokenizzazione e ad analizzare il modo in cui i programmatori del compilatore pensano sulla tokenizzazione e l'analisi. Fondamentalmente, se hai già definito la tua grammatica formale e poi qualcuno presenta un caso sintattico speciale - trigrafi, barra rovesciata-newline, codifica di caratteri Unicode arbitrari in file di origine limitati ad ASCII, qualunque cosa - che devono essere uniti, è più facile aggiungi prima un passaggio di trasformazione del tokenizer piuttosto che ridefinire il tokenizer per prestare attenzione a dove ha senso usare quel caso speciale.
1 Per i pedanti: sono consapevole che questo aspetto di C era intenzionale al 100%, con la logica - non lo sto inventando - che ti permetterebbe di adattare meccanicamente il codice con linee arbitrariamente lunghe su schede perforate. È stata ancora una decisione di progettazione errata.