Saltar al contenido principal
Pharo 70/80 kind of
Roadmap:
The key challenges and
first achievements
S. Ducasse RMoD
Clément Béra Pharo Consortium
Roadmap
• Tools
• Cleaning and Improvements
• Language infrastructure
• System enhancements
• VMs
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
Iceberg
• Paid by the consortium
• libgit2
Iceberg
• Potentially for
• Fossil
• Mercurial
Exposure on github
Nautilus
Calypso
Calypso & its submarines
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
Calypso
• Multiple panes
• Multiple method definitions
• Incomplete method definitions
• Scoping…
Calypso
• mulitple panes
• multiple method definitions
• incomplete method definitions
• scoping…
New Message Browser
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
Hermes: Binary loader
a code loader that does not require the compiler
to be loaded. It is used to speed up the
bootstrap.
Beacon Logger
• Powerful announcement-based logger
• Clean the left over of previous logging
• Remove many of the transcript show:
GTInspector Enh
• Refreshing back in place
• Another pass at pane
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.
Refactoring 2
• Refactoring 2 is an improved version of
Refactorings developed by Gustavos Santos
• Should used to replace the existing one
Taking advantage of
dependency analyser
Used before committing to warn the user when a
new dependency is introduced in a package.
Roadmap
• Tools
• Cleaning and Improvements
• Language infrastructure
• System enhancements
• VMs
Cleaning
• Nautilus retirement
• Remove old text editor
• Remove Komitter: Iceberg already supports
cherrypicking
• Remove system categorizer: old system
categorizer is not used anymore
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
Old Inspector
• Remove the eyeInspector framework
• But introduce a minimal fallback inspector
• This inspector should work without Spec or any
frameworks
Clean behavior API
• Number of methods in the core Behavior,
ClassDescription and Class requires some
analysis and cleaning
Kernel modularisation effort
• Continuous
• Kind of our DNA :)
Roadmap
• Tools
• Cleaning and Improvements
• Language infrastructure
• System enhancements
• VMs
About classes
Class definition explosion
• subclass:, variableSubclass:, variableByte.. variableWord, weak:
• uses:
• layout:
• tag:
• immediate:, ephemeron
• category:
• package:
• slot:
• instanceVariableNames:, classVariableNames:
Need a fluid API
• Only specify what is used!
• No empty classVariableNames: ‘’
• Handling combinatorial explosion
Class <<< #Box
vars: { #width . #height };
package: #MyPackage.
Possible Designs
Class {
superclass: #MySuperclass;
uses: #MyTrait;
vars: { #a. #b };
classVars: { #A. #B };
package: #MyPackage;
tags: #(Core).
}
Class <<< #MyClass
superclass: #MySuperclas;
uses: #MyTrait;
vars: { #a. #b };
classVars: { #A. #B };
package: #MyPackage;
tags: #(Core)
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!
Working on a “ClassParser”
+ Nodes
• Can handle variations, backward compatibles….
• Support for smart suggestion in class definition
• Avoid ‘*subclass:*’ matches: str
Undefined classes
• How to support loading and managing classes
with an unknown superclass?
• Important to load broken code
• Important for Modules in live environment
Undefined classes
• Pendant of Undeclared
• Read the paper :)
• Support for Module systems
Opal
• Warnings into real objects
• Another pass on the API
Updater
• Atomic loader P. Tesone
• Modular class builder
Ring2
• Ring: modeling a program
• Pavel Krivanek rewrote Ring
• Infrastructure to build tools to manipulate kernels
Roadmap
• Tools
• Cleaning and Improvements
• Language infrastructure
• System enhancements
• VMs
CommandLine
• Clap new command line library
• Scripting :)
• Headless :)
Cleaning Streams
• Make sure that the system does not use the old
streams but the FileStream and ZincDecorator
• Split Stream package
Theme/widgets
• New theme from the beginning
• Better themes/palettes support
• Better and nicer Tabs. Tabs design should be
revisited.
Use OSWindow
• Remove the logic of the windowing/shortcut from
the VM should be continued
• OSWindow should be used instead
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
Roadmap
• Tools
• Cleaning and Improvements
• Language infrastructure
• System enhancements
• VMs
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
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.)
Embeddable VM (P8?)
• VM embedded in external applications
• The application can access objects
Idle / Event-driven VM (P8?)
• Increase VM responsiveness
• Avoid couple per-cent cpu time wasted by active
waiting loop when Pharo does nothing
Android VM (P8?)
Integration of the Android VM build and tests in the
integration setup.
Future work with Event-driven VM
Threaded FFI
All FFI calls should be non-blocking
Large heaps
Incremental GC: Avoiding long pauses
GC tuning API
Retina
High resolution display
Retina resolution display
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,
…
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.
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.
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.)
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
Pharo 70 is exciting
We are excited by the possibilities
You can help, contribute and have fun with us