[Pharo-dev] PharoMinimal ?
pavel.krivanek at gmail.com
Sun Oct 8 13:12:10 EDT 2017
2017-10-08 19:00 GMT+02:00 Sven Van Caekenberghe <sven at stfx.eu>:
> Hi Pavel,
> Thanks a lot for the explanation. To summarise: 70-minimal is the one with
> monticello and metacello in it that can load code via the config handler.
> I was confused, because that failed for me.
> Now, first doing
> $ ./pharo pharo-minimal.image eval 'ZnMimeType initialize'
> fixed my loading problem. I also did the following because some of my
> project don't separate tests (I known ;-)
> $ ./pharo pharo-minimal.image eval --save 'Object subclass: #TestCase'
> With those fixes I was able to load different projects
> $ ./pharo pharo-minimal config http://mc.stfx.eu/Neo
> ConfigurationOfZTimestamp --install=stable
> $ ./pharo pharo-minimal config http://mc.stfx.eu/Neo
> ConfigurationOfNeoConsole --install=bleedingEdge
> The image remains equally fast in startup
> $ time ./pharo pharo-minimal.image eval ZTimestamp now
> real 0m0.062s
> user 0m0.025s
> sys 0m0.029s
> And it works perfectly as a server, like
> $ ./pharo pharo-minimal eval --no-quit 'NeoConsoleTelnetServer new start' &
> $ telnet localhost 4999
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> Neo Console Pharo-7.0+alpha.build.172.sha.d13eed2f80fe19f29fd85ede8c4809d6a6986d4f
> (32 Bit)
> > get
> known metrics:
> system.status - Simple system status
> memory.total - Total allocated memory
> memory.free - Free memory
> memory.gc - Garbage collect, return free memory
> system.uptime - Image uptime human readeable
> system.uptimeseconds - Image uptime seconds
> system.date - Current date
> system.time - Current time
> system.timestamp - Current timestamp
> process.count - Current process count
> process.list - Current list of processes
> system.version - Image version info
> system.mcversions - Monticello packages version info
> > get process.list
> Delay Scheduling Process
> Low Space Watcher
> Idle Process
> WeakArray Finalization Process
> NeoConsoleTelnetServer port 4999
> NeoConsoleTelnetServer port 4999 Connection Handler
> > SessionManager default startupList collect: #handledId
> #(#SmallInteger #Delay #ProcessorScheduler #OSPlatform #FileLocator
> #MCMethodDefinition #WeakArray #FileStream #MultiByteFileStream
> #EndianDetector #Symbol #LanguageEnvironment #Stdio
> #NonInteractiveTranscript #WeakFinalizationList #DiskStore
> #BasicCommandLineHandler #SourceFileArray #ASTCache #UUIDGenerator
> #InternetConfiguration #ZnLogEvent #ZnServer #Color
> #UIManagerSessionHandler #ZTimestamp)
> Connection closed by foreign host.
> Image size remains ~11Mb.
I suppose it can be smaller with the release cleanup.
> Very nice !
> About the class initialisations. Why were they not done already ? You seem
> to have a list of them, why not make sure they are executed when creating
> the image ? I guess I could rewrite some of my code to do lazy
> initialization class side but I should not have to do that, should I ?
During the baselines loading some of the initializations are done manually
because of the dependencies and the mentioned classes are initialized later
during Morphic loading. We should check them and move them to a proper
> > On 8 Oct 2017, at 12:41, Pavel Krivanek <pavel.krivanek at gmail.com>
> > Hi Sven,
> > 2017-10-07 16:18 GMT+02:00 Sven Van Caekenberghe <sven at stfx.eu>:
> > Hi,
> > What is the story around PharoMinimal and related images ?
> > Is there a writeup somewhere with instructions ?
> > Right now the minimal (Metacello) image based on Pharo 7 is used only as
> intermediate step in building of the full Pharo and the only real
> (successful) attempt to use it for something else is PharoLambda (
> > In general it can be used for building of own (server) applications.
> E.g. this way you can install and run Teapot on it:
> > ./pharo Pharo7.0-metacello-32bit-d13eed2.image config
> http://smalltalkhub.com/mc/zeroflag/Teapot/main ConfigurationOfTeapot
> > ./pharo Pharo7.0-metacello-32bit-d13eed2.image eval --no-quit "Teapot
> on GET: '/welcome' -> 'Hello World'; start."
> > You can load baselines from the Git repositories too but we currently do
> not have any command line handler for it so you need to do it using "eval"
> command or *.st flile. Something like this:
> > Metacello new
> > baseline: 'Seaside3';
> > repository: 'github://SeasideSt/Seaside:master/repository';
> > load
> > To make it more usable we probably should extend it with SUnit and Fuel.
> If you want to extend it with some packages from vanilla Pharo, you should
> load them using FileTree from your local Pharo repository clone.
> > Gofer it
> > url: 'filetree:///path-to-my-pharo-repository-clone/pharo/src';
> > package: 'Multilingual-OtherLanguages';
> > package: 'Multilingual-TextConverterOtherLanguages';
> > load.
> > It still needs some care. E.g. some classes from Zinc are not properly
> initialized (I know about DigitalSignatureAlgorithm MD5NonPrimitive
> RxMatcherRxParser RxsPredicate SHA1 ZnByteEncoder ZnConstants ZnMimeType
> ZnNetworkingUtils ZnServer ZnSingleThreadedServer TextConstants
> > I tried to load Seaside into it today (from the example above) and it
> failed (some strange error probalby related to Unicode processing). But we
> will fix it. If you will tell me what exactly you need we can make it work
> together as in case of PharoLambda.
> > I see that we get **FANTASTIC** startup speed with it:
> > $ cat /etc/issue
> > Ubuntu 16.04.3 LTS
> > $ ./pharo --version
> > 5.0-201708271955 Sun Aug 27 20:09:20 UTC 2017 gcc 4.6.3 [Production
> Spur VM]
> > CoInterpreter VMMaker.oscog-eem.2265 uuid: 76b62109-629a-4c39-9641-67b53321df9a
> Aug 27 2017
> > StackToRegisterMappingCogit VMMaker.oscog-eem.2262 uuid:
> 8b531242-de02-48aa-b418-8d2dde0bec6c Aug 27 2017
> > VM: 201708271955 https://github.com/OpenSmalltalk/opensmalltalk-vm.git
> $ Date: Sun Aug 27 21:55:26 2017 +0200 $
> > Plugins: 201708271955 https://github.com/OpenSmalltalk/opensmalltalk-
> vm.git $
> > Linux testing-gce-ebf45dd8-6a4c-43a5-abd0-e5d8673d05a4
> 3.13.0-115-generic #162~precise1-Ubuntu SMP Fri Mar 24 16:47:06 UTC 2017
> i686 i686 i386 GNU/Linux
> > plugin path: /home/audio359/pharo7/pharo-vm/lib/pharo/5.0-201708271955
> [default: /home/audio359/pharo7/pharo-vm/lib/pharo/5.0-201708271955/]
> > $ curl get.pharo.org/70-minimal | bash
> > ...
> > $ ./pharo Pharo.image printVersion
> > [version] 'Pharo7.0' 'Pharo-7.0+alpha.build.172.sha.
> d13eed2f80fe19f29fd85ede8c4809d6a6986d4f (32 Bit)'
> > $ time ./pharo Pharo.image eval '5 factorial'
> > 120
> > real 0m0.083s
> > user 0m0.034s
> > sys 0m0.042s
> > That is less than 1/10 of a second on a simple server ! Wow.
> > Loading new code in that image seem hard though.
> > I see that in http://files.pharo.org/image/70/ there are
> Pharomonticello & Pharometacello variants.
> > Any pointers on usage/meaning ?
> > Monticello is bootstrapped Pharo image with Monticello loaded. This
> image then loads Metacello and the generated image is the image that we
> call "minimal". It is minimal in sense minimal for common usage.
> > During Pharo building process we generate:
> > - bootstrapped image
> > - image with Opal that is loaded as binary packages using Hermes
> > - Monticello with only local repositories support
> > - Monticello with network and remote repositories support
> > - Metacello
> > - full Pharo IDE (which is loaded as sequence of several standalone
> > Cheers,
> > -- Pavel
> > Thx,
> > Sven
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pharo-dev