Pharo is an open-source Smalltalk platform for professional use based on Squeak Smalltalk. It provides a flexible environment to support research into new language concepts. Over the past year, 377 updates were made to address 699 bug reports. Future plans include improvements to the compiler, slots system, and just-in-time (JIT) compilation and adaptive optimization (AOStA) techniques. The community is working on these and other enhancements to further enable evolution and experimentation.
4. What?
Pharo = Language + IDE
Pure Object-Oriented Language
Dynamically Typed
5. History
Based on Squeak Smalltalk
+ Major Cleanups (MVC, eToys)
+ New UI Look / TrueType
+ Tools
+ Block Closures
+ Lots of bugfixes and small improvements
21. Old Compiler
- From 1976
- Not OO
- Hard to understand. Hard to change
We need a better Compiler!
22. New Compiler
- Originally by Anthony Hannan
- Based on Visitors
- Reusable and Pluggable Backend (IRBuilder)
- Uses RB AST
- SmaCC Parser
Easier to understand.
Easier to change
23. New Compiler
Scanner Semantic Code
code AST AST Bytecode
/ Parser Analysis Generation
Code generation in detail
Build Bytecode
AST IR Bytecode
IR Generation
ASTTranslator IRTranslator
IRBuilder BytecodeBuilder
24. Plans...
- New BlockClosure Format
- Plugin architecture: Parser, Checker, CodeGen
- Use RB Parser (Faster, Error messages)
38. VM
- Virtual Machine uses Interpreter
- JIT Compiler under development (Eliot Miranda)
How to optimize even more?
39. AOStA
- Provide API for accessing runtime data
- PIC: Polymorphic Inline Cache
Record class per send instruction
- Hotness Counter
Where do we spend time?
40. AOStA
PIC
BC 2 SSA 2
BC SSA OPT SSA BC
SSA BC
Optimize SSA-Form
(Static Single Assignment)
41. AOStA
- Use PIC-Data for specialization
- Inline often-called methods
- Special Bytecode for primitive types (Floats)