towards a flexible pharo compiler

14

Click here to load reader

Upload: pharo

Post on 11-May-2015

83 views

Category:

Technology


1 download

DESCRIPTION

ESUG IWST 2013

TRANSCRIPT

Page 1: Towards a flexible Pharo Compiler

Towards a flexible Pharo Compiler

Clement Bera and Marcus Denker

Page 2: Towards a flexible Pharo Compiler

Three Problems

• Architecture is not reusable

• Compiler can not be parametrized

• The mapping between source code and bytecode is overly complex.

Page 3: Towards a flexible Pharo Compiler

Reusability

• AST is special for the Compiler

• Tools use own AST (RB)

• AST is destroyed when compiling

• No reusable backend/parser...

Page 4: Towards a flexible Pharo Compiler

No Parametrization

• No pluggable archicture

• Parser, code generator fixed

• No infrastructure for compiler options

Page 5: Towards a flexible Pharo Compiler

Mapping bc2source

• For the Debugger, we need to map bytecode to source offsets

• With closures, we need to map temp offsets to real temps.

Old Compiler: Encoder builds complex table structure

Page 6: Towards a flexible Pharo Compiler

Solution: OPAL

• New compiler framework for Pharo

• Default compiler in Pharo3

• Old Compiler will be a loadable package

Page 7: Towards a flexible Pharo Compiler

Design

• RB AST

• Visitors

• Bytecode level IR

Smalltalk source code

Refactoring browser abstract syntax tree

Intermediate representation

Bytecode

RBParser

ASTTranslator + IRBuilder

IRByteCodeGenerator

OCSemanticAnnotator

Page 8: Towards a flexible Pharo Compiler

Reusability

• AST is unchanged

• Backend independent

AST InterpreterOz/Hazelnut

ReflectivityMetalinks

Class Builder

Smart suggestionsNode navigation

Page 9: Towards a flexible Pharo Compiler

Parametrization

• Explicit compiler context

• All visitors are pluggable

Smalltalk source code

Refactoring browser abstract syntax tree

Intermediate representation

Bytecode

Compilation context

Page 10: Towards a flexible Pharo Compiler

Compiler Options

• Turn off inlining of ifTrue: and friends

MyClass>>foo<compilerOptions: - optionInlineIf>

^ #myNonBooleanObject ifTrue: [ 1 ] ifFalse: [ 0 ]

Page 11: Towards a flexible Pharo Compiler

Mapping

• Mapping uses AST directly

source codeBytecode

foo ^ 1 + 2 + 3

76 77 B0 20 B0 7C

IRMethod RBMethodNode

RBSequenceNode

RBReturnNode

RBMessageNode 1

RBLiteralValueNode 1

IRPushLiteral

IRSequence

RBLiteral ValueNode 1

IRPushLiteralRBLiteral

ValueNode 2

IRReturnRBReturnNode

IRSendRBMessageNode 1

IRPushLiteralRBLiteral

ValueNode 3RBMessageNode 2 RBLiteral

ValueNode 3

IRSendRBMessageNode 2

B0+ 2

1 2

3+ 2

+ 3

^ 1 + 2 + 3

^ 1 + 2 + 3

foo ^ 1 + 2 + 3

RBLiteralValueNode 2

Page 12: Towards a flexible Pharo Compiler

Performance

• Visitors and IR do cost a bit of speed

• But not much

Page 13: Towards a flexible Pharo Compiler

Conclusion

• Opal solves the problems of the old compiler

• Important basis for many features you will see in Pharo3 and Pharo4

Page 14: Towards a flexible Pharo Compiler

Conclusion

• Opal solves the problems of the old compiler

• Important basis for many features you will see in Pharo3 and Pharo4

Questions?