gilad bracha ministry of truth embedding dsls in newspeak: newshell, ebnf and hopscotch

96
Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Upload: austin-bryant

Post on 18-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Gilad BrachaMinistry of Truth

Embedding DSLs in Newspeak:

NewShell, EBNF and Hopscotch

Page 2: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Three DSLs

Shell Scripting

Parsing

UI

Page 3: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Newspeak Syntax for Java

Programmers

Page 4: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Newspeak Syntax for Java

Programmers

Page 5: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Newspeak Syntax for C#

Programmers

Page 6: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Syntax: Unary Expressions

x foo

means

x.foo()

Page 7: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Syntax: Unary Expressions

x foo

means

x.foo()

Page 8: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Binary Expressions

6 + 3 factorial

evaluates to 12.

In javanese, we’d write

6.+(3.factorial()) or, really

6.plus(3.factorial())

Page 9: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Keyword Expressions

Windows version: 7 + 0i .

is equivalent to all these:

Windows version: (7 + 0i).

Windows version: (7 + (0 i)).

Windows.version(7 + 0.i()) ;

Page 10: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Keyword Expressions

add: 1 to: Cobol

in javanese would be

add(1, Cobol);

Big advantage - no arity errors

Page 11: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Three DSLs

Shell Scripting

Parsing

UI

Page 12: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

NewShell

class NewShell = (

ls value: ‘-l’.

ls - ‘lt’.

echo value: ‘Hello World’.

svn value: ‘ls’ value: ‘svn://myDir’.

(ls value findTokens: {Character cr}) collect: ls.

)()

Page 13: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Three DSLs

Shell Scripting

Parsing

UI

Page 14: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

BNF

id = letter (letter | digit) *

Parser Combinators

Page 15: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

BNF

id = letter (letter | digit) *

Newspeak

id = letter, (letter | digit) star.

Parser Combinators

Page 16: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

BNF

id = letter (letter | digit) *

Newspeak

id = letter, (letter | digit) star.

Javanese

id = letter().seq(letter().or(digit()).star());

Parser Combinators

Page 17: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

Page 18: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

Page 19: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

Page 20: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

Page 21: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

Page 22: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

Page 23: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

Page 24: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

Page 25: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

Page 26: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

Page 27: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

letter

Page 28: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

letter

Page 29: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

digitletter

Page 30: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter

|

digitletter

Page 31: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter star

|

digitletter

Page 32: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

How it Works

id = letter, (letter | digit) star.

letter star

|

digitletter

,

Page 33: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Why is this Pretty?

id = letter, (letter | digit) star.

Page 34: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Why is this Ugly?

id = letter().seq(letter().or(digit()).star());

Page 35: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Why is this Ugly?

id = letter().seq(letter().or(digit()).star());

vs.

id = letter (letter | digit) *

vs.

id = letter, (letter | digit) star.

Page 36: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Why is this Ugly?

id = letter().seq(letter().or(digit()).star());

vs.

id = letter (letter | digit) *

vs.

id = letter, (letter | digit) star.

Page 37: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Why is it Ugly?

A programming language is low level when its programs require attention to the irrelevant

- Alan Perlis

Page 38: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

class ExampleGrammar1 = ExecutableGrammar ( |

digit = charBetween: ‘0’ and: ‘9’.

letter = (charBetween: ‘a’ and:’z’) | (charBetween: ‘A’ and:’Z’).

id = letter, (letter | digit) star.

identifier = tokenFor: id.

hat = tokenFromChar: ‘ˆ’.

expression = identifier.

returnStatement = hat, expression.

| )()

A Complete Grammar

Page 39: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

returnStatement = hat, expression wrapper:[:r : e | ReturnStatAST on: e ]

Building an AST

Page 40: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Building an AST

returnStatement = hat, expression

wrapper:[:r : e |

ReturnStatAST on: e

]wrapper: ,

expression

^

Page 41: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

returnStatement = hat, expression

wrapper:[:r : e |

ReturnStatAST on: e

]

Grammar

Page 42: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

returnStatement = hat, expression

wrapper:[:r : e |

ReturnStatAST on: e

]

Semantic Action

Page 43: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Superclass (pure grammar specification):

returnStatement = hat, expression

Subclass (AST builder):

returnStatement = (

super returnStatement

wrapper:[:r : e | ReturnStatAST on: e] )

Factor out Grammar

Page 44: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

class ExampleParser1= ExampleGrammar1 () (

id = (

ˆsuper id

wrapper:[:fst :snd | fst asString, (String withAll: snd)]

)

identifier = (

ˆsuper identifier

wrapper:[:v | VariableAST new name: v token;

start: v start; end: v end].

)

r

Modular Parser

Page 45: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

returnStatement = (

ˆsuper returnStatement

wrapper:[:r :e | ReturnStatAST new expr:e;

start: r start; end: e end].

)

)

Modular Parser

Page 46: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

class ExampleGrammar2 = ExampleGrammar1 (

|

if = tokenFromSymbol:#if.

then = tokenFromSymbol:#then.

else = tokenFromSymbol:#else.

ifStatement = if, expression, then, statement, else, statement.

statement = ifStatement | returnStatement.

|

)()

Extending a Grammar

Page 47: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual RecursionIfStmtreturnStat

|

if then else

stmt

Page 48: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit nilnilnilnilnilnilnil

nil

nilnilnil

nil

Page 49: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsernilnilnilnilnilnil

nil

nilnilnil

nil

Page 50: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parser

nilnilnilnilnil

nil

nilnilnil

nil

Page 51: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parser

nilnilnilnil

nil

nilnilnil

nil

Page 52: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parser

nilnilnil

nil

nilnilnil

nil

Page 53: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parsera parser

nilnil

nil

nilnilnil

nil

Page 54: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parsera parsera parsera parser

nil

nilnilnil

nil

Page 55: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parser

nilnilnil

nil

Page 56: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parser

a parsernilnil

nil

Page 57: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parser

a parsera parser

nil

nil

Page 58: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statement

ifStatement

letterid

identifierhat

expressionreturnStatement

if

thenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parser

a parsera parserboom!

nil

Page 59: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Addressed with laziness in Haskell

Can be addressed with closures

ifStatement = if, [expression], [then], [statement],

[else], [statement].

statement = ifStatement | [returnStatement].

Mutual Recursion

Page 60: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Addressed with laziness in Haskell

Can be addressed with closures

ifStatement = if, [expression], [then], [statement],

[else], [statement].

statement = ifStatement | [returnStatement].

Mutual Recursion

Page 61: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Use Reflection instead of Laziness.

Framework initializes all slots to “stand-in” parsers which act as forward references

Being Reflective rather than Lazy

Page 62: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit fwd reffwd reffwd reffwd reffwd reffwd reffwd ref

fwd reffwd reffwd reffwd reffwd ref

Page 63: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parserfwd reffwd reffwd reffwd reffwd reffwd ref

fwd reffwd reffwd reffwd reffwd ref

Page 64: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parserfwd reffwd reffwd reffwd reffwd ref

fwd reffwd reffwd reffwd reffwd ref

Page 65: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parserfwd reffwd reffwd reffwd ref

fwd reffwd reffwd reffwd reffwd ref

Page 66: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parserfwd reffwd reffwd ref

fwd reffwd reffwd reffwd reffwd ref

Page 67: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parserfwd reffwd ref

fwd reffwd reffwd reffwd reffwd ref

Page 68: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parsera parsera parser

fwd reffwd reffwd reffwd reffwd ref

Page 69: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parserfwd reffwd reffwd reffwd ref

Page 70: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parsera parserfwd reffwd reffwd ref

Page 71: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parsera parsera parserfwd reffwd ref

Page 72: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parsera parsera parsera parserfwd ref

Page 73: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual Recursion

statementifStatement

letterid

identifierhat

expressionreturnStatement

ifthenelse

digit a parsera parsera parsera parsera parsera parsera parser

a parsera parsera parsera parsera parser

Page 74: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual RecursionIfStmtreturnStat

|

if then else

stmt

FwdRef

Page 75: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Being Reflective rather than Lazy

Use Reflection instead of Laziness.

Framework initializes all slots to “stand-in” parsers which act as forward references

When grammar is completely initialized, stand-ins are connected to originals and forward calls to them

Page 76: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Mutual RecursionIfStmtreturnStat

|

if then else

stmt

FwdRef

Page 77: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

The Mirror is Mightier Than the Sloth

Page 78: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Grammar1

Grammar2 Parser1

Parser2

Page 79: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Grammar1

Grammar2 Parser1

Parser2

Page 80: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Grammar1

Grammar2

Parser1

Parser2

Page 81: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

class ExampleParser2 = ExampleParser1 mixin | >

ExampleGrammar2 ()

(

ifStatement = (

ˆsuper ifStatement

wrapper:[:ifKw :e :thenKw :s1 :elseKw :s2 | …

]

)

)

Composing Parsers

Page 82: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Shareable among several IDEs/compilers that require distinct ASTs

Shareable among other language tools: syntax colorizers, postprocessing tools

Grammar is shared executable

specification

Page 83: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Three DSLs

Shell Scripting

Parsing

UI

Page 84: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Hopscotch

A GUI application framework

Higher level of abstraction than widgets

Provides DSL for composing presentations out of pieces known as fragments

Page 85: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Fragments

Fragments of presentation

Atomic widgets correspond to leaf fragments

Aggregates represented via compound fragments

Composed via combinators

Page 86: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Fragment Combinators

blank, filler

button:action:, link:action:, image:, menuWithLabelsAndActions:

row:, column:, centered:, collapsed:expanded:

deferred:, draggable:subject:

Page 87: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Dispatching up the fragment hierarchy

Dispatching up the visual containment hierarchy makes sense

Old idea (at least since NewtonScript)

Realized using doesNotUnderstand:

Page 88: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Demo

Page 89: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Connections

Self & Smalltalk

Page 90: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

ConnectionsParser Combinators.

Too much to survey; some highlights:

Parsec (Haskell parser combinator library)

Swierstra et al.

Sparsec (Scala parser combinator library)

PEGs (Ford, POPL04, ICFP)

Page 91: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Connections

Parser Combinators (continued)

Tedir (Plesner-Hansen’s masters thesis)

Ometa (OOPLA 07 DLS)

Page 92: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Conclusions

Newspeak supports DSLs via

Unconventional syntax

keywords

operators as methods

implicit receivers

Dynamic typing and Reflection

doesNotUnderstand:

Page 93: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Conclusions

Newspeak also supports DSLs via

Mixins, Modules, Hierarchy inheritance

IDE

Combinators are a powerful technique

Compositional

Useful in libraries and languages

Page 94: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Status Available at http://newpeaklanguage.org

Open source under Apache 2.0 license

Work in Progress

Expect some tweaks to syntax and semantics

Implementation still not complete - especially libraries

Page 95: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

Credits

Peter Ahe

Vassili Bykov

Yaron Kashai

Bill Maddox

Eliot Miranda

Page 96: Gilad Bracha Ministry of Truth Embedding DSLs in Newspeak: NewShell, EBNF and Hopscotch

This file is licensed under the Creative Commons Attribution ShareAlike 3.0 License. In short: you are free to share and make derivative works of the file under the conditions that you appropriately attribute it, and that you distribute it only under a license identical to this one. Official

license.

The Newspeak eye used in the bullets, slide background etc. was designed by Victoria Bracha and is used by permission.