¿Por qué CSS no permite comentarios de una sola línea? [cerrado]

13

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?

ganso
fuente
3
Esa es una mala decisión. Deben permitir comentarios de una sola línea.
Tulains Córdova
1
@Goose: ¿has mirado en sass-lang.com ?
Kevin Cline
2
relacionado: stackoverflow.com/questions/2479351/…
Eric King
1
@ TulainsCórdova No respaldé las respuestas, solo señalé que esta discusión ya se había tenido.
Eric King
2
Esa pregunta obtuvo una respuesta que es más técnica que las respuestas aquí. "CSS trata las nuevas líneas como todos los demás espacios en blanco, y no podría determinar el final del comentario sin un delimitador de terminación".
Ganso

Respuestas:

8

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:

P { font: 12px//16px; }
... hundreds of additional lines of CSS...

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).

JacquesB
fuente
Oh, // ¿es un token en CSS? Digas.
Michael Blackburn
Actualmente //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.
JacquesB
+1 para MainMa por qué comenzó /**/, pero acepta este porque también aborda por qué no ha cambiado.
Ganso
8

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.

Parecen particularmente útiles para un lenguaje como CSS donde cada regla está en su propia línea.

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:

  • Como encabezado de archivo (información de copyright, material de vanidad, etc.)
  • Como delimitador de un grupo de estilos.
  • Como explicación de un hack.
  • Como detalle sobre un estilo o propiedad en particular.

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:

/**
 * Footer and sitemap styles.
 */

El comentario de estilo C es mucho más visible que:

// Footer and sitemap styles.

enterrado en el texto.

Arseni Mourzenko
fuente
JavaScript también admite //comentarios de una sola línea .
Tulains Córdova
Yo diría que //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.
Ganso
No creo que sea un pequeño subconjunto en absoluto. Casi cualquier persona que escriba CSS en bruto sería más fácil agregar comentarios con //. Pero el punto de compatibilidad con versiones anteriores lo hace discutible.
O'Rooney
-5

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.

Michael Blackburn
fuente
3
Esta respuesta no tiene ningún sentido en absoluto. "No hay oportunidad de eliminar el comentario". Por supuesto que sí, el analizador elimina el comentario exactamente como en cualquier otro idioma. De lo contrario, ¿cómo podría CSS tener los /* */comentarios?
JacquesB
Me refería a un tercero intermediario entre el diseñador y el consumidor. El compilador es este intermediario en lenguajes compilados. El "analizador" al que se refiere es un subsistema del navegador, el consumidor final del contenido.
Michael Blackburn el
Entonces, ¿por qué el analizador //no puede eliminar comentarios cuando puede eliminarse /* */?
JacquesB
1
Podría, pero luego tiene que buscar tanto el // como el avance de línea, y los avances de línea son predominantemente contenido semántico, no sintáctico. CSS, como está diseñado, trata todos los espacios en blanco de la misma manera. Para admitir // ahora tiene un espacio en blanco "especial" y, además, ese espacio en blanco "especial" podría ser un carácter (\ n) y podría ser dos (\ r \ n).
Michael Blackburn
3
@MichaelBlackburn: DSSSL (que es un predecesor de CSS que usa la sintaxis de expresión S) también tiene comentarios de una sola línea. No tiene nada que ver con lenguajes imperativos versus declarativos.
JacquesB