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:-) > > 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/dfbfb77844a31701da6e49691af2a05ad55b4bc6/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. >
