Denker - Pharo: Present and Future - 2009-07-14
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Denker - Pharo: Present and Future - 2009-07-14

on

  • 1,431 views

This set of slides was used by Marcus Denker for his CHOOSE SIGBeer given on July 14, 2009 in Bern:

This set of slides was used by Marcus Denker for his CHOOSE SIGBeer given on July 14, 2009 in Bern:
http://choose.s-i.ch/events/2009-07-14-denker

Statistics

Views

Total Views
1,431
Views on SlideShare
1,390
Embed Views
41

Actions

Likes
0
Downloads
1
Comments
0

2 Embeds 41

http://choose.s-i.ch 40
http://www.slideshare.net 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Denker - Pharo: Present and Future - 2009-07-14 Presentation Transcript

  • 1. Past and Future
  • 2. What? A progressive, open-source Smalltalk platform for professional use.
  • 3. What? A flexible environment to support the research of new language concepts.
  • 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
  • 6. 699 Bug-reports closed 377 Updates Release Planned: August 2009
  • 7. Getting Started (if needed)
  • 8. Pier
  • 9. Pier
  • 10. Smalltalk with OO-Database Pharo is the IDE
  • 11. Future
  • 12. ...cleaner
  • 13. ...smaller
  • 14. ...faster
  • 15. (of course)
  • 16. Enable Evolution
  • 17. Enable Experiments
  • 18. Examples - Compiler - Slots - JIT and AOStA
  • 19. Old Compiler - From 1976 - Not OO - Hard to understand. Hard to change We need a better Compiler!
  • 20. 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
  • 21. 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
  • 22. Plans... - New BlockClosure Format - Plugin architecture: Parser, Checker, CodeGen - Use RB Parser (Faster, Error messages)
  • 23. Examples - Compiler - Slots - JIT and AOStA
  • 24. Instance Vars - Not objects - Change behavior? - Change memory layout? Instance state should be more powerful!
  • 25. Slots - Are objects - Allow custom subclasses - Change behavior and memory layout Without Performance penalty!
  • 26. Auto-Accessor MopObject subclass: #SlotExample slots: '{AutoAccessorSlot named: #hello}' classVariableNames: '' poolDictionaries: '' category: 'SlotExamples' Create accessor-methods at compile-time
  • 27. Active Slot MopObject subclass: #SlotExample slots: '{ActiveSlot named: #hello action: [Beeper beep]}' classVariableNames: '' poolDictionaries: '' category: 'SlotExamples' Evaluate block on read
  • 28. Sparse Slot MopObject subclass: #SlotExample slots: '{SparseSlot named: #a. SparseSlot named: #b. SparseSlot named: #c}' classVariableNames: '' poolDictionaries: '' category: 'SlotExamples' Store values in one Dictionary
  • 29. iVar Slot MopObject subclass: #SlotExample slots: '{IVarSlot named: #a} classVariableNames: '' poolDictionaries: '' category: 'SlotExamples' Normal instance Variable
  • 30. Auto-Accessor MopObject subclass: #SlotExample slots: '{AutoAccessorSlot named: #hello}' classVariableNames: '' poolDictionaries: '' category: 'SlotExamples' Create accessor-methods at compiled-time
  • 31. Slot subclass: #AutoAccessorSlot instanceVariableNames: '' .... postCreationAction self generateGetter. self generateSetter. generateGetter class compile: (String streamContents: [:stream |stream nextPutAll: self name; crtab; nextPutAll: '^', self name asString])
  • 32. Active Slot MopObject subclass: #SlotExample slots: '{ActiveSlot named: #hello action: [Beeper beep]}' classVariableNames: '' poolDictionaries: '' category: 'SlotExamples' Evaluate block on read
  • 33. Active Slot AutoAccessorSlot subclass: #ActiveSlot instanceVariableNames: 'action' .... emitReadUsing: methodBuilder methodBuilder pushLiteral: action; send: #value. super emitReadUsing: methodBuilder
  • 34. Status - First Prototype - Integration with ClassBuilder - Compatibility with iVars - Explore different designs
  • 35. Examples - Compiler - Slots - JIT and AOStA
  • 36. VM - Virtual Machine uses Interpreter - JIT Compiler under development (Eliot Miranda) How to optimize even more?
  • 37. AOStA - Provide API for accessing runtime data - PIC: Polymorphic Inline Cache Record class per send instruction - Hotness Counter Where do we spend time?
  • 38. AOStA PIC BC 2 SSA 2 BC SSA OPT SSA BC SSA BC Optimize SSA-Form (Static Single Assignment)
  • 39. AOStA - Use PIC-Data for specialization - Inline often-called methods - Special Bytecode for primitive types (Floats)
  • 40. AOStA - Bytecode-to-Bytecode optimization - Purely realized in Smaltalk - Accessible in the image. Reflection?
  • 41. More... - Improve Tools - Real Modules - Reflection - .......
  • 42. Join Us! Goal: learning and having fun http://pharo-project.org