JSON-Sprachen-Challenge

Wenn ihr eine Sprache designen würdet, deren Sourcecode gültiges JSON ist, wie würde die aussehen?

Hier mein Kandidat, mit deutlichem Haskell/ML Einfluss:

{
  "module" : "Calc",
  "import" : ["Math.sqrt"],
  "export" : ["calc"],

  "calc" : [ { "value" : "Obj" },
    {
      "let" : [
        { "p1" : ["value", ["points", "p1"] ]},
        { "p2" : ["value", ["points", "p2"] ]}
      ],
      "in" : { "distance" : [ "p1", "p2"] }
    }
  ],

  "distance" : [ { "p1" : "Point" }, { "p2" : "Point" },
    {
      "let" : [
        {"x1" : ["p1", ["x"]]},
        {"x2" : ["p2", ["x"]]},
        {"y1" : ["p1", ["y"]]},
        {"y2" : ["p2", ["y"]]}
      ],
      "in" : { "sqrt" :
        {"+" : [
          {"sqr": {"-" : ["x1", "x2"]}},
          {"sqr": {"-" : ["y1", "y2"]}}
        ]}
      }
    }
  ],

  "sqr" : [{ "value" : "Dbl" },
    { "*" : ["value", "value"] }
  ],

  "Point" : {
     "x" : "Dbl",
     "y" : "Dbl"
  }
} 

Ich habe schnell gemerkt, dass es recht schwierig ist, Klammern u.s.w. zu vermeiden, ohne uneindeutig zu werden. Wobei mir das Beispiel schon recht gut gefällt.

Websuchen liefern da ja schon einiges: https://www.google.com/search?q=language+written+in+json

Conditionals fehlen in dem Beispiel halt noch, aber man kann wohl davon ausgehen, dass sie wie "*" und "+" einfach über "<=" etc. abgebildet werden könnten.

Ja, habe ich auch mal drübergeschaut. Ein LISP-Clone ist natürlich syntaktisch am passendsten, wäre aber nicht meine erste Wahl.

Aber mir geht es ja hier mehr um Kreativität. Ich fand es jedenfalls erstaunlich schwierig, etwas halbwegs lesbares hinzubekommen.

Finde ich gut, wird sich aber nur schwer etablieren können… Programmierer sind nicht immer fleißig.

Für einen Compilerbauer ein Elderado. :smiley:

{
   "import": "app.jar",
   "$returnValue": {
        "executeStatic": {
            "name": "de.mycompany.Main.main",
            "params": ["Ich würd zu aller erst ne bridge schreiben", "Grund: ich will nicht mit json programmieren!", "Wäre noch schlimmer als JavaScript"]
        }
    },
    "exitCode": "$returnValue"
}

zählt das?

1 „Gefällt mir“

Klar, warum nicht :smiley: