> On 6 Jul 2017, at 23:56, Eliot Miranda <eliot.mira...@gmail.com> wrote:
> 
> Hi Sven,
> 
> On Thu, Jul 6, 2017 at 10:10 AM, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> 
> > On 6 Jul 2017, at 18:41, Eliot Miranda <eliot.mira...@gmail.com> wrote:
> >
> > Hi Stef,
> >
> >> On Jul 6, 2017, at 1:55 AM, Stephane Ducasse <stepharo.s...@gmail.com> 
> >> wrote:
> >>
> >> We would like to share this list with you and get your feedback and inputs.
> >> It will be presented and discussed again at ESUG.
> >>
> >> Stef on the behalf of the engineering team of the Pharo consortium.
> >>
> >> # Pharo 7 (and 8) potential roadmap
> >>
> >> This document contains a list of actions that should be done during
> >> Pharo 7 and 8.
> >> It is not a definitive list. It is the result of a discussion within
> >> the engineer team and RModers.
> >> It first lists actions that should be performed at the image level
> >> then lists the actions for the VM.
> >>
> >>
> >> ## Image
> >> As a general principle, we will try to remove something when we add a
> >> new features or version of a component.
> >>
> >> ### New tools
> >> - Iceberg: Iceberg is the new tool suite to handle new VCS in Pharo.
> >> For the moment it supports Git. This tool will become central to the
> >> development of projects in Pharo. The key and first enhancements will
> >> be:
> >> - cherry picking
> >> - multiple directories support, subtrees
> >> - better new development process support
> >>
> >> - Calypso: Calypso is a new tool suite for editing and navigating
> >> code. It is modular and can easily be extended.
> >> - integration, set as the default browser
> >>
> >> - Hermes (binary loader): Hermes is a code loader that does not
> >> require the compiler to be loaded. It will be used to speed up the
> >> bootstrap.
> >>
> >> - Beacon: Beacon is an announcement-based logger. It should be
> >> introduced but in addition the left over of previous logging should be
> >> cleaned and removed for example many of the transcript show: should be
> >> removed.
> >>
> >> - Inspector refreshing: the inspector should refresh its values by default.
> >>
> >> - Cargo: Cargo is 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.
> >>
> >> - Check dependencies when committing. Pharo comes with a dependency
> >> analyser tools. Such tools should be used before commiting to warn the
> >> user when a new dependency is introduced in a package.
> >>
> >> ### Cleaning bloat
> >> - Removing of Nautilus: Once Calypso will be integrated and exhibit
> >> similar fetaures than Nautilus. Nautilus should be removed.
> >> - Remove old text editor: there is only one or two widgets still using
> >> the old text editor and the rubric text editor.
> >> - Remove TxText: TxText was an attempt to get a new generation text
> >> editor. Now it has been rewritten with a new design in Bloc so we
> >> should remove it since Bloc editor is better and actively maintained.
> >> - Remove Komitter: Iceberg already supports cherrypicking on commit
> >> therefore Komitter can be safely removed from Pharo.
> >> - Remove system categorizer: The old system categorizer is not used
> >> anymore and should be remove.
> >>
> >> - 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.
> >> - In addition the encoders should be separated. (@@ more here@@)
> >>
> >> - Old inspector cleanup: we should remove the eyeInspector framework
> >> but we should introduce a minimal fallback inspector. This inspector
> >> should work without Spec or any frameworks.
> >>
> >> - Clean behavior protocol. The number of methods in the core Behavior,
> >> ClassDescription and Class requires some analysis and cleaning.
> >>
> >> - Kernel modularization: the effort on modularising the packages
> >> should be continued.
> >>
> >> ### Language infrastructure
> >> The following points are more related to the infrastructure of
> >> manipulating and loading class definitions. There are the basis for
> >> the future module system and cleaning some often hidden parts of the
> >> system.
> >>
> >> - New class definition: The class definition is not scaling anymore
> >> due to the large number of options (traits, slot, tage, package,
> >> immediate, ephemeron). A fluid-based message API should be designed.
> >>
> >> - Support for Undefined classes: When loading old code or code whose
> >> superclass has not yet being loaded, the system has inconsistent
> >> behavior. Depending on the tools, it may not load the code, raise a
> >> warning or decide that the superclass is Object without any other
> >> notice and losing the name of the original superclass. We are working
> >> on a new mechanism to support a unique way to handle such case. To be
> >> presented at IWST/ESUG
> >>
> >> - Class definition parser: Class definition is parser in different
> >> place of the system and in addition the output is the direct creation
> >> of a class object instead of an object representing the class
> >> definition that can be further manipulated. We are working on class
> >> definition parser. It produces a separate AST. It will help the
> >> building of tools.
> >>
> >> - Better update infrastructure. Pablo Tesone has been working on a
> >> better update mechanism, better modular class builder.
> >>
> >> - Ring2: Ring is a metamodel to manipulate code that is not actively
> >> running in the current system. It is useful to perform analysis (such
> >> as browsing, navigating off-line or remote definitions) before
> >> actually loading the code. Ring got redesigned by Pavel Krivanek to
> >> support the bootstrap of Pharo 60. The results is Ring2.
> >>
> >> - Opal is the Pharo Compiler. It should be enhanced to support handle
> >> better the warning and a general enhancement pass is needed.
> >>
> >> ### System enhancements
> >>
> >> - Commandline enhancements. RMOD is currently improving the
> >> command-line infrastructure and making sure that the system can work
> >> in read-only mode.
> >>
> >> - Cleaning streams: the idea is to make sure that the system does not
> >> use the old streams. The idea is to start using the fileStreams and
> >> make sure that the Stream package can be substituated in the future by
> >> other streams with the same API. Therefore hardcoded class names
> >> should be substituted with factory (readSream writeStream). From that
> >> perspective we do not think that it is wise to introduce Xtreams. We
> >> should analyse the API of the current implementation.
> >>
> >> - New theme from the beginning. It is really important that each
> >> version of Pharo is identified open the default opening. Pharo should
> >> come up with two default themes: one light and one dark.
> >>
> >> - Better themes/palettes support
> >> - Better and nicer Tabs. Tabs design should be revisited.
> >>
> >> - OSWindow world rendering: the effort to remove the logic of the
> >> windowing from the VM should be continued. OSWindow should be used
> >> instead.
> >>
> >> - Freetype: The current freetype plugin is the source of many bugs and
> >> problem. Thibault Raffaillac used FFI to do direct call to openGL
> >> (@@to verify@@).
> >>
> >>
> >> - Refactoring 2: Refactoring 2 is an improved version of the
> >> refactorings developed by Gustavos Santos and they should used to
> >> replace the existing one.
> >>
> >>
> >> ## VM
> >>
> >> - 64-bits by default: Mac and Linux 64 bits VMs have been working for
> >> over a year and since June 2017 a Windows 64 bits VM has been working.
> >> The plan is to stabilize each part of Pharo that is not working in 64
> >> bits as well as in 32 bits and make the 64 bits Pharo images and VM
> >> the default download for Pharo.
> >>
> >> - Headless VM: Ronie Salgado has built a headless VM on his VM branch,
> >> we need to merge and check everything works fine. With the headless
> >> VM, Pharo can be run in true headless mode (not with a hidden window)
> >> and it is required for future VM features (embeddable VM, ...).
> >>
> >> - Embeddable VM: The VM should be able to be embedded in external
> >> applications, the application accessing objects through well-defined
> >> APIs.
> >>
> >> - Idle VM: The goal is to avoid the active waiting loop consuming
> >> several per cent of cpu time when the Pharo image is not doing
> >> anything.
> >>
> >> - Android VM: integration of the Android VM build and tests in the
> >> integration setup.
> >>
> >> - Threaded FFI: all FFI calls should be non-blocking (reviving
> >> prototype of Eliot)
> >>
> >> - ZeroConf for ARM: The ARM VM should be available from the zeroConf 
> >> servers
> >>
> >> - Better support for large heaps (GC tuning API, incremental GC).
> >> Pharo 64 bit is now able to manage large heap. However better
> >> performance can be proposed by offering better settings for the
> >> different GC zone.
> >
> > The most important thing here is the incremental GC.  Spur has a generation 
> > scavenger that collects garbage in newly created objects (new space), and a 
> > mark-compact collector that collects and compacts garbage in old space.
> >
> > Right now on my 2.3GHz MacMini doing normal development, the generation 
> > scavenger causes pauses of 1ms or less, and the mark-compact collector than 
> > causes pauses of around 200ms.  Both account for about 0.75% of entire 
> > execution time (1.5% total), so the scavenger is invoked frequently and the 
> > pauses that it creates are not noticeable.  But the occasional pauses 
> > created by the mark-compact collector /are/ noticeable, especially in games 
> > and music.
> >
> > The idea for the incremental collector is to implement a mark-sweep or 
> > mark-sweep-compact collector for old space that works incrementally, doing 
> > a little bit of work on each invocation, probably immediately after a 
> > scavenge.  It is intended to avoid the long pauses caused by the 
> > non-incremental mark-compact collector and make the system more suitable 
> > for games, music, etc.
> >
> > [Work on scaling for large 64-bit heaps is somewhere in the future, but 
> > right now we don't have any applications like this generating demand for a 
> > solution.]
> 
> Actually, being able to efficiently keep a couple of GB worth of objects in 
> memory, even better 10s of GB seems like an important short term goal. I for 
> one don't really care for games or music. I do care about server software and 
> there we need to use the memory that is available so cheaply today. Luckily 
> we now have 64-bit support.
> 
> Indeed, and the reason I designed Spur to be both 32-bit and 64-bit was 
> because my employer Cadence wanted to scale to much larger models (the 
> application manipulates large models of SystemOnAChip (SOC) components 
> expressed in XML).  But their application is batch and they're happy just 
> with the ability to go somewhat above the approximately 3 Gb limit of the 
> 32-bit system.
> 
> But what I was getting at in my comment was that, while 64-bit server 
> applications are indeed very important, I have not been contacted by anyone 
> yet complaining about scaling problems with the 64-bit system.  This could be 
> for a number of reasons, including that there are not many large applications 
> out there.  We know that pause times in the full GC are an issue for 
> animation ad music software.  I didn't articulate it, but I also think that 
> an incremental GC provides somewhat of an answer to scaling for 64-bit 
> servers.
> 
> Let's say that currently the mark-compact collector collects at about 1Gb per 
> second (that's about what I'm seeing on my MacMini for a 600Mb heap, 
> collected and compacted in about 530ms on a 2.3GHz Core i7, = 1.1Gb/s).  For 
> the moment let's assume the GC scales linearly.  Then a 10Gb server 
> application will occasionally suffer 10 second pauses, which is unacceptable 
> for any kind of high-availability server.  The total execution time overhead 
> of GC may be in the 1%-10% range, but the pause times may be unacceptable 
> (note that they're /not/ unacceptable for my employer's batch usage).
> 
> So were the GC to be extended with an incremental collector we may be able to 
> bring pause times back down to the tens of milliseconds rage or below.  
> Clearly how the server uses memory, and how the GC scales are crucially 
> important.  Right now I have no data on either; no large 64-bit server 
> applications to analyze and consequently not much idea of how the current GC 
> or an incremental GC will scale.  So for the moment I'm going to prioritize 
> doing an incremental GC, and making it measurable and tunable. Hopefully the 
> incremental GC will benefit both large server applications as well as music 
> and animation.
> 
> But nothing will substitute for experience with real applications.  So far 
> there are very few large 64-bit applications running on Cog for me to 
> analyze.  Even Cadence's customers are too protective of their data for me to 
> analyze real applications.

Thanks for the reply, Eliot.

Maybe is was (up until we got 64-bit for real) a chicken-egg problem: it was 
not realistic to build big applications due to the limits of 32-bit images. I 
am sure this will change in the future.

Sven

> >> - Integrate various fixes to support better high resolution display.
> >> In Retina mac display Pharo looks blurry. The fix to support Retina
> >> should be integrated in the VM.
> >>
> >> ### Sista-related
> >> Sista is an optimizing JIT for Pharo. It is the result of multiple
> >> years of developement by Clement Bera and Eliot Miranda. An optimizing
> >> JIT is manipulating code (folding constant, rewriting it) before
> >> compiling it to assembly code.
> >
> > Actually this is a speculative inliner (also known as an adaptive 
> > optimizer).  It works by creating special optimized versions of methods 
> > that inline smaller methods, thereby allowing optimising away unnecessary 
> > tests, sends and blocks, etc.  it is driven by "hot spot" detectors in the 
> > first-level JIT code and so inlines code that is better my used a lot.  It 
> > is quite similar to the optimisers in Java HotSpot, JavaScript V8, etc.  
> > its implementation and chitecture is more like Graal, because the inliner, 
> > optimiser and deoptimiser are all in Smalltalk up in the image.  This 
> > in-image optimizer is called Scorch.  The overall architecture is called 
> > Sista, for Speculative Inlining Smalltalk Architecture.
> >
> >> - New Block Closure implementation by default: Allows one to implement
> >> in the Opal compiler the copying and clean blocks optimisations,
> >> reduce massively the complexity of some parts of the JIT (debugging
> >> API to map machine code pc to bytecode pc for example) and is required
> >> for the Sista support. Some work remains in debugging/IDE support.
> >>
> >> - New Bytecode set in production: Eases bytecode decoding (simplifying
> >> the code base of the bytecode to source code decompiler, the debugger,
> >> the JIT, etc.), lifts compiled code limitations (size of jumps, etc.)
> >> and is required for the Sista support. Some work remains in debugging
> >> support.
> >>
> >> - Read-only objects: They work in Pharo 6, but the in-image support
> >> needs to be improved (fall-back code of primitives, etc.) and some
> >> polishing needs to be done (primitive error code not always correct,
> >> etc.). Used for the support of different project, including GBS.
> >
> >> - Literals immutability (based on read-only objects). In particular an
> >> analysis of the image usage of literal (string mutation) is needed.
> >
> >> - Sista preview: A first version of Sista will be integrated, yielding
> >> 1.5x performance boost on most applications, but will be optional and
> >> will require specific constraints (not toying too much with literal
> >> mutability, partial IDE support, etc.).
> >>
> >>
> >> ### Already done
> >>
> >> - [DONE] Remove Shoreline reporter.
> >> - [DONE] Kernel should not depend on Traits: This will speed up the
> >> bootstrap and support the modular introduction of alternate traits
> >> implementation currently designed by Pablo Tesone and tested in the
> >> new generation of Moose.
> >
> > Eliot
> > _,,,^..^,,,_ (phone)
> 
> 
> 
> 
> 
> -- 
> _,,,^..^,,,_
> best, Eliot


Reply via email to