Show HN: The Blots Programming Language

(blots-lang.org)

53 points | by paulrusso 5 days ago ago

11 comments

  • RodgerTheGreat a day ago ago

    For contrast, here's how I'd handle the example given on the front page in Lil[0]:

        i:"%j" parse shell["curl -s https://api.weather.gov/gridpoints/BOU/63,62/forecast"].out
        t:i.properties.periods..temperature
        o.average:(sum t)/count t
        o.minimum:min t
        o.maximum:max t
        show[o]
    
    Lil doesn't have implicit parsing of .json arguments like Blots- certainly a nice feature for the niche Blots is aimed at. Lil also doesn't have an arithmetic average as a builtin like Blots, but in this case it's easy enough to do without.

    The biggest difference here is how Lil handles indexing: The ".." in that second line can be read as "for every index"; a wildcard. I can follow the mapping that occurs in Blots' "via" expression, but I find it less clear in this example.

    It can also be nice to treat lists-of-objects as proper SQL-like tables:

         select number name temperature windSpeed from table i.properties.periods
        +--------+-------------------+-------------+---------------+
        | number | name              | temperature | windSpeed     |
        +--------+-------------------+-------------+---------------+
        | 1      | "This Afternoon"  | 54          | "14 mph"      |
        | 2      | "Tonight"         | 46          | "3 to 12 mph" |
        | 3      | "Wednesday"       | 69          | "5 mph"       |
        | 4      | "Wednesday Night" | 45          | "3 mph"       |
        | 5      | "Thursday"        | 79          | "5 mph"       |
        | 6      | "Thursday Night"  | 49          | "5 mph"       |
        | 7      | "Friday"          | 83          | "2 to 6 mph"  |
        | 8      | "Friday Night"    | 52          | "6 mph"       |
        | 9      | "Saturday"        | 81          | "3 to 8 mph"  |
        | 10     | "Saturday Night"  | 53          | "3 to 8 mph"  |
        | 11     | "Sunday"          | 81          | "3 to 7 mph"  |
        | 12     | "Sunday Night"    | 54          | "3 to 7 mph"  |
        | 13     | "Monday"          | 77          | "3 to 7 mph"  |
        | 14     | "Monday Night"    | 53          | "3 to 7 mph"  |
        +--------+-------------------+-------------+---------------+
    
    I hope you continue to tinker and evolve Blots; a personal scripting language guided by the use-cases you encounter naturally can be very rewarding and useful.

    [0] http://beyondloom.com/tools/trylil.html

    • iberator a day ago ago

      wow that sql like code is really impressive

      • flymasterv a day ago ago

        Lil is such a beautiful language. It’s so much fun for little data tasks like this.

  • rixed a day ago ago

    From the readme:

      [1, 2, 3] * 10  // [10, 20, 30] (because [1 * 10 = 10, 2 * 10 = 20, 3 * 10 = 30])
      [4, 5, 6] > 3 // true (because [4 > 3 = true, 5 > 3 = true, 6 > 3 = true], so the condition is true for all elements)
    
    I guess most people would have expected that second expression to return

      [true, true, true]
    
    Is this really more practical to single out booleans like that, compared to having a separate step for ANDing?
  • abatilo 5 days ago ago

    What would you say is a benefit of using this over using jq?

    • paulrusso 5 days ago ago

      Good question! Personally, I don't often reach for jq as I've never really taken the time to get comfortable with its syntax. Obviously I can now have an LLM generate me a jq command that'll do what I want, but I'd prefer to be able to at least visually scan the suggested implementation to make sure it actually does the thing I want before I go and run it.

      More broadly, a lot of other command line utils for transforming input have such an emphasis on terseness that I sort of bounce off of them. awk and sed and jq are all super powerful tools, but I wanted a tool that had a more balanced trade-off of characters vs. clarity.

  • markchristian 5 days ago ago

    Super cool! I’ve always wanted to make my own lil language and I’ve always been too intimidated to try.

    • iberator a day ago ago

      Start with writing a custom cpu emulator -> machine code -> assembler -> compiler

      Sounds hard but it's quite easy with stack architecture :) Easier than learning JS for sure

    • fuzztester a day ago ago

      nowadays it is somewhat easier to make your own programming language, than it was 10 to 20 or 30 years ago, because there are a lot of resources such as tutorials and open source projects available on the internet, in both text and video formats, to learn from. there are also many online forums where you can ask questions and get answers and advice.

  • japprovato 3 days ago ago

    I’m curious, what was the hardest part about making Blots? And what was the most fun part?

  • mrlonglong a day ago ago

    Blot on the landscape was a brilliant subversive comedy British TV series from the 80s.