On Fri, Feb 24, 2017 at 11:36 PM, Pavel Krivanek <[email protected]> wrote:
> > > 2017-02-24 15:58 GMT+01:00 Ben Coman <[email protected]>: > >> >> >> On Fri, Feb 24, 2017 at 8:36 PM, Pavel Krivanek <[email protected] >> > wrote: >> >>> Hi, >>> >>> I have published a short video of the Pharo bootstrapping from a Ring >>> model that is browsed and modified by the Calypso browser. >>> >>> https://www.youtube.com/watch?v=QguZSPKo7-w >>> >>> No audio, please enable subtitles for the description. >>> >>> >> Wow wow wow !! Super-cool !! >> I had to watch it a few times. >> 314k image is pretty impressive. >> >> Just to clarify, Calypso is not connected to a remote image but browses >> the bootstrap source code loaded into a Ring Environment? >> > > > Yes, Calypso browses an off-line source code loaded into the Ring > environment. > > > >> (btw, should we call this a "guest environment"?) >> > > It is possible to open Calypso on a Ring model that takes data from the > current image so in that case it would be confusing:-) > I meant only for the purpose of discussing bootstrap, not Calypso in general. :) The rest of your responses made things clear. Thx. cheers -ben > > > >> >> When you show the previously opened window "Methods with a string aText >> 'Smalltalk run' ..." >> showing PBImageBuilder50 >> initializeImage, >> that was opened before you created the new Ring Environment and Calypso >> was opened, >> so can I presume it was opened on a similar Ring Environment created >> earlier? >> > > It is a standard Nautilus window on the code in the image that does the > bootstrapping. For the standard bootstrap it does much more things. See: > https://github.com/guillep/pharo-core/blob/dfbfb77844a31701da6e49691af2a0 > 5ad55b4bc6/bootstrap/src/Pharo30Bootstrap.package/PBImageBuilder50.class/ > instance/initializeImage.st > > >> >> There were no processes in the guest image prior to doing this... >> process := objectSpace >> createProcessWithPriority: 40 >> doing: ('Smalltalk primitiveGarbageCollect. Smalltalk run'). >> objectSpace installActiveProcess: process. >> so this was a single process Image? >> > > Yes, see the method above > > >> >> You say "The image must contain support for the class builder to be able >> to be bootstrapped." >> When you create the SmalltalkImage>>run method in the guest environment, >> is that actually *running* to compiled as normal using its class builder? >> > > No, when I create the method, only the source code is set in the Ring > model. The model is "dead". The real installation of the method into the > generated object memory is done during the bootstrapping. > > >> >> How difficult would it be for the guest image to invoke class builder via >> seamless in the host image? >> > > The "guest" object memory runs in a special virtual machine simulator > during the bootstrapping. That simulator uses AST Interpreter to execute > the code inside the guest environment before it is installed for real. It > uses own special kind of proxies and tricks to do it. The current bootstrap > cannot run without class builder in the guest environment, but... > > >> And how much smaller could the image get if the class builder was removed. >> > > ...Guille in his thesis tried different approaches and he was able to > produce extremely small images (~10 KiB) that did for example only a sum > of two numbers. > > https://guillep.github.io/files/publications/Poli15Thesis.pdf > > >> >> It could be cool if this bootstrap creation process was integrated in >> PharoLauncher as a GUI tool. Then later the ability to download these >> mini-image to an embedded controller could be added. >> > >> cheers -ben >> >> P.S. Could you maybe blog this also, to make it easier to replicate and >> copy-paste the Playground text. >> > >
