Why Smalltalk Wins the Host Languages Shootout

Post on 25-Dec-2014

436 views 2 download

description

Integration of multiple languages into each other and into an existing development environment is a difficult task. As a consequence, developers often end up using only internal DSLs that strictly rely on the constraints imposed by the host language. Infrastructures do exist to mix languages, but they often do it at the price of losing the development tools of the host language. Instead of inventing a completely new infrastructure, our solution is to integrate new languages deeply into the existing host environment and reuse the infrastructure offered by it. In this presentation we show why Smalltalk is the best practical choice for such a host language.

Transcript of Why Smalltalk Wins the Host Languages Shootout

Why Smalltalk Wins the Host Languages Shutout

Lukas Renggli and Tudor Gîrbahttp://scg.unibe.ch/research/helvetia

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Multiple Context Specific Languages

HomogeneousLanguage Integration

Homogeneous Tool Integration

‣ C++

‣ C#

‣ Java

‣ Javascript

‣ Lisp

‣ Ruby

‣ Smalltalk

1. Minimal Syntax

2. Dynamic Semantics

3. Reflective Facilities

4. Homogeneous Language

5. Homogeneous Tools

6. On-the-fly Programming

1. Minimal Syntax

2. Dynamic Semantics

3. Reflective Facilities

4. Homogeneous Language

5. Homogeneous Tools

6. On-the-fly Programming

1MinimalSyntax

Abstract Type Declaration

Annotation

Annotation Binding

Annotation Type Declaration

Annotation Type Member Declaration

Anonymous Class Declaration

Array Access

Array Creation

Array Initializer

Array Type

Assert Statement

Assignment

Block

Block Comment

Body Declaration

Boolean Literal

Break Statement

Cast Expression

Catch Clause

Character Literal

Child List Property Descriptor

Child Property Descriptor

Class Instance Creation

Comment

Compilation Unit

Conditional Expression

Constructor Invocation

Continue Statement

Default Binding Resolver

Default Comment Mapper

Default Value Pair Binding

Do Statement

Doc Comment Parser

Empty Statement

Enhanced For Statement

Enum Constant Declaration

Enum Declaration

Expression

Expression Statement

Field Access

Field Declaration

For Statement

If Statement

Import Declaration

Infix Expression

Initializer

Instanceof Expression

Javadoc

Labeled Statement

Line Comment

Marker Annotation

Member Ref

Member Value Pair

Member Value Pair Binding

Message

Method Binding

Method Declaration

Method Invocation

Method Ref

Method Ref Parameter

Modifier

Name

Node Event Handler

Node Searcher

Normal Annotation

Null Literal

Number Literal

Package Binding

Package Declaration

Parameterized Type

Parenthesized Expression

Postfix Expression

Prefix Expression

Primitive Type

Qualified Name

Qualified Type

Recovered Type Binding

Recovered Variable Binding

Return Statement

Simple Name

Simple Property Descriptor

Simple Type

Single Member Annotation

Single Variable Declaration

Statement

String Literal

Structural Property Descriptor

Super Constructor Invocation

Super Field Access

Super Method Invocation

Switch Case

Switch Statement

Synchronized Statement

Tag Element

Text Element

This Expression

Throw Statement

Try Statement

Type

Type Binding

Type Declaration

Type Declaration Statement

Type Literal

Type Parameter

Variable Binding

Variable Declaration

Variable Declaration Expression

Variable Declaration Fragment

Variable Declaration Statement

While Statement

Wildcard Type

^íoãiáëí

Method

Pragma

Sequence

Message

Cascade

Block

Return

Variable

Assignment

Literal

/.+@.+\..+/

0101001011

3ReflectiveFacilities

ReflectionÜbercool

Meta-ProgrammingUntercool

Parser parseExpression: aString , ' asRegex'

MessageNode receiver: (LiteralNode value: aString) selector: #asRegex

``(`,(aString) asRegex)

``(`,(aString) asRegex)

Quasiquote /

Unquote

``(`,(aString) asRegex)

Quasiquote /

Unquote

LISPer know this

``(`,(aString) asRegex)

Represents AST of enclosed expression

``(`,(aString) asRegex)

Expression executed

at run-time

Lisp Smalltalk

Quasiquote ` ``

Unquote , `,

Splice ,@ `@

Standard

He vetiascg.unibe.ch/research/helvetia