the towel programming language
play

The Towel Programming Language W4115 PLT, Fall 2015 Zihang Chen - PowerPoint PPT Presentation

The Towel Programming Language W4115 PLT, Fall 2015 Zihang Chen (zc2324) Baochan Zheng (bc2269) Guanlin Chen (gc2666) December 21, 2015 Columbia University Introduction What is Towel anyway? It is ... Stack-based and postfjx-syntaxed


  1. The Towel Programming Language W4115 PLT, Fall 2015 Zihang Chen (zc2324) Baochan Zheng (bc2269) Guanlin Chen (gc2666) December 21, 2015 Columbia University

  2. Introduction What is Towel anyway? It is ... • Stack-based and postfjx-syntaxed • Dynamically strong-typed • General-purpose 42 !println 2 • λ : tail recursion, function as fjrst-class citizen, etc.

  3. Introduction What does it look like? import 'std' @ bind Fold-left ,\ Acc Xs Fun, (Xs ?# ift Acc, (Acc Xs #hd Fun Xs #tl Fun` Fold-left@)) also Sum (0 (+` Fold-left /flip)) then ([1 10 11 20] Sum !println) 3

  4. How to recognize difgerent parts of the example Let me do some syntax-highlighting here. import 'std' @ bind Fold-left ,\ Acc Xs Fun , ( Xs ?# ift Acc , ( Acc Xs #hd Fun Xs #tl Fun ` Fold-left @)) also Sum ( 0 ( + ` Fold-left /flip )) then ( [1 10 11 20] Sum !println ) • Language Structures : Sequence , if forms, Function , Backquote , bind-then forms, import form, export form 4

  5. How to recognize difgerent parts of the example Let me do some syntax-highlighting here. import 'std' @ ( Xs ?# ift Acc , ( Acc Xs #hd Fun Xs #tl Fun ` Fold-left@ )) also Sum ( 0 ( + ` Fold-left /flip )) then ( [1 10 11 20] Sum !println ) Tail recursive function call • Language Structures : Sequence , if forms, Function , Backquote , bind-then forms, import form, export form 5 bind Fold-left ,\ Acc Xs Fun ,

  6. How to recognize difgerent parts of the example Let me do some syntax-highlighting here. import 'std' @ ( Xs ?# ift Acc , ( Acc Xs #hd Fun Xs #tl Fun ` Fold-left @)) also Sum ( 0 ( +` Fold-left /flip )) then ( [1 10 11 20] Sum !println ) Partial function application • Language Structures : Sequence , if forms, Function , Backquote , bind-then forms, import form, export form 6 bind Fold-left ,\ Acc Xs Fun ,

  7. How to recognize difgerent parts of the example Let me do some syntax-highlighting here. bind Fold-left ,\ Acc Xs Fun, (Xs ?# ift Acc, (Acc Xs #hd Fun Xs #tl Fun` Fold-left@)) also Sum ( 0 (+` Fold-left /flip)) then ( [1 10 11 20] Sum !println) supported 7 import 'std' @ • Literals : literals for atoms , numbers , strings , lists , tuples are

  8. How to recognize difgerent parts of the example Let me do some syntax-highlighting here. import 'std' @ ( Xs ?# ift Acc , ( Acc Xs #hd Fun Xs #tl Fun ` Fold-left @)) also Sum (0 ( + ` Fold-left /flip )) 8 bind Fold-left ,\ Acc Xs Fun , then ([1 10 11 20] Sum !println ) • Names : extensive characters supported, fmexible naming

  9. How to recognize difgerent parts of the example Let me do some syntax-highlighting here. import 'std' @ bind Fold-left ,\ Acc Xs Fun, (Xs ?# ift Acc, (Acc Xs #hd Fun Xs #tl Fun` Fold-left@)) also Sum (0 (+` Fold-left /flip)) then ([1 10 11 20] Sum !println) • Language Structures • Literals • Names The above three are what we call word s in Towel. A program in Towel is essentially a sentence of words. 9

  10. Types in Towel Towel supports the following type: • Function • Tuple • String 10 • Int → Big integer • FixedInt → Signed 64-bit integer • UFixedInt → Unsigned 64-bit integer • Float → IEEE754 fmoating point • Atom → A constant with a name (see also Erlang atoms) → String (one of the Enumerable types) • List → Linked list (one of the Enumerable types) → Fixed, random accessible enumerable data type → Passing around a piece of code

  11. The Towel Standard Library, a.k.a. Towelibs In module Std , you will fjnd ... !!pop , !!dup , etc. • The Fun Functions: /foldl , /map , /filter , etc. • Variadic Functions: a pacman that eats arguments until the stack is empty. See manual for more detail. 11 • Arithmetic Functions: + , - , etc. So no operators . • Conversion and Refmection Functions: ~int , ~str , etc. • Routines: functions with side(or stack)-efgects, e.g. !println , • Functions that work with enumerables: #hd , #tl , #cons , etc.

  12. The Towel Compiler, codename weave How weave compiles a piece of towel : it ... tokenizes the source code using a scanner parses the tokens with a parser traverses and transforms AST to IR AST (along with some scope analysis that will detect unbound names) compiles IR AST into bytecode representation Bytecode is runnable via the Towel Virtual Machine! 12 1. Source → Tokens 2. Tokens → AST 3. AST → IR AST 4. IR AST → Bytecode

  13. The Towel Virtual Machine The Towel Virtual Machine is a piece of software that ... decompiles bytecode to IR AST interprets the IR AST (essentially an array of instructions) one by one so you can get the answer within the Towel Virtual Machine! See manual for more detail. 13 1. Bytecode → IR AST 2. IR AST → 42 You can use the Extension mechanism to call OCaml functions from

  14. The future of Towel • A native compiler that compiles IR to C code. • Better error messages, both for the compiler and the virtual machine. • Better debugging facilities: need to make use the dynamicness feature of Towel. • Enrich the standard library so that it’s batteries-included and general-purpose . • Statically typed Towel! A stack-based language is very dynamic due to its unclearness of the data (i.e. type) fmow. A static-typed Towel could be made by analyzing each function’s stack-efgect. 14

  15. And now for something completely difgerent... The DEMO • Partial function application • Tail calls • Standard library • Extensions to the Towel Virtual Machine • The test suite • Anything you would like to ask 15

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend