1. 14

  2. 4

    Reading the story gives me renewed appreciation for ASCII, and the problems it successfully prevents.

    1. 4

      It’s a cheap polemic but I basically agree. Most newer languages do allow non-ASCII characters in identifiers, and I’ve seen Swift code that uses this in useful ways (using π or θ) and silly ones (emoji variable names!) But they still seem to restrict custom operators to a limited set of ASCII punctuation, and I don’t know any that have built-in non-ASCII syntax.

      I suspect part of it is that Windows makes it too hard to type such characters. I know it used to be that you’d have to hold down Alt and type a memorized three-digit number. I don’t know if that’s improved, and I don’t know how Linux/BSD handle it.

      But Mac OS always had really simple keystrokes for common characters, like Option-P for π, and Option-(Shift-)-[ for « and ». As a result, in 1991 when I invented a DSL for assembling AppleEvents (kind of Stone-Age protobufs) I used those angle-quotes as delimiters for hex/binary strings, no biggie.

      1. 3

        Swift actually allows certain non-ASCII Unicode ranges for operators, though still excluding other ranges (for example, is not a valid operator). I have used a ° postfix operator for converting degrees to radians, for instance.


        1. 1

          It’s a weird criticism of Go, given that Go mandates that the input file format is UTF-8 and allows any identifier that starts with a character that unicode considers to be a letter to be a valid variable name.

        2. 3

          We tried colour as a syntactic construct (colorForth), and most Forthers didn’t get it or didn’t like it.

          1. 2

            There are a lot of big reasons against it, such as accessibility for the color-blind; the fact that people prefer different backgrounds (light vs dark mode) which totally messes up the contrast of foreground colors; and the higher cost of color printing.

            1. 1


              Solved with italics, font weight, underlining etc. Not a real problem.

              different backgrounds

              The two options: deal with it (not a real problem), or invert the colours.

              colour printing

              Solved the same way as with colourbliness.

              1. 4

                If you’re only using two or three colors, I guess you could substitute font styles. But you run out quickly after that, or they become very hard to distinguish. (Some fonts like Univers have five or more weights, but telling Demibold from Bold at a glance isn’t easy. And I wouldn’t want to have to read Ultralight or Black text all day.)

                Dealing with an inverted background is harder than you think. As one example, yellow text has high contrast in dark mode; but against white it’s almost unreadable. Yeah, it could be inverted, but then whenever you read on StackOverflow about “if this is yellow that means it’s an instance variable” you have to mentally change that to “purple”, which would be a drag.

            2. 1

              Using color as syntax begs the question of how the color information is stored in the source file — i.e. what’s its syntax?

              1. 1

                With colorForth you had to use the colorForth editor or write your own IDE. It’s why most colorForth inspired Forths just prefix words with a character, instead.

            3. 2

              I enjoy these types of articles! I believe that we need people who point out to us that the systems we’re using and designing could be better, that we have inherited a view of the world that limits our vision of what’s possible. It’s not necessary to accept the suggested alternatives as being better, but they can be used to open up your mind to new ideas. Designs of computer systems are open to a lot of choice, but few of the people I’ve worked with in the past have seen anything other than modern mainstream systems.

              About ASCII, there’s an old joke that every key on a serial terminal is already claimed by Emacs, except for BREAK.

              1. 2

                About ASCII, there’s an old joke that every key on a serial terminal is already claimed by Emacs, except for BREAK.

                In TECO, the original mother system for Emacs, every string of characters is a valid, if not useful, TECO program.

              2. 2

                It should be noted that even though C++ has officially deprecated trigraphs, the language is still dependent upon digraphs. Some notable cases are != for and >= for . The same applies to almost all C-styled languages to this day, with no alternatives on offer.

                1. 1

                  The Perl bashing in the article feels quite outdated to me.


                  C++ could have beaten Perl by 10 years to become the world’s second write-only programming language

                  Wikipedia lists C++ as being from 1985 and Perl from 1987, so I guess C++ would have done so by two and not ten years. Unless it is supposed to be a base two joke.

                  1. 5

                    It is unfortunately in keeping with the general style of the entire article: a cheap polemic that paints people who generally don’t agree, and their apparently “conservative” choices, as some kind of pantomime villain. The only footnote is a reference to another polemic in a similar vein, from nearly a decade prior.