jatesté - columbia universityjatesté team andrew grant ( [email protected] ), language guru...

22
JaTesté Build Software So Secure You May Actually Make America Great Again Jake Weissman, Andrew Grant, Jemma Losh, Jared Weiss

Upload: others

Post on 28-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTestéBuild Software So Secure You May Actually Make America Great Again

Jake Weissman, Andrew Grant, Jemma Losh, Jared Weiss

Page 2: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Why JaTesté?

● JaTesté promotes good coding practices, allowing the programmer to easily define test cases, for any function, directly into his or her source code.

● Compiler creates two files:○ 1) Normal executable○ 2) An executable that runs the user-

defined tests and prints results

Page 3: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Team

● Andrew Grant ([email protected]), Language Guru ● Jake Weissman ([email protected]), Manager● Jared Weiss ([email protected]), Software Architect● Jemma Losh ([email protected]), Tester

Page 4: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Software Development Environment

● Git + github○ https://github.com/jaredweiss/JaTeste○ 28 Issues Closed○ 137 Pull Requests Closed○ 530+ commits

● Vim● Ubuntu 15.10 + VirtualBox● OCaml● Makefile

Page 5: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Teamwork Success

Page 6: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

(Very) Quick JaTesté Overview

● Can directly embed test cases into one’s source code○ This is the main point of the language

● Imperative programming language, with light object-oriented features. ○ Syntax and paradigm similar to C, Java, etc

● Compiles into LLVM, a portable assembly-like language

Page 7: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

(Very) Quick JaTesté Overview contd.

● Testing is at the heart of the JaTesté programming language○ “with test” keyword appended to function to define tests○ “using” keyword appended to “with test” block to set up

environment for tests

● Normal function

● Test cases for function

● Environment for test cases

Page 8: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Program Syntax

● Program made up of four segments:○ 1) Header files○ 2) Global variables○ 3) Function definitions○ 4) Struct definitions

● Must be in this order

Page 9: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Header Files Syntax

● Quotations for files from current directory

● Greater/less than symbol for files from standard library

Page 10: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Statements Syntax

● Standard control flow constructs○ For loops○ While loops○ If-else statments○ Return statements

● Can have side effects

Page 11: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Struct Syntax

● Structs can contain fields and methods

● Like objects in Java○ But significantly worse

Page 12: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Test Syntax

./jatest-native -t source.jt lli source-test.ll

Page 13: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

JaTesté Test Syntax contd.

./jateste-native -t source.jt

lli source-test.ll

Page 14: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Compiler Overview

● Compiler files:○ jateste.ml: entry point for soure code

○ Scanner.mll: reads characters, and outputs tokens

○ parser.mly: generates AST from tokens

○ ast.ml: defines AST

○ semant.ml: checks semantics of the AST, generates SAST

○ sast.ml: defines SAST

○ codegen.ml: turns SAST into LLVM code

○ exceptions.ml: defines error messages

● 1830 lines of Compiler source code● Standard library in lib/ folder● Test files in test/

Page 15: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Compiler Architecture

Page 16: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Compiler Overview contd.

● Key idea: if “-t” command line argument is supplied, the compiler generates two executables○ Normal file○ Test file

● ./jateste-native -t source.jt -> source.ll, source-test.ll○ lli source.ll○ lli source-test.ll○ (lli is an LLVM interpreter)

Page 17: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Compiler Overview contd.

source.jt (pseudo-code)

source-test.ll (pseudo-code)

source.ll (pseudo-code)

Page 18: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Compiler Overview contd.

● cd src/● make all -> outputs jateste-native binary● ./jateste-native -t source.jt -> source.ll, source-test.ll

○ lli source.ll○ lli source-test.ll

● JaTeste standard library in lib/

Page 19: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Testing

● Testing done via Makefile○ diff test-var1.jt test-var.1out○ diff test-class1.jt test-class1.out○ etc....

● 126 test files○ All passed

● Two Makefiles○ Primary Makefile in src/ -> where source code is compiled○ Test Makefile in test/ -> where tests are defined and added

Page 20: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Testing contd.

Page 21: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Testing contd.

Page 22: JaTesté - Columbia UniversityJaTesté Team Andrew Grant ( amg2215@columbia.edu ), Language Guru Jake Weissman ( jdw2159@columbia.edu ), Manager Jared Weiss ( jbw2140@columbia.edu

Demo Time!