conv.

All stories
TechFading · day 2

Blog post on programming language design principles gains traction

A 2024 essay on multiline strings, file paths, and keywords sparks debate over language design best practices.

What to know

  • The essay argues that early design decisions in programming languages—such as multiline string handling and keyword syntax—are difficult to change without breaking backwards compatibility, making upfront choices critical.
  • Readers debate the merits of trailing commas, with some defending them as ergonomic and others expressing strong opposition to the syntax.
  • The thread explores alternative visual markers for keywords: the author proposes sigils for backwards compatibility, while commenters counter with historical examples like Algol's boldface keywords or Haskell's backslash syntax.

The dispute Whether trailing commas improve ergonomics or corrupt syntax meaning, and whether sigils, boldface, or historical alternatives better solve the keyword extensibility problem. · positions read across 21 posts and comments

many voices

Trailing commas are a valuable quality-of-life feature that simplifies code reorganization and addition/removal of items.

  • “Why? It's an incredibly basic quality of life feature.”

    Kronopath · Lobsters ↗
some voices

Trailing commas are aesthetically wrong and corrupt the meaning of the comma syntax.

  • “Powerful visceral disgust at allowing trailing commas.”

    composite_higgs · Lobsters ↗
many voices

Sigils to distinguish keywords are technically sound but harm code readability and aesthetics.

  • “I am sympathetic to the pure technical reason to add sigils to keywords, but from a human point of view they would make reading the code a lot more unpleasant.”

    zem · Lobsters ↗
some voices

Historical alternatives like Algol's boldface keywords or Haskell's backslash syntax offer better solutions than sigils.

  • “Algol 60 and Algol 68 had boldface keywords, which look great. In the 1960's, there were no affordable hi res graphics displays and no affordable hi res graphics printers, so nobody implemented the language that way AFAIK.”

    doug-moen · Lobsters ↗

Blog author Programming language designer/writer

How it unfolded 7 developments, newest first · click a bar or a number to jump postscomments

Peak 5 pieces in one hour at Sep 22, 3 PM; 23 pieces over 2 days (2 posts · 21 comments) Sep 22, 12 AM — 1 piece · 1 post — Lobsters 1Sep 22, 1 AM — quietSep 22, 2 AM — quietSep 22, 3 AM — quietSep 22, 4 AM — quietSep 22, 5 AM — quietSep 22, 6 AM — quietSep 22, 7 AM — quietSep 22, 8 AM — quietSep 22, 9 AM — 1 piece · 1 comment — Lobsters 1Sep 22, 10 AM — 4 pieces · 4 comments — Lobsters 4Sep 22, 11 AM — 1 piece · 1 comment — Lobsters 1Sep 22, 12 PM — quietSep 22, 1 PM — 1 piece · 1 comment — Lobsters 1Sep 22, 2 PM — 1 piece · 1 comment — Lobsters 1Sep 22, 3 PM — 5 pieces · 5 comments — Lobsters 5Sep 22, 4 PM — quietSep 22, 5 PM — 1 piece · 1 comment — Lobsters 1Sep 22, 6 PM — 1 piece · 1 post — Hacker News 1Sep 22, 7 PM — 1 piece · 1 comment — Lobsters 1Sep 22, 8 PM — quietSep 22, 9 PM — 1 piece · 1 comment — Lobsters 1Sep 22, 10 PM — 2 pieces · 2 comments — Lobsters 2Sep 22, 11 PM — 1 piece · 1 comment — Lobsters 1Yesterday, 12 AM — quietYesterday, 1 AM — quietYesterday, 2 AM — quietYesterday, 3 AM — quietYesterday, 4 AM — quietYesterday, 5 AM — quietYesterday, 6 AM — 1 piece · 1 comment — Lobsters 1Yesterday, 7 AM — quietYesterday, 8 AM — 1 piece · 1 comment — Lobsters 1Yesterday, 9 AM — quietYesterday, 10 AM — quietYesterday, 11 AM — quietYesterday, 12 PM — quietYesterday, 1 PM — quietYesterday, 2 PM — quietYesterday, 3 PM — quietYesterday, 4 PM — quietYesterday, 5 PM — quietYesterday, 6 PM — quietYesterday, 7 PM — quietYesterday, 8 PM — quietYesterday, 9 PM — quietYesterday, 10 PM — quietYesterday, 11 PM — quietToday, 12 AM — quietToday, 1 AM — quietToday, 2 AM — quietToday, 3 AM — quiet 1234567
yesterdaynow · 4:43 AM ET
  1. 7

    Commenter cites Haskell precedent for multiline string handling

    A reader points to Haskell's existing approach to multiline strings using backslash delimiters, offering a simpler historical example of the problem the post addresses.

    • You will be disgusted by how we use `;` in programming languages.

      vrthraplt1d ago11▲view on Lobsters ↗
    2 more of the top 3 · 7 posts in this stretch
    • I went the 2nd path in zukte, and I'm still happy with the result. Separating the namespace of language keywords & features from user-defined variables makes it clearer (especially to new coders) what's happening. You get used to the sigils the same way you got used to them in basic and perl. ``` if @player.wizard then print "There's a wizard…

      robeyplt21h ago3▲view on Lobsters ↗
    • > but I kind of wonder how much actual value it provides Boldface in Algol 60 and 68 allows the languages to be sure that a keyword is not part of an identifier. In Algol, you can insert spaces anywhere in an identifier and it is treated the same. So, “print operand” and “printoperand” are the same name, and they don’t contain the keywords…

      fanfplt1d ago2▲view on Lobsters ↗
    all of them →
  2. 6

    Post also shared on Hacker News with lower engagement

    The same essay is posted to Hacker News and receives 2 points with only 1 comment, indicating narrower audience interest on that platform.

    • The OP wishes to syntactically distinguish keywords from identifiers, so that you can add new keywords in a backward compatible way, without invalidating existing code. The OP suggests using sigils to distinguish keywords, but the Algol standards propose to mark this syntactic distinction by representing keywords in bold face. And bold face looks…

      doug-moenplt1d ago2▲view on Lobsters ↗
  3. 5

    Discussion shifts to alternative keyword marking: boldface

    A commenter proposes using Unicode boldface characters for keywords—a visual distinction from the 1960s Algol standard—as a more aesthetic alternative to sigils. A follow-up questions the practical barriers to entering and displaying such characters cross-platform.

    “Algol 60 and Algol 68 had boldface keywords, which look great. In the 1960's, there were no affordable hi res graphics displays and no affordable hi res graphics printers, so nobody implemented the language that way AFAIK. Now we have cheap hi res graphics, and the Unicode standard has upper and lower case latin letters in boldface. So there's not much of a barrier to using boldface keywords today.”
    — doug-moen
    • > the Unicode standard has upper and lower case latin letters in boldface. So there's not much of a barrier to using boldface keywords today. What method of *entering* Unicode mathematical boldface characters do you use that you consider "not much of a barrier"? Furthermore, is this method available cross-platform? Is it available without an IDE?

      5d22bplt1d ago10▲view on Lobsters ↗
    2 more of the top 3 · 5 posts in this stretch
    • > Indented multiline strings While I'm glad to see "hey, you want multiline strings to be on the same indentation level as the rest of your program" mentioned, I don't actually think the mentioned languages do this particularly well. [From the Lix documentation:](https://docs.lix.systems/manual/lix/stable/language/values.html#type-string) > This…

      aproposplt1d ago8▲view on Lobsters ↗
    • Indeed, I am thinking of s-expressions. In general, I think syntax beyond s-expressions is pointless. True lisp curmudgeon here. I actually find the idea of treating them as whitespace almost as aesthetically offensive. I just don't see the point of ambiguous or free syntactic constructs, although in the case of whitespace the alternative may be…

      composite_higgsplt1d ago3▲view on Lobsters ↗
    all of them →
  4. 4

    Commenter raises readability concerns about keyword sigils

    A reader acknowledges the technical merit of using sigils to distinguish keywords but argues that from a human perspective, sigils would make code harder to read.

    “I am sympathetic to the pure technical reason to add sigils to keywords, but from a human point of view they would make reading the code a lot more unpleasant.”
    — zem
    • I am sympathetic to the pure technical reason to add sigils to keywords, but from a human point of view they would make reading the code a lot more unpleasant.

      zemplt1d ago4▲view on Lobsters ↗
    1 more of the top 2 · 2 posts in this stretch
    • Algol 60 and Algol 68 had boldface keywords, which look great. In the 1960's, there were no affordable hi res graphics displays and no affordable hi res graphics printers, so nobody implemented the language that way AFAIK. Now we have cheap hi res graphics, and the Unicode standard has upper and lower case latin letters in boldface. So there's not…

      doug-moenplt1d ago3▲view on Lobsters ↗
    all of them →
  5. 3

    Readers debate trailing comma syntax

    Discussion splits sharply on the trailing comma feature. Some defend it as a quality-of-life feature that simplifies code reorganization, while others express visceral opposition to the syntax.

    “Powerful visceral disgust at allowing trailing commas.”
    — composite_higgs
    • Why? It’s an incredibly basic quality of life feature.

      Kronopathplt1d ago28▲view on Lobsters ↗
    2 more of the top 3 · 5 posts in this stretch
    • why? im a huge fan and use it all over the place, it just makes adding, reorganizing, and removing items more encapsulated

      adam_d_ruppeplt1d ago12▲view on Lobsters ↗
    • You might also like: [Let's Stop Copying C](https://eev.ee/blog/2016/12/01/lets-stop-copying-c/) Zig has a good take on [multi-line string literals](

      dansoplt1d ago9▲view on Lobsters ↗
    all of them →
  6. 2

    Commenters propose additions and debate keyword syntax

    Early discussion frames the post as 'mostly a good list' and introduces counterarguments. A commenter suggests adding sum types and criticizes the optional braces syntax in C-like languages. The author's proposal to add sigils to keywords draws immediate pushback from readers who worry about readability.

    “Mostly a good list! I'd personally add sum types to it. And maybe "don't do the C thing of allowing `{}` to be elided after `if/for/while`", which is a cute syntactic hack that has never, ever earned its keep.”
    — icefox
    • Mostly a good list! I'd personally add sum types to it. And maybe "don't do the C thing of allowing `{}` to be elided after `if/for/while`", which is a cute syntactic hack that has never, ever earned its keep. > Itʼs more my personal opinion, but I dislike bare keywords. I think keywords should come with a sigil to clearly denote them as a keyword…

      icefoxplt1d ago20▲view on Lobsters ↗
  7. 1

    Post shared on Lobsters community

    The essay is posted to Lobsters and receives 25 points with 15 comments, reaching moderately high visibility on the platform.

    “Indented multiline strings are just a thing that you can put a few extra hours of effort into fixing early, before it becomes a problem for your users and then you can't change without backwards compatibility issues.”
    — Blog author, Essay author · source
  8. background

    Author publishes essay on programming language design principles — A blog post outlines ground rules for new programming languages, addressing multiline strings, file paths, file extensions, trailing commas, and keyword syntax. The author argues that decisions made early in language design—such as how to handle indented multiline strings—are difficult to change later without breaking backwards compatibility.

What people are saying 7 voices from 1 site · best of 21 · verbatim

Still unanswered
  • What method of entering Unicode mathematical boldface characters is practical cross-platform and outside an IDE?
  • Do the solutions cited for multiline strings (Dhall, Nix/Lix) actually handle indentation well, or do they have their own drawbacks?