First Name: Stephane
Last Name: Ducasse
Video: https://youtu.be/OGkGgx4iymM
Title: A Taste for Pharo 70
In this talk I will present the roadmap for Pharo 70.
- support for Undefined Classes
- Class Parser
- new class definition
- support for namespace (not namespace) modules.
- ...
Bio:
Stéphane is directeur de recherche at Inria. He leads the RMoD
(http://rmod.lille.inria.fr) team. He is expert in two domains:
object-oriented language design and reengineering. He worked on
traits, composable groups of methods. Traits have been introduced in Pharo, Perl, PHP and under a variant into Scala and Fortress. He is also expert on software quality, program understanding, program
visualisations, reengineering and metamodeling. He is one of the
developer of Moose, an open-source software analysis platform
http://www.moosetechnology.org/. He created http://www.synectique.eu/
a company building dedicated tools for advanced software analyses. He
is one of the leader of Pharo (http://www.pharo.org/) a dynamic
reflective object-oriented language supporting live programming. The
objective of Pharo is to create an ecosystem where innovation and
business bloom. He wrote several books such as Functional Programming
in Scheme, Pharo by Example, Deep into Pharo, Object-oriented
Reengineering Patterns, Dynamic web development with Seaside.
According to google his h-index is 51 for more than 11000
citations. He would like to thanks all the researchers making
reference to his work!
3. Iceberg
• New tool suite to handle modern VCS (Git for now) in Pharo.
• More than just putting files in Git!
• Central to the development of projects.
• The key and first enhancements:
• [ Done ] cherry picking
• Multiple directories support
• Better new development process support
11. Calypso
• Basis for Remote Browsing
• Fully extensible
• No ifs and extensible
• Developed by D. Kudriashov for TelePharo
(PharmIDE)
• Thanks A. Plantec for giving us the name
15. Bootstrap for REAL
• Pharo 70alpha starts from nothing :)
• There is an EMPTY Image
• Creates a bootstrapped kernel
• Loads the compiler!
• Loads Metacello!
• Loads the rest
16. Hermes: Binary loader
a code loader that does not require the compiler
to be loaded. It is used to speed up the
bootstrap.
17. Beacon Logger
• Powerful announcement-based logger
• Clean the left over of previous logging
• Remove many of the transcript show:
19. Cargo/Metacello
• Cargo: a new package manager.
• It supports the expression of dependencies
between packages.
• We are currently validating that it can support
conditional loading (platform) and building new
tooling to express and validate data.
20. Refactoring 2
• Refactoring 2 is an improved version of
Refactorings developed by Gustavos Santos
• Should used to replace the existing one
21. Taking advantage of
dependency analyser
Used before committing to warn the user when a
new dependency is introduced in a package.
23. Cleaning
• Nautilus retirement
• Remove old text editor
• Remove Komitter: Iceberg already supports
cherrypicking
• Remove system categorizer: old system
categorizer is not used anymore
24. Cleaning
• Old compiler removal: The old compiler should
now get unloaded from Pharo.
• The old compiler should be moved to an
external package and make sure that it can be
reloaded.
• Encoders are split and repackaged
25. Old Inspector
• Remove the eyeInspector framework
• But introduce a minimal fallback inspector
• This inspector should work without Spec or any
frameworks
26. Clean behavior API
• Number of methods in the core Behavior,
ClassDescription and Class requires some
analysis and cleaning
31. Need a fluid API
• Only specify what is used!
• No empty classVariableNames: ‘’
• Handling combinatorial explosion
Class <<< #Box
vars: { #width . #height };
package: #MyPackage.
33. Need a class **definition**
• a.k.a. AST
• traits, slots, kinds….
• Can be manipulated
• Support for Smart Suggestions
• Need to be able to have **undefined** classes
• Important for modules!
34. Working on a “ClassParser”
+ Nodes
• Can handle variations, backward compatibles….
• Support for smart suggestion in class definition
• Avoid ‘*subclass:*’ matches: str
35. Undefined classes
• How to support loading and managing classes
with an unknown superclass?
• Important to load broken code
• Important for Modules in live environment
42. Cleaning Streams
• Make sure that the system does not use the old
streams but the FileStream and ZincDecorator
• Split Stream package
43. Theme/widgets
• New theme from the beginning
• Better themes/palettes support
• Better and nicer Tabs. Tabs design should be
revisited.
44. Use OSWindow
• Remove the logic of the windowing/shortcut from
the VM should be continued
• OSWindow should be used instead
45. Killing Freetype Plugins
• Current freetype plugin is the source of many
bugs and problems
• Check work of Raffaillac to use UFFI to do direct
call to openGL
47. 64 bits
• Mac and Linux 64 bits VMs stable since Pharo 6
• Since June 2017, Windows 64 bits support
• 64 bits as the new standard
• Stabilise each part of Pharo dependent
• Default releases in 64 bits
Thanks to Eliot Miranda and Nicolas Cellier
48. Headless VM
• Merge headless VM from Ronie Salgado’s
branch
• True headless mode (not with a hidden
window)
• Enable/Ease future work (embeddable VM,
etc.)
49. Embeddable VM (P8?)
• VM embedded in external applications
• The application can access objects
50. Idle / Event-driven VM (P8?)
• Increase VM responsiveness
• Avoid couple per-cent cpu time wasted by active
waiting loop when Pharo does nothing
51. Android VM (P8?)
Integration of the Android VM build and tests in the
integration setup.
Future work with Event-driven VM
55. Sista preview
• First version integrated
• 1.5x performance boost
• Readable code as fast as performant code
• Optional VM: specific constraints
• Partial IDE support, literal mutability support,
…
56. Improved block closure
• Provides support for byte code compiler copying
and clean block optimisations
• Reduce complexity of some parts of the JIT
Some work remains in IDE support.
57. Improved bytecode set
• Eases bytecode decoding
• Lifts compiled code limitations (size of jumps,
etc.)
• Required for the Sista support
Some work remains in debugging support.
58. Read-Only objects
• Work in Pharo 6
• In-image support needs to be improved (fall-
back code of primitives, etc.)
• Some polishing needs to be done (primitive error
code not always correct, etc.)
59. Literal immutability
• Removes hard-to-find errors
• Enable compiler optimisations
An analysis of the image usage of literal (string
mutation, Large Integer mutation) is needed
60. Pharo 70 is exciting
We are excited by the possibilities
You can help, contribute and have fun with us