19
A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee, Rizwan Syed

A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

A JSON Data Processing LanguageAudrey Copeland, Walter Meyer, Taimur Samee, Rizwan Syed

Page 2: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Introduction● Language design centered around the

programmatic manipulation of JSON data and interacting with HTTP JSON APIs

● C-like syntax and semantics● Weakly-typed (dynamically-typed) with

most typing determined at compile-time● Statically-scoped● JSON-like data types that are statically

typed● String Library for outputting Objects and

Arrays to JSON-encoded Strings● HTTP Library

Page 3: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Language Idea and FeaturesWhat are some of the features provided?

● Nested, Polymorphic, Dynamic Objects● Static Arrays● Interaction with the Web APIs (using

HTTP Library)● String Manipulation and Conversion● Had idea to write a language suitable for

systems orchestration (Docker in particular)

● From there realized we could make more generalized language suitable for interacting with web-based JSON APIs.

● “Also, we just preferred the idea of it being statically-typed.”

Page 4: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Language FeaturesWhere did we fall short?

● Objectify and Arrify: Converting/parsing JSON to objects, arrays, and primitives in our language

● Multidimensional and Dynamic Arrays

Page 5: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Data TypesWhat data types are there?

● Ints● Floats● Strings● Booleans● Arrays● Objects

int a = 4;float b = 3.14;string c = “Gantry!”;bool d = true;int array e = [ 4 , 3 , 2 ];

object f = {|string s : “foo”,int m : 3,bool n : true,object o = {| int m : 42 |},string array o : [“foo”, “bar”]

|};

object array g = [{| string x: “foo” |}];

Page 6: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Control Flowint main(){ int i = 10; bool v = true; for (i = 0; i < 4; i++){ if (i == 2){ print_i(i); } } bool x = false; while(x == false){ i++; if (i > 5 && v == true){ x = true; } else{ print_b(x); } } return 0;}/* Output: * 2 */ false

● if/else● for● while● return

Page 7: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

System Architecture

Page 8: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

DevelopmentLanguages

● OCaml● LLVM● C● BASH

Development Environment and Tools

● Google Compute Engine● Git (GitHub)● Travis CI● Ubuntu● Slack

Page 9: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Code Contributions

● We stayed on schedule for the most part

Page 10: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Abstract Syntax TreeProgram

Globals List Function List

ID(Name)

Parameters StatementsType Specification(return type)

Expression

Literals Id ArrAccOps Assign FunExp KeyValArrExp ObjExp

Int Bool Float String

AssignDecl

Page 11: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Testing● Avoided Unit Tests after “Hello World”● Integration Testing

○ Wrote tests with better code coverage as we built new features

● Test Automation○ Run all tests at once using test_all

script from MicroC○ Added lines to automatically generate

correct output files by using our test format

○ Travis CI○ All tests must pass before merging

into master

int main() { print_s(“Hello World”); return 0;}

/*****TEST****Hello World!*/

Page 12: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Objects and Arrays● Objects are dynamic,

polymorphic, infinitely-nested key-value data types

● Arrays are static, singly-dimensioned, and singly-typed

Page 13: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Objects and Arrays● Objects are dynamic,

polymorphic, infinitely-nested key-value data types

● Arrays are static, singly-dimensioned, and singly-typed

/* Int Array Struct */typedef struct arr_int { int len; int typ; int *i_a;} arr_int;

/* The Object Struct */typedef struct obj { struct obj *next; char *k; int v_typ;

int i; double f; struct obj *o; char *s; bool b; struct arr_int *i_a; struct arr_flt *f_a; struct arr_str *s_a; struct arr_bool *b_a;} obj;

Page 14: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Object Polymorphism and Runtime● Objects are dynamic,

polymorphic, infinitely-nested key-value data structures

● Operations are realized via a small C Object runtime that handles casting data into and out of Struct fields

● Codegen (LLVM) handles casting on return from this library when necessary

obj_findkey(...)obj_getkey(...)obj_assign(...)obj_addkey(...)

gantrylib_obj.c

object f = {|string s : “foo”,object o = {| int m : 42 |},

|}

string s = f.s; // runtime handlesf.o.m = “PLT”; // runtime handlesint x = f.s; // runtime error

LHV RHV

Page 15: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Object and Array Stringify- Produce JSON-encoded Strings - Object Stringify uses recursion to stringify nested objects- Array Stringify accepts a void pointer (cast in Codegen) to an array structure

int main() { object o = {|

string name: “Joe”,int age: 3,string array pets: [“Cat”, “Dog”, “Pig”]|};

string to_string = obj_stringify(o); print_s(to_string);}

{ "pets" : [ "Cat" , "Dog" , "Pig" ] , "age" : 3 , "name" : "Joe" }

Page 16: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

String Library- Get String, String to Integer, Slice, String Comparison, String Equals, String

Concatenation

string foo = “foo”;string bar = “bar”;string foobar = foo ^ bar;string f = slice(foobar, 0, 2);if (foo != bar) {

print_s(“different strings”);}

Page 17: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

HTTP Library● Support for HTTP1.1 GET and

POST methods● Methods take in target URL,

messy stuff under the hood● Deals purely in strings, relying

on other libraries and methods● Written in C using libcurl

string url = “http://192.168.0.9:32000”;string uri = “/v1.19/containers/create”; string response = httpget(url^uri);

object post = {| string image: “centos”, string cmd : “[echo, hi]” |};

httppost(url ^ uri, obj_stringify(post));

Page 18: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Demo Part I: Blackjack via JSON API

https://deckofcardsapi.com/

Page 19: A JSON Data Processing Language - Columbia Universitysedwards/classes/2017/4115-fall/reports/Ga… · A JSON Data Processing Language Audrey Copeland, Walter Meyer, Taimur Samee,

Demo Part II: Orchestrating Linux Containers

JSON HTTP API

docker.gty docker-run.gty

spawns

API Calls