Warum erlaubt CSS keine einzeiligen Kommentare? [geschlossen]

13

Ich verstehe, dass CSS nur solche mehrzeiligen Kommentare unterstützt

/* foobar */

Warum werden einzeilige Kommentare nicht unterstützt?

// foobar

Sie sind in der Programmierung genauso verbreitet und scheinen besonders nützlich für eine Sprache wie CSS zu sein, in der jede Regel in einer eigenen Zeile steht.

Wenn es keinen bestimmten historischen Grund für diese Entscheidung gab, was hat Browser daran gehindert, diese Entscheidung zu unterstützen?

Gans
quelle
3
Das ist eine schlechte Entscheidung. Sie sollten einzeilige Kommentare zulassen.
Tulains Córdova
1
@Goose: hast du dir sass-lang.com angeschaut ?
Kevin Cline
1
@ TulainsCórdova Ich habe die Antworten nicht befürwortet, nur darauf hingewiesen, dass diese Diskussion bereits stattgefunden hat.
Eric King
2
Diese Frage hat eine Antwort erhalten, die technischer ist als die Antworten hier. "CSS behandelt Zeilenumbrüche wie alle anderen Leerzeichen und wäre nicht in der Lage, das Ende des Kommentars ohne ein abschließendes Trennzeichen zu bestimmen."
Gans

Antworten:

8

Abwärtskompatibilität

Das Einfügen von einzeiligen Kommentaren in die CSS-Syntax kann die Bedeutung von Dateien ändern, die derzeit das Token verwenden //. Browser-Anbieter zögern sehr , Änderungen vorzunehmen, die möglicherweise vorhandene Seiten beschädigen könnten.

CSS ist mit sehr genauen "fehlertoleranten" Parsing-Regeln definiert, was bedeutet, dass selbst wenn Sie etwas syntaktisch Unzulässiges schreiben, es genaue Regeln gibt, wie das Parsen erfolgen soll. Wenn eine unzulässige Folge von Zeichen (wie //) in einer Deklaration erkannt wird, wird die aktuelle Deklaration verworfen und alles bis zum nächsten Semikolon übersprungen.

CSS ist so konzipiert, dass es die Einführung neuer Syntax ermöglicht, ohne alte Browser zu beschädigen. Alte Browser überspringen nur die Deklaration, die nicht unterstützte Syntax enthält, und fahren danach fort.

Diese Logik geht jedoch davon aus, dass die "Einheit", die verarbeitet oder übersprungen werden soll, die Deklaration ist. Wenn einzeilige Kommentare eingeführt würden, würde dies bedeuten, dass die Analyse danach //bis zum nächsten Zeilenumbruch und nicht bis zum nächsten Semikolon übersprungen werden sollte, wodurch geändert wird, welche Regeln analysiert und welche übersprungen werden. Dies könnte möglicherweise die Bedeutung vorhandener CSS-Dateien auf überraschende Weise ändern.

Ein Beispiel:

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

Hier habe ich fälschlicherweise den Schrägstrich verdoppelt. Die Folge ist, dass die Schriftdeklaration ignoriert wird, der Rest funktioniert jedoch einwandfrei. Wenn die Unterstützung für //-Kommentare eingeführt würde, würde die schließende Klammer plötzlich auskommentiert, wodurch möglicherweise der gesamte Rest des Stylesheets beschädigt würde.

Man könnte sagen, dass ich selbst schuld bin, da ich einen Fehler gemacht habe, aber das ändert nichts daran, dass eine unbekannte Anzahl von Seiten im Internet aus undurchsichtigen Gründen beschädigt oder seltsam gerendert werden kann.

Eine solche Änderung, die die Abwärtskompatibilität beeinträchtigt, sollte sehr sorgfältig abgewogen werden, und einzeilige Kommentare sind für das Risiko wahrscheinlich nicht zwingend genug, da Sie nur ein paar Tastatureingaben sparen.

Wenn CSS also einzeilige Kommentare haben sollte, sollte es wahrscheinlich von Anfang an eingeführt worden sein. Aber CSS begann mit einer sehr einfachen Sprache und zwei verschiedene Kommentarsyntaxen wären zu dieser Zeit als unnötige Komplexität angesehen worden. (Sogar ANSI C hatte keine einzeiligen Kommentare.)

JacquesB
quelle
Oh, // ist ein Token in CSS? Erzählen Sie.
Michael Blackburn
Derzeit //wird in zwei "delim tokens" geparst, mit denen wiederum nirgends in der Grammatik erlaubt ist. Weitere Informationen finden Sie unter w3.org/TR/css-syntax-3/#tokenization .
JacquesB
+1 für MainMa, warum es angefangen hat /**/, aber dieses akzeptieren, weil es auch angibt , warum es sich nicht geändert hat.
Gans
8

Noch ein weiteres Syntaxelement zu unterstützen ist nicht so einfach: Es gibt viele Tools, die in der Lage sein sollten, noch einen zusätzlichen Kommentarstil zu verarbeiten. Eigentlich wäre ich nicht überrascht zu sehen, dass die meisten Tokenizer / Parser Zeilenumbrüche einfach ignorieren und sie wahrscheinlich durch ersetzen ;.

Wenn es um die Sprache wesentlich sein würde, also machen Entwickler das Leben viel einfacher, dies getan werden könnte. Zum Beispiel würde es sich lohnen , keine Kommentare in CSS zu haben, und es wäre die Mühe wert, bestimmte Syntaxelemente hinzuzufügen, die Kommentare begrenzen. //-Stil Kommentare auf der anderen Seite? ... Ich verstehe den Punkt nicht. Siehe /* Hello, World! */: ein einzeiliger Kommentar.

Tatsächlich erwarten Sie wahrscheinlich //Kommentare im -Stil, da Sie an diese in C ++ oder ähnlichen Sprachen gewöhnt sind. Da CSS jedoch nicht von C ++ erbt, ist es ziemlich seltsam, ähnliche Syntaxfunktionen zu erwarten.

Ebenso würde ein Python-Programmierer behaupten, dass CSS auch #Kommentare im -Stil haben sollte . Müssen wir nun beide Stile unterstützen? Dann würde ein Mann von Haskell Welt bitten , zu schließen --und {- -}als gut, und Sie werden sich fragen , warum Sie nicht CSS - Code nicht mehr erkennen.

Der winzige Vorteil von //ist, dass Sie am Ende Ihres einzeiligen Kommentars keine drei weiteren Zeichen eingeben müssen (wenn wir mit dem Zählen von Zeichen beginnen, sollte CSS Kommentare im Python-Stil verwenden). Wenn Sie jedoch einen anständigen Texteditor verwenden, können Sie Text kommentieren / auskommentieren, indem Sie trotzdem eine Verknüpfung drücken.

Sie scheinen besonders nützlich für eine Sprache wie CSS zu sein, in der jede Regel in einer eigenen Zeile steht.

Wie ich erklärte, sind sie für eine kleine Teilmenge von Programmierern, die eine kleine Teilmenge von Texteditoren verwenden , nur wenig nützlich. Ihre Bemerkung zu jeder Regel in einer eigenen Zeile (ich bin übrigens nicht mit Ihrer Bemerkung einverstanden) hat mich über einen anderen Punkt nachdenken lassen: wie die Kommentare tatsächlich verwendet werden.

Hier ist die Verwendung von CSS-Kommentaren, die mir einfallen:

  • Als Datei-Header (Copyright-Informationen, Eitelkeiten usw.)
  • Als Begrenzer einer Stilgruppe.
  • Als Erklärung für einen Hack.
  • Als Detail über einen bestimmten Stil oder eine Eigenschaft.

In den ersten drei Fällen verwenden Sie ohnehin mehrzeilige Kommentare. Dies ist offensichtlich für den Dateikopf und die Erklärung eines Hacks (die meisten Hacks erfordern mindestens einen Satz und einen Hyperlink zu StackOverflow oder einen Blog-Artikel); wie für die Begrenzer:

/**
 * Footer and sitemap styles.
 */

C-artiger Kommentar ist viel sichtbarer als:

// Footer and sitemap styles.

im Text begraben.

Arseni Mourzenko
quelle
JavaScript unterstützt auch einzeilige //Kommentare.
Tulains Córdova
Ich würde behaupten, dass dies //in vielen Sprachen sehr verbreitet ist und das Konzept dahinter ist, dass es mehr als Syntax ist, es funktioniert auch anders. Dies ist jedoch die bisher ausführlichste Antwort.
Gans
Ich denke nicht, dass es eine kleine Untergruppe ist. So gut wie jeder, der CSS im RAW-Format schreibt, würde es einfacher finden, Kommentare mit // hinzuzufügen. Aber die Abwärtskompatibilität macht es streitig.
O'Rooney
-5

Das Problem ist, dass die meisten Sprachen mit Kommentaren (z. B. C #, Java) kompilierte Sprachen sind und der Compiler ALLE Kommentare entfernt, bevor der Inhalt dem Konsumenten (der CPU) präsentiert wird. CSS wird nicht kompiliert. Im Allgemeinen wird die Datei unverändert gesendet, während der Designer sie entwickelt hat, sodass keine Möglichkeit besteht, die Kommentare auszublenden. Der Kommentar im // Stil erfordert dann sowohl das // Symbol als auch einen Zeilenvorschub, um die syntaktische Korrektheit beizubehalten.

Ja, es gibt Minifier und Javascript erlaubt diese Art von Kommentaren. Javascript erlaubt auch eval (), also denke ich nicht, dass wir es als Modell nehmen wollen.

Michael Blackburn
quelle
3
Diese Antwort ergibt überhaupt keinen Sinn. "Es gibt keine Möglichkeit, den Kommentar auszublenden" - natürlich wird der Kommentar vom Parser genau wie in jeder anderen Sprache ausgeblendet. Wie könnte sonst CSS die /* */Kommentare haben?
JacquesB
Ich meinte einen Vermittler zwischen dem Designer und dem Verbraucher. Der Compiler ist dieser Vermittler in kompilierten Sprachen. Der "Parser", auf den Sie verweisen, ist ein Subsystem des Browsers, der Endverbraucher des Inhalts.
Michael Blackburn
Warum kann der Parser //Kommentare nicht entfernen, wenn er entfernt werden kann /* */?
JacquesB
1
Es könnte, aber dann muss es sowohl nach dem // als auch nach dem Zeilenvorschub suchen, und Zeilenvorschübe sind überwiegend semantische Inhalte, nicht syntaktisch. CSS, wie es entworfen wurde, behandelt alle Whitespaces gleich. Zur Unterstützung von // haben Sie jetzt "spezielle" Leerzeichen und außerdem kann dieses "spezielle" Leerzeichen ein Zeichen (\ n) und zwei (\ r \ n) sein.
Michael Blackburn
3
@MichaelBlackburn: DSSSL (ein Vorgänger von CSS mit S-Ausdruckssyntax) enthält auch einzeilige Kommentare. Es hat nichts mit imperativen oder deklarativen Sprachen zu tun.
JacquesB