Clone wiki

inf225public / JSONfunc

(@swi083)

Mitt prosjekt er å lage et (lettvekts) programmeringsspråk spesifisert i JSON (språket kan kalles JSONfunc). Tanken er at språket skal kunne brukes for å laste inn skript (f.eks. fra eksterne nettsteder) i JavaScript-programmer uten at skriptene får tilgang til noe annet enn data som blir eksplisitt sendt til skriptene. Parsing av JSON er innebygget i de fleste JavaScript-implementasjoner, så dette gjør det enkelt og effektivt å få et syntaks-tre-objekt.

JSON brukes også typisk som datautvekslingsformat ved bruk av AJAX, Web worker og Web Messaging API-ene – JSONfunc kan da brukes for å sende små skript i tillegg til dataene som utveksles. JSONfunc-skriptene vil typisk være skript som må kjøres på de innhentede dataene (på klientsiden) for å få dataene på formen som var ønsket. Dette kan brukes for å flytte kostbar etterbehandling av data fra server til klient - ting som f.eks. sortering, formatering, konvertering o.l.

Ønskede egenskaper for JSONfunc-språket:

  • Kode skal enkelt kunne genereres av andre programmer
  • Funksjonelt
  • Uten side-effekter
  • Statisk typet
  • Støtte behandling JavaScripts/JSONs innebygde "primitive" datatyper
  • Også støtte for behandlig av JSON-objekter, men dette er ikke 1. prioritet

Egenskaper som ikke er mål for JSONfunc:

  • Blanding av vanlige data og JSONfunc i samme JSON-objekt
  • Være spesialdesignet for å kode mer fullstendig kloning av JavaScript-objekter (som grafer o.l.) som JSON. Dette er allerede gjort av f.eks. http://dojotoolkit.org/api/?qs=1.9/dojox/json/ref. Dette betyr ikke at JSONfunc ikke kan brukes til å lage f.eks. graf-objekter, men at det bare ikke er spesialtilpasset det.
  • Være lett leselig for mennesker (da er det i så fall bedre å lage verktøy som oversetter til JSON-syntaks)

Implementasjon:

  • Hovedimplementasjonen vil være i JavaScript/CoffeeScript. Dette vil være en tolker som tar et JSON-objekt med JSONfunc-kode og returnerer en/flere JavaScript-funksjoner som kan kalles med inndata for å bruke funksjoner i JSONfunc-skriptet på inndataene.
  • Det kan også være aktuelt med en implementasjon som bruker JavaScript-closures til å (rekursivt) erstatte JSONfunc-kode med genererte JavaScript-funksjoner (en slags kompilering).
  • Det blir gjerne også en implementasjon i Haskell for testing — fordi Haskells algebraiske datatyper lett kan brukes til å evaluere et AST. Det finnes også biblioteker som enkelt oversetter JSON til ens eget AST: http://hackage.haskell.org/package/aeson-0.6.2.1/docs/Data-Aeson.html. Data.Aeson kan riktignok sies å bryte med JSON-spesifikasjonen ved å lagre flyttall i double-format, men siden JSONfunc bare skal brukes i JavaScript-sammenheng skal ikke det være et problem fordi JavaScript også lagrer flyttall som double.

(Tror nok det blir mest intensivt arbeid med dette prosjektet de to siste ukene av november, siden jeg bl.a. har et gruppeprosjekt i INFO116 samtidig.)

Updated