Perché i CSS non consentono commenti a riga singola? [chiuso]


13

Comprendo che CSS supporta solo commenti su più righe come tali

/* foobar */

Perché non c'è supporto per i commenti a riga singola.

// foobar

Sono altrettanto comuni nella programmazione e sembrano particolarmente utili per un linguaggio come CSS in cui ogni regola si trova sulla propria linea.

Se non vi fosse alcun motivo storico particolare per questa decisione, cosa ha impedito ai browser di spostarsi verso il supporto?


3
È una decisione sbagliata. Dovrebbero consentire commenti a riga singola.
Tulains Córdova,

1
@Goose: hai visto sass-lang.com ?
Kevin Cline,


1
@ TulainsCórdova Non ho approvato le risposte, ho solo sottolineato che questa discussione è già stata svolta.
Eric King,

2
Quella domanda ha ottenuto una risposta più tecnica delle risposte qui. "CSS tratta le nuove righe come tutti gli altri spazi bianchi e non sarebbe in grado di determinare la fine del commento senza un delimitatore finale."
Oca,

Risposte:


8

Compatibilità con le versioni precedenti

L'introduzione di commenti a riga singola nella sintassi CSS potrebbe modificare il significato dei file che attualmente utilizza il token //. I fornitori di browser sono molto riluttanti a introdurre modifiche che potrebbero potenzialmente spezzare le pagine esistenti.

Il CSS è definito con regole di analisi molto precise "tolleranti agli errori", il che significa che anche se scrivi qualcosa di sintatticamente illegale, ci sono regole precise su come dovrebbe procedere l'analisi. Se //viene rilevata una sequenza illegale di caratteri (come ) all'interno di una dichiarazione, la dichiarazione corrente viene scartata e tutto viene ignorato fino al punto e virgola successivo.

CSS è progettato in questo modo per consentire l'introduzione di una nuova sintassi senza rompere i vecchi browser. I vecchi browser salteranno semplicemente la dichiarazione che contiene una sintassi non supportata e continueranno dopo.

Ma questa logica presuppone che la "unità" sia elaborata o ignorata sia la dichiarazione. Se sono stati introdotti commenti a riga singola, ciò significa che l'analisi dopo //dovrebbe saltare fino alla successiva interruzione di riga anziché fino al punto e virgola successivo, che modifica quali regole vengono analizzate e quali vengono ignorate. Ciò potrebbe potenzialmente cambiare il significato dei file CSS esistenti in modi sorprendenti.

Un esempio:

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

Qui ho erroneamente raddoppiato la barra. La conseguenza è che la dichiarazione dei caratteri viene ignorata, ma tutto il resto funziona bene. Se //venisse introdotto il supporto per i commenti, all'improvviso la parentesi graffa di chiusura verrebbe commentata, potenzialmente rompendo tutto il resto del foglio di stile.

Ora potresti dire che è colpa mia da quando ho fatto un errore, ma ciò non cambia che un numero sconosciuto di pagine su Internet potrebbe rompersi o renderizzarsi in modo strano per ragioni oscure.

Qualsiasi modifica che rompa la compatibilità con le versioni precedenti deve essere considerata con molta attenzione e probabilmente i commenti a riga singola non sono abbastanza convincenti per il rischio, poiché l'unico vantaggio è che consente di risparmiare alcune sequenze di tasti.

Quindi, se i CSS dovessero avere commenti a riga singola, probabilmente avrebbero dovuto essere introdotti dall'inizio. Ma i CSS iniziarono come un linguaggio molto semplice e avere due diverse sintassi dei commenti sarebbe stato visto come una complessità inutile al momento. (Anche ANSI C non aveva commenti a riga singola.)


Oh, // è un token nei CSS? Dillo.
Michael Blackburn,

Attualmente //verrà analizzato in due "token delim" con a sua volta non consentito in nessun punto della grammatica. Vedi w3.org/TR/css-syntax-3/#tokenization per i dettagli.
Jacques B

+1 per MainMa per il motivo per cui è iniziato /**/, ma accettando questo perché risolve anche il motivo per cui non è cambiato.
Oca,

8

Supportare ancora un altro elemento di sintassi non è così semplice: ci sono molti strumenti che dovrebbero essere in grado di gestire ancora uno stile di commento aggiuntivo. In realtà, non sarei sorpreso di vedere che la maggior parte dei tokenizer / parser semplicemente ignora le nuove righe, probabilmente sostituendole con ;.

Se fosse essenziale per il linguaggio, ovvero rendere la vita degli sviluppatori molto più semplice, ciò potrebbe essere fatto. Ad esempio, non avere alcun tipo di commento nei CSS farebbe schifo, e varrebbe la pena lo sforzo di aggiungere specifici elementi di sintassi che delimitano i commenti. //in stile commenti d'altro canto? ... Non vedo il punto. Vedi /* Hello, World! */,: un commento di una riga.

In realtà, probabilmente ti aspetti //commenti in stile perché ti sei abituato in C ++ o in linguaggi simili. Tuttavia, CSS non eredita dal C ++, quindi aspettarsi simili funzioni di sintassi è piuttosto strano.

Allo stesso modo, un programmatore di Python affermerebbe che anche i CSS dovrebbero avere #commenti in stile; quindi ora, dobbiamo supportare entrambi gli stili? Poi un ragazzo da Haskell mondo avrebbe chiesto di includere --e {- -}pure, e ti chiedersi perché non si riconosce il codice CSS più.

Il piccolo vantaggio //è che non è necessario digitare altri tre caratteri alla fine del commento a riga singola (in realtà, se iniziamo a contare i caratteri, i CSS dovrebbero utilizzare i commenti in stile Python). Tuttavia, se si utilizza un editor di testo decente, si commenta / rimuove il testo semplicemente premendo comunque una scorciatoia.

Sembrano [...] particolarmente utili per un linguaggio come CSS in cui ogni regola si trova sulla propria riga.

Come ho spiegato, sono solo leggermente utili, per un piccolo sottoinsieme di programmatori, usando un piccolo sottoinsieme di editor di testo. Per quanto riguarda la tua osservazione su ciascuna regola sulla sua stessa linea (non sono d'accordo con la tua osservazione, a proposito), questo mi ha fatto riflettere su un altro punto: come i commenti vengono effettivamente utilizzati.

Ecco l'uso dei commenti CSS che mi viene in mente:

  • Come intestazione di file (informazioni sul copyright, elementi di vanità, ecc.)
  • Come delimitatore di un gruppo di stili.
  • Come una spiegazione di un hack.
  • Come dettaglio di un particolare stile o proprietà.

Nei primi tre casi, utilizzerai comunque i commenti in stile multilinea. Questo è ovvio per l'intestazione del file e la spiegazione di un hack (la maggior parte degli hack richiede almeno una frase e un collegamento ipertestuale a StackOverflow o un articolo di blog); come per i delimitatori:

/**
 * Footer and sitemap styles.
 */

Il commento in stile C è molto più visibile di:

// Footer and sitemap styles.

sepolto nel testo.


JavaScript supporta anche i //commenti a riga singola .
Tulains Córdova,

Direi che //è molto comune in molte lingue e il concetto alla base è che è più che sintassi, funziona anche in modo diverso. Detto questo, questa è la risposta più approfondita di sempre.
Oca,

Non credo sia affatto un piccolo sottoinsieme. Quasi tutti coloro che scrivono CSS nel raw troverebbero più facile aggiungere commenti con //. Ma il punto di compatibilità all'indietro lo rende discutibile.
O'Rooney

-5

Il problema è che la maggior parte delle lingue con commenti (ad es. C #, Java) sono lingue compilate e il compilatore elimina TUTTI i commenti prima di presentare il contenuto al consumatore (la CPU). CSS non è compilato; generalmente il file viene inviato invariato durante lo sviluppo del designer, quindi non è possibile eliminare i commenti. Il commento in stile // richiede quindi sia il simbolo // sia un avanzamento riga per mantenere la correttezza sintattica.

Sì, esistono dei minificatori e sì, JavaScript consente questo tipo di commento. Javascript consente anche eval (), quindi non credo che vogliamo prenderlo come modello.


3
Questa risposta non ha alcun senso. "Non c'è alcuna possibilità di eliminare il commento" - certo che esiste, il commento viene eliminato dal parser esattamente come in qualsiasi altra lingua. Altrimenti come potrebbero i /* */commenti CSS ?
Jacques B

Intendevo intermediario di terze parti tra il progettista e il consumatore. Il compilatore è questo intermediario nelle lingue compilate. Il "parser" a cui ti riferisci è un sottosistema del browser, il consumatore finale del contenuto.
Michael Blackburn,

Quindi perché il parser //non può eliminare i commenti quando può eliminare /* */?
Jacques B

1
Potrebbe, ma poi deve cercare sia il // sia il feed di riga, e i feed di riga sono prevalentemente contenuti semantici, non sintattici. CSS come progettato tratta tutti gli spazi bianchi allo stesso modo. Per supportare // ora hai spazi bianchi "speciali" e inoltre, quello spazio "speciale" potrebbe essere un carattere (\ n) e potrebbe essere due (\ r \ n).
Michael Blackburn,

3
@MichaelBlackburn: DSSSL (che è un predecessore per CSS che usa la sintassi dell'espressione S) ha anche commenti a riga singola. Non ha nulla a che fare con le lingue imperative contro quelle dichiarative.
Jacques B
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.