Entiendo que CSS solo admite comentarios de varias líneas como tales
/* foobar */
¿Por qué no hay soporte para comentarios de una sola línea?
// foobar
Son tan comunes en la programación y parecen particularmente útiles para un lenguaje como CSS donde cada regla está en su propia línea.
Si no hubo una razón histórica particular para esta decisión, ¿qué ha impedido a los navegadores avanzar hacia su soporte?
Respuestas:
Compatibilidad al revés
La introducción de comentarios de una sola línea a la sintaxis CSS podría cambiar el significado de los archivos que actualmente usan el token
//
. Los proveedores de navegadores son muy reacios a introducir cambios que podrían romper las páginas existentes.CSS se define con reglas de análisis "tolerantes a errores" muy precisas, lo que significa que incluso si escribe algo sintácticamente ilegal, existen reglas precisas sobre cómo debe proceder el análisis. Si
//
se detecta una secuencia ilegal de caracteres (como ) dentro de una declaración, la declaración actual se descarta y todo hasta que se omite el siguiente punto y coma.CSS está diseñado de esta manera para permitir la introducción de una nueva sintaxis sin romper los navegadores antiguos. Los navegadores antiguos simplemente omitirán la declaración que contiene una sintaxis no compatible y continuarán después.
Pero esta lógica supone que la "unidad" que se procesará o se omitirá es la declaración. Si se introdujeran comentarios de una sola línea, significaría que el análisis posterior
//
debería saltarse hasta el próximo salto de línea en lugar de hasta el próximo punto y coma, lo que cambia qué reglas se analizan y cuáles se omiten. Esto podría cambiar el significado de los archivos CSS existentes de maneras sorprendentes.Un ejemplo:
Aquí, por error, doblé la barra. La consecuencia es que se ignora la declaración de fuente, pero todo lo demás funciona bien. Si
//
se introdujera el soporte para los comentarios, de repente se comentaría la llave de cierre, lo que podría romper todo el resto de la hoja de estilo.Ahora podría decir que es mi culpa, ya que cometí un error, pero esto no cambia que una cantidad desconocida de páginas en Internet pueda romperse o presentarse de manera extraña por razones oscuras.
Cualquier cambio de este tipo que rompa la compatibilidad con versiones anteriores debe considerarse con mucho cuidado, y los comentarios de una sola línea probablemente no sean lo suficientemente convincentes para el riesgo, ya que el único beneficio es que le ahorra unas pocas teclas.
Entonces, si CSS debería tener comentarios de línea singe, probablemente debería haberse introducido desde el principio. Pero CSS comenzó como un lenguaje muy simple y tener dos sintaxis de comentarios diferentes se habría visto como una complejidad innecesaria en ese momento. (Incluso ANSI C no tenía comentarios de una sola línea).
fuente
//
se analizará en dos "tokens delim" y, a su vez, no está permitido en ninguna parte de la gramática. Consulte w3.org/TR/css-syntax-3/#tokenization para más detalles./**/
, pero acepta este porque también aborda por qué no ha cambiado.Soportar otro elemento de sintaxis no es tan fácil: hay muchas herramientas que deberían poder manejar un estilo de comentario adicional. En realidad, no me sorprendería ver que la mayoría de los tokenizadores / analizadores simplemente ignoran las nuevas líneas, probablemente reemplazándolas por
;
.Si fuera esencial para el lenguaje, es decir, hacer la vida de los desarrolladores mucho más fácil, esto podría hacerse. Por ejemplo, no tener ningún tipo de comentarios en CSS sería una mierda, y valdría la pena agregar elementos de sintaxis específicos que delimiten los comentarios.
//
comentarios de estilo por otro lado? ... No veo el punto. Ver/* Hello, World! */
: un comentario de una línea.En realidad, probablemente esperes
//
comentarios de estilo porque estás acostumbrado a ellos en C ++ o lenguajes similares. Sin embargo, CSS no hereda de C ++, por lo que esperar características de sintaxis similares es bastante extraño.Del mismo modo, un programador de Python afirmaría que CSS también debería tener
#
comentarios de estilo; Entonces, ¿necesitamos admitir ambos estilos? Entonces un chico del mundo Haskell pediría incluir--
y{- -}
también, y te preguntarás por qué ya no reconoces el código CSS.El pequeño beneficio de
//
es que no tiene que escribir tres caracteres más al final de su comentario de una sola línea (en realidad, si comenzamos a contar caracteres, CSS debería usar comentarios de estilo Python). Sin embargo, si usa un editor de texto decente, puede comentar / descomentar texto simplemente presionando un acceso directo de todos modos.Como expliqué, son solo un poco útiles, para un pequeño subconjunto de programadores, que usan un pequeño subconjunto de editores de texto. En cuanto a su comentario sobre cada regla en su propia línea (por cierto, no estoy de acuerdo con su comentario), esto me hizo pensar en otro punto: cómo se usan realmente los comentarios.
Aquí está el uso de comentarios CSS que puedo pensar:
En los primeros tres casos, utilizará comentarios de estilo multilínea de todos modos. Esto es obvio para el encabezado del archivo y la explicación de un hack (la mayoría de los hacks requieren al menos una oración y un hipervínculo a StackOverflow o un artículo de blog); en cuanto a los delimitadores:
El comentario de estilo C es mucho más visible que:
enterrado en el texto.
fuente
//
comentarios de una sola línea .//
es muy común en muchos idiomas y el concepto detrás de esto es más que sintaxis, también funciona de manera diferente. Dicho esto, esta es la respuesta más profunda hasta ahora.El problema es que la mayoría de los lenguajes con comentarios (es decir, C #, Java) son lenguajes compilados, y el compilador elimina TODOS los comentarios antes de presentar el contenido al consumidor (la CPU). CSS no está compilado; generalmente el archivo se envía sin cambios a medida que el diseñador lo desarrolló, por lo que no hay oportunidad de eliminar los comentarios. El comentario de estilo // requiere el símbolo // Y un avance de línea para conservar la corrección sintáctica.
Sí, existen minificadores, y sí, JavaScript permite este tipo de comentarios. Javascript también permite evaluar (), así que no creo que queramos tomarlo como modelo.
fuente
/* */
comentarios?//
no puede eliminar comentarios cuando puede eliminarse/* */
?