[ANN] Pharo bootstrap

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
43 messages Options
123
Reply | Threaded
Open this post in threaded view
|

[ANN] Pharo bootstrap

demarey
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap

Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Max Leske
Awesome!! Great work guys!

On 19 Jan 2016, at 15:29, Christophe Demarey <[hidden email]> wrote:

Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

philippeback
In reply to this post by demarey
Keep up the good work, this is a huge step in making the whole thing a crystal clear box!

Phil

On Tue, Jan 19, 2016 at 3:29 PM, Christophe Demarey <[hidden email]> wrote:
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Ben Coman
In reply to this post by demarey
On Tue, Jan 19, 2016 at 10:29 PM, Christophe Demarey
<[hidden email]> wrote:

> Hi all,
>
> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo
> image from sources, not based on a previous image (well, we use a pharo
> image to produce it but no code / state from it).
>
> This process will allow to define a minimal Pharo kernel (currently 52
> packages but we could have it far smaller) and to modularize the whole image
> (currently packages have too much dependencies on packages already loaded
> into the image).
> The bootstrap process also allows to write down the recipe to initialize a
> new image from scratch (some code is missing in the image or is wrong). In
> addition, I think we will clean a lot of historical objects that are not
> used anymore.
>
> With the amazing work done by Guillermo Polito during his Phd (around
> Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf,
> we succeeded to get a first prototype of a bootstraped Pharo 5 image (from
> 5.392).
> This prototype is able to run an eval command line handler and to log output
> / errors. Not all classes are yet initialized and you cannot yet save /
> restart this image but it is a big step forward.
> It is a 4 mb image (could be half the size without unicode data). You can
> download it at:
> http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>
> Next steps are to have a bootstrapped image fully working, then to load
> packages on top of it (like network, sunit) to produce a minimal image.
> Then, we need to implement an Oz VM on top of Spur.
> After that, we need to work on a reliable way to build the bootstrap (not
> too sensitive to changes in the image).

Great work guys.  Now what stops me feeling compelled to really look
deep into this is having a class browser / senders / implementers
interface.  I guess this is what Oz would facilitate for peeking into
the bootstrap image from another image ??

cheers -ben

>
> Christophe.
>
> -------
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "1 + 1"
> 2
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "'a' , 'b'"
> 'ab'
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "1 / 0"
> ZeroDivide
> SmallInteger>>/
> UndefinedObject>>DoIt
> OpalCompiler>>evaluate
> OpalCompiler(AbstractCompiler)>>evaluate:
> SmalltalkImage>>evaluate:
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
> BlockClosure>>on:do:
> EvaluateCommandLineHandler>>evaluate:
> EvaluateCommandLineHandler>>evaluateArguments
> EvaluateCommandLineHandler>>activate
> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in
> Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in
> Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
> PharoCommandLineHandler>>activate
> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> PharoCommandLineHandler class>>no (source is Undeclared)
> no source in PharoCommandLineHandler class>>activateWith: in Block: no
> source
> NonInteractiveUIManager(UIManager)>>defer:
> PharoCommandLineHandler class>>activateWith:
> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no
> source
> BlockClosure>>on:do:
> BasicCommandLineHandler>>activateSubCommand:
> BasicCommandLineHandler>>handleSubcommand
> BasicCommandLineHandler>>handleArgument:
> no source in BasicCommandLineHandler>>activate in Block: no source
>
> SmallInteger>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> AbstractCompiler>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> CommandLineHandler class>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> PharoCommandLineHandler>>no (source is Undeclared)
>
> UIManager>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> CommandLineUIManager>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> DelayMicrosecondScheduler>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> WeakArray class>>no (source is Undeclared)
>
>
> ps: source cannot be displayed because there is no formatter available in
> the bootstrap
>

Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

stepharo
In reply to this post by philippeback
Oh yes!
You cannot imagine all the cleanings that (we they are doing behind your back :)
A bootstrap is really a kick in the ass to produce a much much better system.

Thanks you guys for making my dream becoming true.

Stef

Le 19/1/16 16:05, [hidden email] a écrit :
Keep up the good work, this is a huge step in making the whole thing a crystal clear box!

Phil

On Tue, Jan 19, 2016 at 3:29 PM, Christophe Demarey <[hidden email]> wrote:
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap



Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Sven Van Caekenberghe-2
In reply to this post by Max Leske

> On 19 Jan 2016, at 15:53, Max Leske <[hidden email]> wrote:
>
> Awesome!! Great work guys!

+ 10

>> On 19 Jan 2016, at 15:29, Christophe Demarey <[hidden email]> wrote:
>>
>> Hi all,
>>
>> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).
>>
>> This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
>> The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.
>>
>> With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
>> This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
>> It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>>
>> Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
>> Then, we need to implement an Oz VM on top of Spur.
>> After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).
>>
>> Christophe.
>>
>> -------
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
>> 2
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
>> 'ab'
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
>> ZeroDivide
>> SmallInteger>>/
>> UndefinedObject>>DoIt
>> OpalCompiler>>evaluate
>> OpalCompiler(AbstractCompiler)>>evaluate:
>> SmalltalkImage>>evaluate:
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
>> BlockClosure>>on:do:
>> EvaluateCommandLineHandler>>evaluate:
>> EvaluateCommandLineHandler>>evaluateArguments
>> EvaluateCommandLineHandler>>activate
>> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>> PharoCommandLineHandler>>activate
>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> PharoCommandLineHandler class>>no (source is Undeclared)
>> no source in PharoCommandLineHandler class>>activateWith: in Block: no source
>> NonInteractiveUIManager(UIManager)>>defer:
>> PharoCommandLineHandler class>>activateWith:
>> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> BasicCommandLineHandler>>activateSubCommand:
>> BasicCommandLineHandler>>handleSubcommand
>> BasicCommandLineHandler>>handleArgument:
>> no source in BasicCommandLineHandler>>activate in Block: no source
>>
>> SmallInteger>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> AbstractCompiler>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> CommandLineHandler class>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> PharoCommandLineHandler>>no (source is Undeclared)
>>
>> UIManager>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> CommandLineUIManager>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> DelayMicrosecondScheduler>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> WeakArray class>>no (source is Undeclared)
>>
>>
>> ps: source cannot be displayed because there is no formatter available in the bootstrap
>>
>


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Tudor Girba-2
In reply to this post by demarey
This is amazing news!

For those that might be less involved in this, the minimal image is a long term goal that is essentially in the works since the beginning of Pharo. It accumulated a ton of effort from multiple people (I did not participate, but I have an idea of the amount of effort and it really is huge and tedious), and now we see the first palpable result. This is one of those things that have almost no visible output, but will turn out to have a tremendous impact.

I would like to thank everyone involved! Please do keep this up. Even if it might look less rewarding, you should know that this work is greatly appreciated.

Cheers,
Doru


> On Jan 19, 2016, at 3:29 PM, Christophe Demarey <[hidden email]> wrote:
>
> Hi all,
>
> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).
>
> This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
> The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.
>
> With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
> This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
> It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>
> Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
> Then, we need to implement an Oz VM on top of Spur.
> After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).
>
> Christophe.
>
> -------
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
> 2
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
> 'ab'
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
> ZeroDivide
> SmallInteger>>/
> UndefinedObject>>DoIt
> OpalCompiler>>evaluate
> OpalCompiler(AbstractCompiler)>>evaluate:
> SmalltalkImage>>evaluate:
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
> BlockClosure>>on:do:
> EvaluateCommandLineHandler>>evaluate:
> EvaluateCommandLineHandler>>evaluateArguments
> EvaluateCommandLineHandler>>activate
> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
> PharoCommandLineHandler>>activate
> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> PharoCommandLineHandler class>>no (source is Undeclared)
> no source in PharoCommandLineHandler class>>activateWith: in Block: no source
> NonInteractiveUIManager(UIManager)>>defer:
> PharoCommandLineHandler class>>activateWith:
> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
> BlockClosure>>on:do:
> BasicCommandLineHandler>>activateSubCommand:
> BasicCommandLineHandler>>handleSubcommand
> BasicCommandLineHandler>>handleArgument:
> no source in BasicCommandLineHandler>>activate in Block: no source
>
> SmallInteger>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> AbstractCompiler>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> CommandLineHandler class>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> PharoCommandLineHandler>>no (source is Undeclared)
>
> UIManager>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> CommandLineUIManager>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> DelayMicrosecondScheduler>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> WeakArray class>>no (source is Undeclared)
>
>
> ps: source cannot be displayed because there is no formatter available in the bootstrap
>

--
www.tudorgirba.com
www.feenk.com

"It's not what we do that matters most, it's how we do it."


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Eliot Miranda-2
In reply to this post by demarey
Hi All,

    great news!  Where can I read a specification of the Oz VM facilities?

_,,,^..^,,,_ (phone)

On Jan 19, 2016, at 6:29 AM, Christophe Demarey <[hidden email]> wrote:

Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap

Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Pavel Krivanek-3
In reply to this post by demarey
Hi,

amazing! Do you have any idea how to speed up it? The bootstrap process is now running on my machine about one and half hour and it is still far from finish. 

Cheers,
-- Pavel

2016-01-19 15:29 GMT+01:00 Christophe Demarey <[hidden email]>:
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

kilon.alios
I was taking a look at Docker and I was inspired to dream about self contained pharo packages that package their dependencies with them, essentially being isolated and independent , bootstrap is more than welcomed. Keep up the great work :)

On Tue, Jan 19, 2016 at 8:54 PM Pavel Krivanek <[hidden email]> wrote:
Hi,

amazing! Do you have any idea how to speed up it? The bootstrap process is now running on my machine about one and half hour and it is still far from finish. 

Cheers,
-- Pavel

2016-01-19 15:29 GMT+01:00 Christophe Demarey <[hidden email]>:
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

stepharo
In reply to this post by Tudor Girba-2
thanks doru. Yes this is a long term effort :)


Le 19/1/16 18:10, Tudor Girba a écrit :

> This is amazing news!
>
> For those that might be less involved in this, the minimal image is a long term goal that is essentially in the works since the beginning of Pharo. It accumulated a ton of effort from multiple people (I did not participate, but I have an idea of the amount of effort and it really is huge and tedious), and now we see the first palpable result. This is one of those things that have almost no visible output, but will turn out to have a tremendous impact.
>
> I would like to thank everyone involved! Please do keep this up. Even if it might look less rewarding, you should know that this work is greatly appreciated.
>
> Cheers,
> Doru
>
>
>> On Jan 19, 2016, at 3:29 PM, Christophe Demarey <[hidden email]> wrote:
>>
>> Hi all,
>>
>> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).
>>
>> This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
>> The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.
>>
>> With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
>> This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
>> It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>>
>> Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
>> Then, we need to implement an Oz VM on top of Spur.
>> After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).
>>
>> Christophe.
>>
>> -------
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
>> 2
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
>> 'ab'
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
>> ZeroDivide
>> SmallInteger>>/
>> UndefinedObject>>DoIt
>> OpalCompiler>>evaluate
>> OpalCompiler(AbstractCompiler)>>evaluate:
>> SmalltalkImage>>evaluate:
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
>> BlockClosure>>on:do:
>> EvaluateCommandLineHandler>>evaluate:
>> EvaluateCommandLineHandler>>evaluateArguments
>> EvaluateCommandLineHandler>>activate
>> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>> PharoCommandLineHandler>>activate
>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> PharoCommandLineHandler class>>no (source is Undeclared)
>> no source in PharoCommandLineHandler class>>activateWith: in Block: no source
>> NonInteractiveUIManager(UIManager)>>defer:
>> PharoCommandLineHandler class>>activateWith:
>> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> BasicCommandLineHandler>>activateSubCommand:
>> BasicCommandLineHandler>>handleSubcommand
>> BasicCommandLineHandler>>handleArgument:
>> no source in BasicCommandLineHandler>>activate in Block: no source
>>
>> SmallInteger>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> AbstractCompiler>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> CommandLineHandler class>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> PharoCommandLineHandler>>no (source is Undeclared)
>>
>> UIManager>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> CommandLineUIManager>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> DelayMicrosecondScheduler>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> WeakArray class>>no (source is Undeclared)
>>
>>
>> ps: source cannot be displayed because there is no formatter available in the bootstrap
>>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "It's not what we do that matters most, it's how we do it."
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

abergel
In reply to this post by Tudor Girba-2
+1

Well phrased!
-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.



On Jan 19, 2016, at 2:10 PM, Tudor Girba <[hidden email]> wrote:

This is amazing news!

For those that might be less involved in this, the minimal image is a long term goal that is essentially in the works since the beginning of Pharo. It accumulated a ton of effort from multiple people (I did not participate, but I have an idea of the amount of effort and it really is huge and tedious), and now we see the first palpable result. This is one of those things that have almost no visible output, but will turn out to have a tremendous impact.

I would like to thank everyone involved! Please do keep this up. Even if it might look less rewarding, you should know that this work is greatly appreciated.

Cheers,
Doru


On Jan 19, 2016, at 3:29 PM, Christophe Demarey <[hidden email]> wrote:

Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared)
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared)
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared)
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared)
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared)

UndefinedObject>>no (source is Undeclared)

AbstractCompiler>>no (source is Undeclared)

SmalltalkImage>>no (source is Undeclared)

BlockClosure>>no (source is Undeclared)

EvaluateCommandLineHandler>>no (source is Undeclared)

EvaluateCommandLineHandler>>no (source is Undeclared)

CommandLineHandler class>>no (source is Undeclared)

BasicCommandLineHandler>>no (source is Undeclared)

BasicCommandLineHandler>>no (source is Undeclared)

PharoCommandLineHandler>>no (source is Undeclared)

UIManager>>no (source is Undeclared)

UndefinedObject>>no (source is Undeclared)

CommandLineUIManager>>no (source is Undeclared)

SmalltalkImage>>no (source is Undeclared)

DelayMicrosecondScheduler>>no (source is Undeclared)

BlockClosure>>no (source is Undeclared)

SmalltalkImage>>no (source is Undeclared)

WeakArray class>>no (source is Undeclared)


ps: source cannot be displayed because there is no formatter available in the bootstrap


--
www.tudorgirba.com
www.feenk.com

"It's not what we do that matters most, it's how we do it."



Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

demarey
In reply to this post by Tudor Girba-2
Thanks all for your kind words and encouragements!
Doru, you're right it has been made possible only because a lot of people took care to clean Pharo time after time*. By example, bootstraping Pharo 2.0 would have been a lot more pain!
We can also thanks Pavel for the work he did / does on the minimal image that goes into the same direction.

Cheers,
Christophe

* boy scouts rule: Leave the campground cleaner than you found it.

Le 19 janv. 2016 à 18:10, Tudor Girba a écrit :

> This is amazing news!
>
> For those that might be less involved in this, the minimal image is a long term goal that is essentially in the works since the beginning of Pharo. It accumulated a ton of effort from multiple people (I did not participate, but I have an idea of the amount of effort and it really is huge and tedious), and now we see the first palpable result. This is one of those things that have almost no visible output, but will turn out to have a tremendous impact.
>
> I would like to thank everyone involved! Please do keep this up. Even if it might look less rewarding, you should know that this work is greatly appreciated.
>
> Cheers,
> Doru
>
>
>> On Jan 19, 2016, at 3:29 PM, Christophe Demarey <[hidden email]> wrote:
>>
>> Hi all,
>>
>> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).
>>
>> This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
>> The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.
>>
>> With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
>> This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
>> It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>>
>> Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
>> Then, we need to implement an Oz VM on top of Spur.
>> After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).
>>
>> Christophe.
>>
>> -------
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
>> 2
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
>> 'ab'
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
>> ZeroDivide
>> SmallInteger>>/
>> UndefinedObject>>DoIt
>> OpalCompiler>>evaluate
>> OpalCompiler(AbstractCompiler)>>evaluate:
>> SmalltalkImage>>evaluate:
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
>> BlockClosure>>on:do:
>> EvaluateCommandLineHandler>>evaluate:
>> EvaluateCommandLineHandler>>evaluateArguments
>> EvaluateCommandLineHandler>>activate
>> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>> PharoCommandLineHandler>>activate
>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> PharoCommandLineHandler class>>no (source is Undeclared)
>> no source in PharoCommandLineHandler class>>activateWith: in Block: no source
>> NonInteractiveUIManager(UIManager)>>defer:
>> PharoCommandLineHandler class>>activateWith:
>> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> BasicCommandLineHandler>>activateSubCommand:
>> BasicCommandLineHandler>>handleSubcommand
>> BasicCommandLineHandler>>handleArgument:
>> no source in BasicCommandLineHandler>>activate in Block: no source
>>
>> SmallInteger>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> AbstractCompiler>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> CommandLineHandler class>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> PharoCommandLineHandler>>no (source is Undeclared)
>>
>> UIManager>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> CommandLineUIManager>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> DelayMicrosecondScheduler>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> WeakArray class>>no (source is Undeclared)
>>
>>
>> ps: source cannot be displayed because there is no formatter available in the bootstrap
>>
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "It's not what we do that matters most, it's how we do it."
>
>


smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

demarey
In reply to this post by Eliot Miranda-2
Hi Eliot,

Le 19 janv. 2016 à 19:29, Eliot Miranda a écrit :

Hi All,

    great news!  Where can I read a specification of the Oz VM facilities?

I do not know all the details of the Oz VM but basically, it is a standard stack interpreter vm specialized to be able to run 2 images at the same time on top of it. 
Guillermo made it possible by using one available bit in the object header of objects to mark the ownership of an object (e.g. is my object from image1 or image2?). Then, he mainly had to specialize VM primitives dealing with objects retrieval from memory. By example, he had to modify the garbage collector to set the right nil instance (yes, we have 2 images so 2 nil instances. we need to take the one of the active image) when an object is garbage collected; the primitive someObject has to return an object from the active image, etc.
There is also a way to switch execution from an image to the other just by switching the special objects array reference. 

The current implementation uses Cog  6.6.1and OzVM-GuillermoPolito.22.
I do not know if Guille has a more formal specification of the Oz VM.

If you have advices on what is the best way to handle two distinct object (memory) spaces in Spur, they will be welcomed :)

Cheers,
Christophe


_,,,^..^,,,_ (phone)

On Jan 19, 2016, at 6:29 AM, Christophe Demarey <[hidden email]> wrote:

Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap



smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

demarey
In reply to this post by Pavel Krivanek-3
Hi Pavel,

Le 19 janv. 2016 à 19:53, Pavel Krivanek a écrit :

Hi,

amazing! Do you have any idea how to speed up it? The bootstrap process is now running on my machine about one and half hour and it is still far from finish. 

The process is indeed far too long (takes around 10 hours) on the CI server.
Reasons are:
- we use a stack interpreter VM
- we modified it and is a bit slower than a classical stack VM
- we use AST interpretation to build the bootstrap and it is very slow. Guille already did some speed improvements by avoiding to interpret loops by example.

I did not yet spend time on this point because I first wanted to have something working.
Definitely, this problem will be tackled when we will put in production the bootstrap.

Cheers,
Christophe


Cheers,
-- Pavel

2016-01-19 15:29 GMT+01:00 Christophe Demarey <[hidden email]>:
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap




smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Guillermo Polito

On 20 ene 2016, at 9:08 a.m., Christophe Demarey <[hidden email]> wrote:

Hi Pavel,

Le 19 janv. 2016 à 19:53, Pavel Krivanek a écrit :

Hi,

amazing! Do you have any idea how to speed up it? The bootstrap process is now running on my machine about one and half hour and it is still far from finish. 

The process is indeed far too long (takes around 10 hours) on the CI server.
Reasons are:
- we use a stack interpreter VM
- we modified it and is a bit slower than a classical stack VM

Not quite so. My measurements did not show that… But I can understand the feeling as the StackVM is in general half as fast as the CogVM, which is the VM we are used to use since years.

- we use AST interpretation to build the bootstrap and it is very slow. Guille already did some speed improvements by avoiding to interpret loops by example.

I did not yet spend time on this point because I first wanted to have something working.
Definitely, this problem will be tackled when we will put in production the bootstrap.

We should really measure because I see three main aspects:

1) class creation (executes the class builder using AST interpretation)
2) method compilation
3) method installation  (using AST interpretation to respect trait copying)

My feeling (from what I observe only) is that most of the time is consumed in 2) and 3), and that specially it is in 3).

And I particularly want to see how the growing of collections perform.


Cheers,
Christophe


Cheers,
-- Pavel

2016-01-19 15:29 GMT+01:00 Christophe Demarey <[hidden email]>:
Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap




Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Guillermo Polito
In reply to this post by demarey
Well, there is no formal specification… But I could summarize the features as follows (and as Christophe points mostly out)

OzVM supports having two images in logically separated spaces. This separation is achieved by using the free bit in the object header. Thus we support only two spaces by now.

- The main addition is actually a new primitive: #resumeFromSpecialObjectsArray that receives an special objects array as argument and:
    - resumes the execution from the active process of such array
    - on context switch, if the VM is running from a second special objects array, it will return to the first one instead.

- fixes to primitives/bytecodes that assume a single special objects array. e.g.,
   - #someObject and #nextObject should only iterate objects from the correct “space”
   - #isNil comparisons should take the correct nil
   - the GC should set the correct nil object on Weak containers

The extensions I made are about 20 overrides to StackPrimitive and NewObjectMemory methods.

The rest is implemented completely on image side. We use mirror primitives to manipulate objects from other space (as each image/space has it’s own selector table).

I have in my long TODO list see if the "clever hack” I did can be supported in a nice manner on top of Spur’s segmented memory. However, I should stop commencing new projects and start finishing them :P.

On 20 ene 2016, at 9:03 a.m., Christophe Demarey <[hidden email]> wrote:

Hi Eliot,

Le 19 janv. 2016 à 19:29, Eliot Miranda a écrit :

Hi All,

    great news!  Where can I read a specification of the Oz VM facilities?

I do not know all the details of the Oz VM but basically, it is a standard stack interpreter vm specialized to be able to run 2 images at the same time on top of it. 
Guillermo made it possible by using one available bit in the object header of objects to mark the ownership of an object (e.g. is my object from image1 or image2?). Then, he mainly had to specialize VM primitives dealing with objects retrieval from memory. By example, he had to modify the garbage collector to set the right nil instance (yes, we have 2 images so 2 nil instances. we need to take the one of the active image) when an object is garbage collected; the primitive someObject has to return an object from the active image, etc.
There is also a way to switch execution from an image to the other just by switching the special objects array reference. 

The current implementation uses Cog  6.6.1and OzVM-GuillermoPolito.22.
I do not know if Guille has a more formal specification of the Oz VM.

If you have advices on what is the best way to handle two distinct object (memory) spaces in Spur, they will be welcomed :)

Cheers,
Christophe


_,,,^..^,,,_ (phone)

On Jan 19, 2016, at 6:29 AM, Christophe Demarey <[hidden email]> wrote:

Hi all,

In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).

This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.

With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdfwe succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.

Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
Then, we need to implement an Oz VM on top of Spur.
After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).

Christophe.

-------
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
2
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
'ab'
demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
ZeroDivide
SmallInteger>>/
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:

EvaluateCommandLineHandler>>no (source is Undeclared) 
no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:

BasicCommandLineHandler>>no (source is Undeclared) 
no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:

PharoCommandLineHandler class>>no (source is Undeclared) 
no source in PharoCommandLineHandler class>>activateWith: in Block: no source
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
no source in BasicCommandLineHandler>>activate in Block: no source

SmallInteger>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

AbstractCompiler>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

EvaluateCommandLineHandler>>no (source is Undeclared) 

CommandLineHandler class>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

BasicCommandLineHandler>>no (source is Undeclared) 

PharoCommandLineHandler>>no (source is Undeclared) 

UIManager>>no (source is Undeclared) 

UndefinedObject>>no (source is Undeclared) 

CommandLineUIManager>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

DelayMicrosecondScheduler>>no (source is Undeclared) 

BlockClosure>>no (source is Undeclared) 

SmalltalkImage>>no (source is Undeclared) 

WeakArray class>>no (source is Undeclared) 


ps: source cannot be displayed because there is no formatter available in the bootstrap



Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

Pharo Smalltalk Developers mailing list
Cool. Any chance someone can explain for beginners to understand
what's going on here?
Why is cleaning the image not as simple as running it and deleting any
object that wasn't used?

(Thanks in advance)

On 20 January 2016 at 12:52, Guillermo Polito <[hidden email]> wrote:

> Well, there is no formal specification… But I could summarize the features
> as follows (and as Christophe points mostly out)
>
> OzVM supports having two images in logically separated spaces. This
> separation is achieved by using the free bit in the object header. Thus we
> support only two spaces by now.
>
> - The main addition is actually a new primitive:
> #resumeFromSpecialObjectsArray that receives an special objects array as
> argument and:
>     - resumes the execution from the active process of such array
>     - on context switch, if the VM is running from a second special objects
> array, it will return to the first one instead.
>
> - fixes to primitives/bytecodes that assume a single special objects array.
> e.g.,
>    - #someObject and #nextObject should only iterate objects from the
> correct “space”
>    - #isNil comparisons should take the correct nil
>    - the GC should set the correct nil object on Weak containers
>
> The extensions I made are about 20 overrides to StackPrimitive and
> NewObjectMemory methods.
>
> The rest is implemented completely on image side. We use mirror primitives
> to manipulate objects from other space (as each image/space has it’s own
> selector table).
>
> I have in my long TODO list see if the "clever hack” I did can be supported
> in a nice manner on top of Spur’s segmented memory. However, I should stop
> commencing new projects and start finishing them :P.
>
> On 20 ene 2016, at 9:03 a.m., Christophe Demarey
> <[hidden email]> wrote:
>
> Hi Eliot,
>
> Le 19 janv. 2016 à 19:29, Eliot Miranda a écrit :
>
> Hi All,
>
>     great news!  Where can I read a specification of the Oz VM facilities?
>
>
> I do not know all the details of the Oz VM but basically, it is a standard
> stack interpreter vm specialized to be able to run 2 images at the same time
> on top of it.
> Guillermo made it possible by using one available bit in the object header
> of objects to mark the ownership of an object (e.g. is my object from image1
> or image2?). Then, he mainly had to specialize VM primitives dealing with
> objects retrieval from memory. By example, he had to modify the garbage
> collector to set the right nil instance (yes, we have 2 images so 2 nil
> instances. we need to take the one of the active image) when an object is
> garbage collected; the primitive someObject has to return an object from the
> active image, etc.
> There is also a way to switch execution from an image to the other just by
> switching the special objects array reference.
>
> You can find some information in:
> https://guillep.github.io/files/publications/Poli15Thesis.pdf.
> The Oz code is in http://smalltalkhub.com/#!/~Guille/ObjectSpace and in
> https://github.com/guillep/OzVM
> The current implementation uses Cog  6.6.1and OzVM-GuillermoPolito.22.
> I do not know if Guille has a more formal specification of the Oz VM.
>
> If you have advices on what is the best way to handle two distinct object
> (memory) spaces in Spur, they will be welcomed :)
>
> Cheers,
> Christophe
>
>
> _,,,^..^,,,_ (phone)
>
> On Jan 19, 2016, at 6:29 AM, Christophe Demarey
> <[hidden email]> wrote:
>
> Hi all,
>
> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo
> image from sources, not based on a previous image (well, we use a pharo
> image to produce it but no code / state from it).
>
> This process will allow to define a minimal Pharo kernel (currently 52
> packages but we could have it far smaller) and to modularize the whole image
> (currently packages have too much dependencies on packages already loaded
> into the image).
> The bootstrap process also allows to write down the recipe to initialize a
> new image from scratch (some code is missing in the image or is wrong). In
> addition, I think we will clean a lot of historical objects that are not
> used anymore.
>
> With the amazing work done by Guillermo Polito during his Phd (around
> Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf,
> we succeeded to get a first prototype of a bootstraped Pharo 5 image (from
> 5.392).
> This prototype is able to run an eval command line handler and to log output
> / errors. Not all classes are yet initialized and you cannot yet save /
> restart this image but it is a big step forward.
> It is a 4 mb image (could be half the size without unicode data). You can
> download it at:
> http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>
> Next steps are to have a bootstrapped image fully working, then to load
> packages on top of it (like network, sunit) to produce a minimal image.
> Then, we need to implement an Oz VM on top of Spur.
> After that, we need to work on a reliable way to build the bootstrap (not
> too sensitive to changes in the image).
>
> Christophe.
>
> -------
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "1 + 1"
> 2
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "'a' , 'b'"
> 'ab'
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "1 / 0"
> ZeroDivide
> SmallInteger>>/
> UndefinedObject>>DoIt
> OpalCompiler>>evaluate
> OpalCompiler(AbstractCompiler)>>evaluate:
> SmalltalkImage>>evaluate:
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
> BlockClosure>>on:do:
> EvaluateCommandLineHandler>>evaluate:
> EvaluateCommandLineHandler>>evaluateArguments
> EvaluateCommandLineHandler>>activate
> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in
> Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in
> Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
> PharoCommandLineHandler>>activate
> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> PharoCommandLineHandler class>>no (source is Undeclared)
> no source in PharoCommandLineHandler class>>activateWith: in Block: no
> source
> NonInteractiveUIManager(UIManager)>>defer:
> PharoCommandLineHandler class>>activateWith:
> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no
> source
> BlockClosure>>on:do:
> BasicCommandLineHandler>>activateSubCommand:
> BasicCommandLineHandler>>handleSubcommand
> BasicCommandLineHandler>>handleArgument:
> no source in BasicCommandLineHandler>>activate in Block: no source
>
> SmallInteger>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> AbstractCompiler>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> CommandLineHandler class>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> PharoCommandLineHandler>>no (source is Undeclared)
>
> UIManager>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> CommandLineUIManager>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> DelayMicrosecondScheduler>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> WeakArray class>>no (source is Undeclared)
>
>
> ps: source cannot be displayed because there is no formatter available in
> the bootstrap
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Pharo bootstrap

philippeback


On Wed, Jan 20, 2016 at 4:19 PM, Peter H. Meadows via Pharo-dev <[hidden email]> wrote:


---------- Forwarded message ----------
From: "Peter H. Meadows" <[hidden email]>
To: Pharo Development List <[hidden email]>
Cc: 
Date: Wed, 20 Jan 2016 15:17:59 +0000
Subject: Re: [Pharo-dev] [ANN] Pharo bootstrap
Cool. Any chance someone can explain for beginners to understand
what's going on here?
Why is cleaning the image not as simple as running it and deleting any
object that wasn't used?

The point is not to clean but to start with an empty object engine and fill it in with the minimum required core.
Currently, the image is the result of an evolutionary process and rebuilding it from zero was not possible.
This maes it possible to audit the whole build process, create different base image for various purposes (very small, headless with no UI objects at all, using the object engine in a completely different way that is used today).

That makes the image the result of a fully reproducible process, from a file of zero bytes, to a file with a working image.

That would make us master the whole chain. Today, there is still black magic in the image, due to the history.

That's an exciting development. For example, in C, one compiles all files, and links, giving the exe. All that from a file of zero size. We will be able to do the same kind of thing at the image level.

Also, this allows to experiment with new low level mechanisms. This is currently not possible since it makes us like performing surgery on our own brain. Also, the Oz-inspired system will help in exploring other image memories (small or large) and manipulate them as entities. At this point, this is also not common pratice.

HTH
Phil, wishing to master the mitosis competency...

(Thanks in advance)

On 20 January 2016 at 12:52, Guillermo Polito <[hidden email]> wrote:
> Well, there is no formal specification… But I could summarize the features
> as follows (and as Christophe points mostly out)
>
> OzVM supports having two images in logically separated spaces. This
> separation is achieved by using the free bit in the object header. Thus we
> support only two spaces by now.
>
> - The main addition is actually a new primitive:
> #resumeFromSpecialObjectsArray that receives an special objects array as
> argument and:
>     - resumes the execution from the active process of such array
>     - on context switch, if the VM is running from a second special objects
> array, it will return to the first one instead.
>
> - fixes to primitives/bytecodes that assume a single special objects array.
> e.g.,
>    - #someObject and #nextObject should only iterate objects from the
> correct “space”
>    - #isNil comparisons should take the correct nil
>    - the GC should set the correct nil object on Weak containers
>
> The extensions I made are about 20 overrides to StackPrimitive and
> NewObjectMemory methods.
>
> The rest is implemented completely on image side. We use mirror primitives
> to manipulate objects from other space (as each image/space has it’s own
> selector table).
>
> I have in my long TODO list see if the "clever hack” I did can be supported
> in a nice manner on top of Spur’s segmented memory. However, I should stop
> commencing new projects and start finishing them :P.
>
> On 20 ene 2016, at 9:03 a.m., Christophe Demarey
> <[hidden email]> wrote:
>
> Hi Eliot,
>
> Le 19 janv. 2016 à 19:29, Eliot Miranda a écrit :
>
> Hi All,
>
>     great news!  Where can I read a specification of the Oz VM facilities?
>
>
> I do not know all the details of the Oz VM but basically, it is a standard
> stack interpreter vm specialized to be able to run 2 images at the same time
> on top of it.
> Guillermo made it possible by using one available bit in the object header
> of objects to mark the ownership of an object (e.g. is my object from image1
> or image2?). Then, he mainly had to specialize VM primitives dealing with
> objects retrieval from memory. By example, he had to modify the garbage
> collector to set the right nil instance (yes, we have 2 images so 2 nil
> instances. we need to take the one of the active image) when an object is
> garbage collected; the primitive someObject has to return an object from the
> active image, etc.
> There is also a way to switch execution from an image to the other just by
> switching the special objects array reference.
>
> You can find some information in:
> https://guillep.github.io/files/publications/Poli15Thesis.pdf.
> The Oz code is in http://smalltalkhub.com/#!/~Guille/ObjectSpace and in
> https://github.com/guillep/OzVM
> The current implementation uses Cog  6.6.1and OzVM-GuillermoPolito.22.
> I do not know if Guille has a more formal specification of the Oz VM.
>
> If you have advices on what is the best way to handle two distinct object
> (memory) spaces in Spur, they will be welcomed :)
>
> Cheers,
> Christophe
>
>
> _,,,^..^,,,_ (phone)
>
> On Jan 19, 2016, at 6:29 AM, Christophe Demarey
> <[hidden email]> wrote:
>
> Hi all,
>
> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo
> image from sources, not based on a previous image (well, we use a pharo
> image to produce it but no code / state from it).
>
> This process will allow to define a minimal Pharo kernel (currently 52
> packages but we could have it far smaller) and to modularize the whole image
> (currently packages have too much dependencies on packages already loaded
> into the image).
> The bootstrap process also allows to write down the recipe to initialize a
> new image from scratch (some code is missing in the image or is wrong). In
> addition, I think we will clean a lot of historical objects that are not
> used anymore.
>
> With the amazing work done by Guillermo Polito during his Phd (around
> Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf,
> we succeeded to get a first prototype of a bootstraped Pharo 5 image (from
> 5.392).
> This prototype is able to run an eval command line handler and to log output
> / errors. Not all classes are yet initialized and you cannot yet save /
> restart this image but it is a big step forward.
> It is a 4 mb image (could be half the size without unicode data). You can
> download it at:
> http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip.
>
> Next steps are to have a bootstrapped image fully working, then to load
> packages on top of it (like network, sunit) to produce a minimal image.
> Then, we need to implement an Oz VM on top of Spur.
> After that, we need to work on a reliable way to build the bootstrap (not
> too sensitive to changes in the image).
>
> Christophe.
>
> -------
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "1 + 1"
> 2
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "'a' , 'b'"
> 'ab'
> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo
> bootstrap.image --no-default-preferences eval "1 / 0"
> ZeroDivide
> SmallInteger>>/
> UndefinedObject>>DoIt
> OpalCompiler>>evaluate
> OpalCompiler(AbstractCompiler)>>evaluate:
> SmalltalkImage>>evaluate:
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
> BlockClosure>>on:do:
> EvaluateCommandLineHandler>>evaluate:
> EvaluateCommandLineHandler>>evaluateArguments
> EvaluateCommandLineHandler>>activate
> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in
> Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>
> BasicCommandLineHandler>>no (source is Undeclared)
> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in
> Block: no source
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
> PharoCommandLineHandler>>activate
> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>
> PharoCommandLineHandler class>>no (source is Undeclared)
> no source in PharoCommandLineHandler class>>activateWith: in Block: no
> source
> NonInteractiveUIManager(UIManager)>>defer:
> PharoCommandLineHandler class>>activateWith:
> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no
> source
> BlockClosure>>on:do:
> BasicCommandLineHandler>>activateSubCommand:
> BasicCommandLineHandler>>handleSubcommand
> BasicCommandLineHandler>>handleArgument:
> no source in BasicCommandLineHandler>>activate in Block: no source
>
> SmallInteger>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> AbstractCompiler>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> EvaluateCommandLineHandler>>no (source is Undeclared)
>
> CommandLineHandler class>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> BasicCommandLineHandler>>no (source is Undeclared)
>
> PharoCommandLineHandler>>no (source is Undeclared)
>
> UIManager>>no (source is Undeclared)
>
> UndefinedObject>>no (source is Undeclared)
>
> CommandLineUIManager>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> DelayMicrosecondScheduler>>no (source is Undeclared)
>
> BlockClosure>>no (source is Undeclared)
>
> SmalltalkImage>>no (source is Undeclared)
>
> WeakArray class>>no (source is Undeclared)
>
>
> ps: source cannot be displayed because there is no formatter available in
> the bootstrap
>
>
>



Reply | Threaded
Open this post in threaded view
|

Re: Pharo bootstrap

ccrraaiigg

Hi all--

     Phil writes:

> The point is not to clean but to start with an empty object engine and
> fill it in with the minimum required core. Currently, the image is
> the result of an evolutionary process and rebuilding it from zero was
> not possible.

     Another approach is to modify the virtual machine so that it marks
methods as they are run, and modify the garbage collector to reclaim
methods that haven't been run. Then you can create systems that consist
of only what is necessary to run unit tests, effectively imprinting the
unit tests. You can interact with the target system from completely
independent one over a remote messaging network connection, so your unit
tests need not include graphics support, etc.[1] This seems much simpler
to me than making a virtual machine that can run multiple object
memories, and distributed object memories have several other important
uses too.

> This makes it possible to audit the whole build process, create
> different base image for various purposes (very small, headless with
> no UI objects at all, using the object engine in a completely
> different way that is used today).
>
> That makes the image the result of a fully reproducible process, from
> a file of zero bytes, to a file with a working image.

     You can do all of these things with imprinted unit tests as well.

> Also, this allows to experiment with new low level mechanisms. This is
> currently not possible since it makes us like performing surgery on
> our own brain.

     With remote messaging, which has been around for many years, you
can perform this surgery from afar.

> Also, the Oz-inspired system will help in exploring other image
> memories (small or large) and manipulate them as entities. At this
> point, this is also not common pratice.

     This has been common practice since the introduction of the virtual
machine simulator in 1996. The remote facilities I mentioned all work
under simulation, too.

     There's a lot of prior art here.


-C

[1] http://netjam.org/context

--
Craig Latta
netjam.org
+31   6 2757 7177 (SMS ok)
+ 1 415  287 3547 (no SMS)


123