_______               __                   _______
       |   |   |.---.-..----.|  |--..-----..----. |    |  |.-----..--.--.--..-----.
       |       ||  _  ||  __||    < |  -__||   _| |       ||  -__||  |  |  ||__ --|
       |___|___||___._||____||__|__||_____||__|   |__|____||_____||________||_____|
                                                             on Gopher (inofficial)
   URI Visit Hacker News on the Web
       
       
       COMMENT PAGE FOR:
   URI   The Lobster Programming Language
       
       
        vovavili wrote 20 min ago:
        This feels like a scripting companion to Rust with Python-like syntax,
        nice one. I definitely could see it being using as a Lua replacement in
        embedded contexts.
       
        zawaideh wrote 1 hour 11 min ago:
        Feels like it’s taking the best of Rust and Ruby (with Python style
        whitespace)
        
        Admittedly it’s just a first impression
       
          harikb wrote 1 hour 1 min ago:
          > Flow-Sensitive Type-Inference
          
          imho, I don't consider Type-inference as a good thing when it happens
          from 50 lines ahead/below. How would regular people follow along?
          
          Good case
          
          x = "hello" // infer type as string - good thing.
          
          Bad case
          
          var/declare x;
          
          50 lines later
          
          if (....)
          
               x = "world" // infer type as string - this is bad
       
            alain_gilbert wrote 55 min ago:
            For case like this, I'd say your text editor should definitely just
            be able to tell you right away that this variable is a "string"
            when you mouse over it.
       
              harikb wrote 11 min ago:
              It shouldn't require a fancy forward-lookup-capable editor /
              language-server to show type. That is the point I am trying to
              make
              
              var/declare x;
              
              25 lines later
              
              call f(x);  // ** Reader has no idea what x is ... even though
              compiler has **
              
              25 lines later
              
              if (....)
              
                   x = "world" // infer type as string - this is bad
       
        jibal wrote 3 hours 52 min ago:
        .
       
          joemi wrote 3 hours 31 min ago:
          Surely you don't mean Quake the 1996 video game, so what is "Quake"
          in this context?
       
            jibal wrote 3 hours 23 min ago:
            I was mistaken ... not the author:
            
   URI      [1]: https://quake.fandom.com/wiki/Wouter_Van_Oortmerssen_(Aard...
       
        dang wrote 4 hours 1 min ago:
        Related. Others?
        
        The Lobster Programming Language - [1] - May 2025 (6 comments)
        
        The Lobster Programming Language - [2] - May 2022 (14 comments)
        
        The Lobster Programming Language - [3] - Dec 2020 (4 comments)
        
        The Lobster Programming Language - [4] - April 2019 (164 comments)
        
        The Lobster Programming Language - [5] - Oct 2017 (2 comments)
        
   URI  [1]: https://news.ycombinator.com/item?id=44051841
   URI  [2]: https://news.ycombinator.com/item?id=31453822
   URI  [3]: https://news.ycombinator.com/item?id=25498005
   URI  [4]: https://news.ycombinator.com/item?id=19567160
   URI  [5]: https://news.ycombinator.com/item?id=15557060
       
        0cf8612b2e1e wrote 4 hours 22 min ago:
        Well, it has an animal mascot logo. Which is my personal yardstick for
        if a project is destined for success. So, off to a good start, but the
        lobster could be more cuddly.
       
          lagniappe wrote 1 hour 49 min ago:
          Can I interest you in a rat named Keith, with its foot blown off?
       
          adiabatty wrote 3 hours 53 min ago:
          To be fair, there’s a programming language out there already with a
          cuddly-lobster mascot. A decidedly un-cuddly lobster just maximizes
          product differentiation.
       
            jibal wrote 3 hours 38 min ago:
            It's a crab, not a lobster.
       
            shayway wrote 3 hours 47 min ago:
            What language is that?
       
              jibal wrote 3 hours 33 min ago:
              They mean Rust, but its unofficial mascot is a cuddly crab, not a
              lobster (both are crustaceans).
       
        nathan_compton wrote 4 hours 26 min ago:
        One thing I hate about Generative AI is that it has flipped the value
        prop of making your language similar to an existing popular language.
        This helps new programmers but it really messes with generative AI.  I
        can feel the era of fun new programming languages that might break big
        ending.
       
          scotty79 wrote 3 hours 59 min ago:
          I'm afraid about that too, but I hope that AI will get significantly
          smarter faster than it takes for any new language take popularity
          among humans. That it will be smart enough to not be so language
          sensitive.
          
          Who knows. Maybe some new fun language will pop up that's hard to
          write for humans, but easy to write for AI (because it can work in
          millisecond loop with language server, think borrow checker to the
          moon) and also exceedingly easy  to read for humans. Because humans
          will, I think stil for a long time, need to debug ever shrinking
          corner cases where AI generated something subtly but spectacularly
          wrong.
       
        rurban wrote 4 hours 32 min ago:
        One of the few light excellent C++ projects
       
        nobleach wrote 4 hours 34 min ago:
        Obviously some will find this a silly opinion but the one thing that
        turned me off the most about the Nim programming language was its use
        of significant whitespace. The same is true with F# (and of course
        Python). Having had apps with YAML for config, and having had
        nightmares trying to copy/paste config directives from various sources,
        I just find whitespace to be unwieldy.
        
        Now that's a strong opinion, (weakly held - as a language can't be
        judged based on this design decision). But it does sour my interest a
        bit.
       
          harikb wrote 58 min ago:
          +1 white space significance brings back whole tab vs space
          preferences and make it much harder for automatic re-formatting as
          well
       
          tzot wrote 3 hours 10 min ago:
          > Having had apps with YAML for config, and having had nightmares
          trying to copy/paste config directives from various sources, I just
          find whitespace to be unwieldy.
          
          Convert your YaML into JSON and save it in your YaML file. There is
          probably an online converter, but writing one in your language of
          choice should be less than ten lines of code.
          
          Do the same YaML→JSON for the “source” configuration you want
          to copy from, and copy-paste the parts you want. Leave them as JSON.
          
          Complaining about Python's significant whitespace, I get it. I don't
          mind it personally, but it's obligatory and you can't overcome it
          (unless you do `coding: with_braces` tricks, of course). But why one
          would complain about YaML's whitespace? It is not obligatory.
          
              some_key:
                attr1: val1
                attr2: 12312
          
          is equivalent to
          
              {some_key: {attr1: val1, attr2: 12312}}
          
          is equivalent to
          
              {"some_key": {"attr1": "val1", "attr2": 12312}}
          
          is equivalent to
          
              {"some_key": {
              "attr1":
              "val1", "attr2": 12312
              }
              }
          
          and they're all valid YaML (and on the plus side you can leave
          dangling commas at the end of sequences, but it won't be valid JSON
          anymore).
       
            dgfitz wrote 2 hours 56 min ago:
            My gripe with json is the lack of support for comments. Whenever I
            come across a config file that has comments about what the config
            line(s) mean, I am so grateful.
            
            Whenever I come across a json config file, I kind of despair a
            little and start poking at the code in hopes there are comments
            about what the config means.
       
              tzot wrote 2 hours 33 min ago:
              I totally agree with your gripe about JSON's lack of comments.
              There were people AFAIK who tried to write a spec with comments
              (and maybe dangling commas? was it called JSON5?) but by then it
              probably was too late.
       
                tracker1 wrote 1 hour 53 min ago:
                My biggest issue with JSON5 is as far as I'm aware, if you
                update settings programmatically, you tend to lose comments...
                not sure of any implementation that preserves them.
       
            esrauch wrote 2 hours 59 min ago:
            > But why one would complain about YaML's whitespace? It is not
            obligatory.
            
            The problem (as felt by me and also as identified by the person you
            replied to) is that you can't copy-paste/munge some stuff into the
            right spot and then just let the formatter to fix the indentation.
            It's not a problem that the format "at rest" has whatever certain
            indentation to be correct, its that while being actively editing
            your formatter cannot automatically set the correct indentation.
            
            The flow that you're talking about of converting yaml to json and
            then putting it into yaml could work in some cases but thats very
            much a kludge. It will have numerous bad side effects unavoidable,
            including that it would discard comments in the middle since JSON
            doesn't allow for comments at all, theres no timestamps in JSON,
            there's no octal numbers, etc.
       
              tzot wrote 2 hours 41 min ago:
              > The problem (as felt by me and also as identified by the person
              you replied to) is that you can't copy-paste/munge some stuff
              into the right spot and then just let the formatter to fix the
              indentation.
              
              That problem I undestand, and that is why I suggested to convert
              both into JSON —or YaML with default_flow_style=True which
              would preserve datetimes and other non-JSON stuff— and
              copy-paste without the hassle of having to indent/unindent
              correctly. Of course that doesn't help with copying comments.
              That would need extra copy-paste operations, but still one hasn't
              the hassle of significant whitespace. The following is also valid
              YaML:
              
                  {"some_key": {
                  "attr1":
                  # an intermittent comment
                  "val1", "attr2": 12312  # more comments!
                  }
                  }
       
          yoyohello13 wrote 3 hours 34 min ago:
          I get everyone has their thing, but I've been writing Python
          professionally for years and I can't even remember the last time
          significant white space was an issue. You just get used to it, like
          everything else.
       
          nialv7 wrote 4 hours 6 min ago:
          Was coming here to comment the exactly same thing. Significant
          indentation makes me shudder.
       
          bobbylarrybobby wrote 4 hours 11 min ago:
          Never understood how putting up roadblocks for developers trying to
          copy-paste code was deemed acceptable, or GVR (and others) thought
          the solution to poorly formatted code was making formatting carry
          semantics instead of just writing an auto formatter.
       
            adiabatty wrote 3 hours 55 min ago:
            To be fair to GvR, autoformatters weren’t commonplace in the late
            80s and early 90s. Were there even any?
            
            Ever since Go got big, though, everyone else is discovering how
            fantastically nice they are, and that’s a good thing.
       
              cb321 wrote 1 hour 59 min ago:
              GNU indent was already at version 1.9.1 by 1994: [1] If you grab
              that version and unpack it and look at /OChangelog then it seems
              to date back until at least 1989, same as Python itself.
              
              That was for C source, of course.   I expect there were pre-GNU
              indent variants, perhaps posted on comp.sources.unix and maybe
              some commercial things as part of very expensive compiler
              packages.
              
              I would say that running autoformatters in any kind of routine
              way was pretty rare.  EDIT: but I think ascribing the language
              design to commonality or not is probably ahistorical.  Even today
              it's a rather passionate debate. And even at the time, Lisp - the
              poster child of copy-paste friendly PLangs - was routinely
              autoformatted within Emacs', but that was not enough for people
              to not find Lisp code "ugly".
              
   URI        [1]: https://ftp.gnu.org/gnu/indent/
       
              mdasen wrote 3 hours 13 min ago:
              Yea, in the 90s significant whitespace seemed great because it
              meant that you got readable code. The amount of code that you
              might see copy/pasted with terrible formatting/indentation in
              other languages could make you want to scream.
              
              Now, when you paste code and things are wrong, an auto formatter
              cleans it up for you. Before, you'd just end up with an
              unreadable codebase.
              
              It's definitely an odd choice to make now.
       
            Night_Thastus wrote 4 hours 10 min ago:
            I agree. Autoformatters are everywhere and easy to use. I'd far
            rather do that (plus maybe a pre-commit hook) than have to deal
            with whitespace in the language.
       
          FredPret wrote 4 hours 25 min ago:
          YAML has given me eye-twitching ever since I went on an
          ill-considered quest of setting up wifi on a Debian server years ago.
          
          I never figured it out by the way - just bought a really long LAN
          cable.
       
            nobleach wrote 4 hours 1 min ago:
            YAML with Go templating (like you'd find in Helm Charts) was enough
            to push me over the edge.
       
              tzot wrote 2 hours 59 min ago:
              Was there any reason not to use flow collection style, which
              would free the templates from significant whitespace?
       
          scotty79 wrote 4 hours 25 min ago:
          I'm automatically going to be interested in any language with
          significant white space because there are very few mainstream ones
          and I hate the visual clutter that block delimiters create. Pretty
          much there's just Python. Scala 3 can happily do both.
          
          I think we'd be better off if text editors just had option of
          representing braces and such as consistent indentation. Block
          delimiting tokens should optionally have semantics of non directly
          printable characters like new line or tab.
       
            baranul wrote 3 hours 36 min ago:
            A language that can do both Python and C "styles" is Ring. It is
            possible. But the issue is people have such a strong preference for
            one or the other, that they force the language and developers to
            permanently choose.
            
            Even Allman versus K&R or tabs versus spaces are huge battles,
            without even going into significant white space.
       
            pklausler wrote 4 hours 18 min ago:
            You'd love Haskell, which uses curly braces for many constructs,
            but also has rules by which they are implied by indentation -- so
            in practice you only ever see them on records.
       
              recursivecaveat wrote 4 hours 3 min ago:
              I love python syntax overall, absolutely despise Haskell. Wastes
              my time constantly and gives me incomprehensible compiler errors
              when you screw it up. Expression oriented languages are really
              poorly suited for whitespace imo, unless they're hyper-regular
              like s-expressions: I could imagine a decent whitespace-based
              version of those.
       
              scotty79 wrote 4 hours 5 min ago:
              I'm not sure. The semantics is too wild to care about indentation
              or delimiters. I love Scala 3 though. Very rich and flexible
              language.
       
        benrutter wrote 4 hours 48 min ago:
        This is a really nice looking language. Feedback in case the creator
        sees but it wasn't obvious to me at first that it was targeting game
        development. The first mention is in features:
        
        > Features have been picked for their suitability in a game programming
        language
        
        Would be fun to see some basic games like tetris, pong etc in Lobster
        in case anyone has an example floating round?
       
        xscott wrote 4 hours 51 min ago:
        I had seen Lobster before, but not really looked closely.  Seeing it
        again now, I think I was wrong to dismiss it.  Just at the syntactic
        level with semantics described in the link, it looks like it really
        might be "Python done right".  The link mentions lots of features, but
        the following bits caught my eye.
        
        The let/var declarations for constants/variables is much better than
        implicit declaration, which silently hides typos and necessitates ugly
        global/nonlocal declarations.  (Mojo offers this improvement too.)
        
        I don't know for sure, but it seems like it's embraced block arguments
        comparable to how Ruby or SmallTalk does it.  So you can add your own
        control flow, container visitors, etc.    I think of this as another
        syntax for passing a lambda function as an argument, and I'm curious if
        Lobster's optimizer flattens it to a basic block when possible.
        
        I think I'll try to learn more about it.  I wonder if the name is a nod
        to Accelerando.
       
        tines wrote 5 hours 31 min ago:
        Nice! So it looks like polymorphism is done via C++ template-style
        ad-hoc polymorphism? Are there any restrictions on it?
        
        Also, is there any kind of sophisticated pattern matching? I feel like
        for me a language without pattern matching is a non-starter these days.
       
       
   DIR <- back to front page