A \u000d
fuga termina um comentário porque as \u
fugas são convertidas uniformemente nos caracteres Unicode correspondentes antes que o programa seja tokenizado. Você poderia igualmente usar \u0057\u0057
em vez de //
para começar um comentário.
Este é um erro no seu IDE, que deve destacar a linha na sintaxe para deixar claro que o \u000d
final do comentário é finalizado.
Este também é um erro de design no idioma. Não pode ser corrigido agora, porque isso interromperia os programas que dependem dele. \u
escapes devem ser convertidos no caractere Unicode correspondente pelo compilador apenas em contextos em que isso "faz sentido" (literais e identificadores de string e provavelmente em nenhum outro lugar) ou devem ter sido proibidos de gerar caracteres no intervalo U + 0000–007F , ou ambos. Qualquer uma dessas semânticas teria impedido que o comentário fosse encerrado pela \u000d
fuga, sem interferir nos casos em que \u
escapes são úteis - observe que isso inclui o uso de \u
escapes nos comentários como uma maneira de codificar comentários em um script não latino. editor de texto poderia ter uma visão mais ampla de onde\u
escapes são significativos do que o compilador. (Não conheço nenhum editor ou IDE que exiba \u
escapes como os caracteres correspondentes em qualquer contexto.)
Há um erro de design semelhante na família C, 1 em que a barra invertida é processada antes que os limites do comentário sejam determinados, por exemplo,
// this is a comment \
this is still in the comment!
Trago isso para ilustrar que é fácil cometer esse erro de design específico, e não percebo que é um erro até que seja tarde demais para corrigi-lo, se você está acostumado a pensar em tokenização e analisar a maneira como os programadores de compilador pensam sobre tokenização e análise. Basicamente, se você já definiu sua gramática formal e alguém aparece com um caso sintático especial - trigraphs, contrabarra de nova linha, codificando caracteres Unicode arbitrários em arquivos de origem limitados a ASCII, qualquer que seja - que precisam ser inseridos, é mais fácil adicione uma passagem de transformação antes do tokenizer para redefinir o tokenizer para prestar atenção ao local onde faz sentido usar esse caso especial.
1 Para pedantes: estou ciente de que esse aspecto de C era 100% intencional, com a lógica - não estou inventando isso - de que lhe permitiria aplicar mecanicamente o código de ajuste forçado com linhas arbitrariamente longas em cartões perfurados. Ainda foi uma decisão incorreta do projeto.