- From: James Elmore <James.Elmore@cox.net>
- Date: Fri, 18 Jul 2008 11:41:57 -0700
- To: Simetrical <simetrical@gmail.com>, www-style list <www-style@w3.org>
On Jul 18, 2008, at 10:40 AM, Simetrical wrote: > > On Fri, Jul 18, 2008 at 12:28 AM, Brad Kemper > <brkemper@comcast.net> wrote: >> I do not understand the argument others have made that a dollar >> sign would >> be more natural. To me it is just another abstract symbol without >> anything >> to make it more understandable as a variable identifier. Is it >> because in >> some programming languages it is used to denote string-type >> variables? > > In several languages it's used for all variables. Shell scripts and > PHP prefix all variable names with $. Perl prefixes all scalar > variable names with $ (with different sigils for lists and maps). > It's therefore a very natural convention to those who are used to > scripting languages, unless they only do Python and Ruby, or something > like that. For instance, in PHP or Perl the following is a syntax > error: > > var = 7; > > You need to do this: > > $var = 7; Going back into the misty, prehistoric times of early programming, BASIC also used '$' to denote a variable. (I suspect it had something to do with the serpent in the Garden of Eden climbing a tree ;-) > > Since a fairly large percentage of web authors probably know a little > PHP, it seems like a reasonable point to bring up. If variables are > prefixed with $, some nontrivial percentage of people will immediately > get the syntax on first sight, while = will have to be learned anew by > everyone (unless there's someplace I know of that uses it for > variables). And the same goes in the other direction, of course: > people used to $-prefixed variables in CSS will be more comfortable > with that convention in other languages. If there's going to be some > abstract sigil used for variables, it may as well be one that's > already used in other standards. > > =varname seems weird to me. It would be a syntax error in practically > any programming language, since = is generally used for something > else. It seems more natural to me to reserve = for equality testing > and/or assignment, or to use it in places that are clearly not at all > similar to existing programming constructs, to avoid confusion. > > Of course, CSS is not a programming language and a large percentage of > its users are not programmers, but a large percentage are or will be > programmers, and it is a computer language. If some preexisting > knowledge can be leveraged, I think that's good. But it's not really > a big deal, in the end: it's a pretty trivial distinction to learn. > Even if CSS is not a programming language, at some point, an equality test will probably be needed. If the '=' is already used for this construct, it will make the parser much harder to build, and the parsing rules much harder to understand. By the way, (possibly I missed this) is there a suggestion about using the variable sigil (interesting word -- I would use indicator) for the variable in all cases, or only when it is dereferenced? I will try to fabricate an example. If I mess up the syntax, I apologize in advance. <style > declare { HeadColor: #ff00aa; } h1 { color: $HeadColor; } </style> The first use of HeadColor is what I would call assignment. Setting a value in the variable. Most parsers call it the LHS -- left hand side (of the equals sign in a programming language). The second use is getting the value of the variable and placing it somewhere. In a parser, I would think of it as the RHS -- right hand side. Would it make CSS parsing easier if every use of the variable (LHS and RHS; setting and getting) required a sigil? Or would that make things more complex, because then idiots could do things like: <style> declare { $color: #00ff00; } h1 { color: $color; } </style> In the first example (HeadColor), the parser would be able to detect and declare the use of an existing keyword (or any reserved word) in a variable name as an error. This prevents people from reusing keywords and confusing themselves and anyone who attempts to read their code. In the second example ($color), there would be lots of reasons to allow *any* identifier as a variable name and, although the parser might still complain about reusing keywords, it is harder to justify calling it an error. The purpose of CSSwg is not to be the thought police, and if there are strong reasons for allowing idiots to reuse keywords -- providing the sigil is present -- then I would say, let them. But if the parser is simpler and if we can reasonably restrict the reuse of keywords as variables, that would be my recommendation, if only to protect the innocents who must follow and attempt to repair problems the idiots create. </James>
Received on Friday, 18 July 2008 18:42:40 UTC