• Dandroid@dandroid.app
    link
    fedilink
    arrow-up
    4
    ·
    11 months ago

    Yes, I was shocked at how small it is. I had no experience working with such limited resources going into this project. Our router had 32MB of storage. At one point I was looked into adding a python interpreter, and it was like 11MB. The Lua interpreter is like 250KB. Tiny!

    Also, the ternary operator has the best syntax of any language I have ever used.

    x = [condition] and [true value] or [false value]

    No question marks or colons or anything weird. It’s a logical extension of && and || after commands in bash using keywords since it is a verbose language. I wish every language had this syntax.

    For contrast, python is:

    x = [true value] if [condition] else [false value]

    It just seems weird to me to have the condition in the middle.

    • sugar_in_your_tea@sh.itjust.works
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      11 months ago

      Yeah, I’ve always hated Python’s ternary, and I use it every day at work. Though you can do the same in Python if you want:

      x = [condition] and [true value] or [false value]
      

      I consider that bad style because the dedicated syntax is preferred. You can also do similar in JS:

      x = [condition] && [true value] || [false value]
      

      The caveat in both (and Lua) is that you’ll get the false value if the true value is falsey.

      My favorite syntax is Rust:

      x = if [condition] { [true value] } else { [false value] };
      

      This preserves the flow you get with the ? :, allows [true value] to be falsey, and is idiomatic without having a lot of extra syntax.

      My favorite thing about Lua is that tables separate numeric from string keys, so you can do this:

      x = { metadata = ... }
      x[1] = 3
      x[2] = 4
      print(#x) -- prints 2
      

      This is really nice for representing something like an XML/HTML DOM, where numeric indices are child nodes, and string keys are attributes. Or you can store metadata about a list in the list itself (e.g. have a reference to the max value, min value, etc). It’s just really nice to work with.