• arcine@jlai.lu
    link
    fedilink
    arrow-up
    19
    ·
    5 hours ago

    Nix is the next step in that evolution. It’s basically just JSON that can generate itself !

    • KindaABigDyl@programming.dev
      link
      fedilink
      arrow-up
      6
      ·
      edit-2
      3 hours ago

      It’s basically just JSON that can generate itself !

      You have inspired me.

      I will make JSON with meta-programming

      I will call it DyJSON, i.e. “Dynamic JSON” but pronounced “Die, Jason!”

      It is JSON with meta-programming and the ability to call C functions from libraries

      Example:

      # This is a line comment
      
      # Put your function definitions up here
      (concat str_a str_b: "concat" "my-lib.so") # Import a function through a C ABI
      (make-person first_name last_name email -> { # Define our own generative func
          "name": (concat (concat $first_name " ") $last_name),
          "email": $email
      })
      
      # And then the JSON part which uses them
      [
          (make-person "Jenny" "Craig" "[email protected]"),
          (make-person "Parson" "Brown" null)
      ]
      

      As you can see, it is also a LISP to some degree

      Is there a need for this? A purpose? No. But some things simply should exist

      Thank you for helping bring this language into existence

      • KindaABigDyl@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        2 hours ago

        Here is the grammar:

        <json> ::=              <value> | <fn-def> <json>
        <value> ::=             <object> | <array> | <string> | <number> | <bool>
                                | <fn-def> | <fn-app>
                                | "null"
        <object> ::=            "{" [ <member> { "," <member> } ] "}"
        <member> ::=            <string> ":" <value>
        <string> ::=            "\"" { <char> } "\""
        <char> ::=              (ASCII other than "\"", "\\", 0-31, 127-159)
                                | (Unicode other than ASCII)
                                | ( "\\" (
                                    "\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t"
                                    | "u" <hex> <hex> <hex> <hex>
                                )
        <hex> ::=               /A-Fa-f0-9/
        <array> ::=             "[" [ <value> { "," <value> } ] "]"
        <number> ::=            <integer> [ <fraction> ] [ <exponent> ]
        <integer> ::=           "0" | /[1-9]+/ | "-" <integer>
        <fractional> ::=        "." /[0-9]+/
        <exponent> ::=          ("E" | "e") [ "-" | "+" ] /[0-9]+/
        <bool> ::=              "true" | "false"
        <fn-def> ::=            "(" <ident> { <ident> }
                                    ("->" <value> | ":" <string> <string>) ")"
        <ident> ::=             <startc> { <identc> }
        <startc> ::=            /A-Za-z_/ or non-ASCII Unicode
        <identc> ::=            <startc> | /[0-9-]/
        <fn-app> ::=            "(" <ident> { <value> } ")"
        <var> ::=               "$" <ident>