[Glass] Curious about GemStone 3.5

Dale Henrichs dale.henrichs at gemtalksystems.com
Wed Apr 10 17:41:10 PDT 2019


On 4/10/19 4:51 PM, BrunoBB via Glass wrote:
> Martin/Norm/Dale,
>
> Got it. Thanks for your answers.
>
> How will work the readonly restriction ?
I believe that commits will fail or are disabled ... basically you will 
be running "normally" in the topaz vm ... so all of the smalltalk 
functionality will work ... with the restriction that you won't be able 
to save your work to disk ...
>   
>
> It will be possible to anything but the commit will fail. Or some feature
> will be disabled ?
> I mean if it is possible to execute GS code then is possible to create
> classes but classes are persistent.
> So this will be disable or a commit will fail ?
>
> If the commit will fail then it will possible to create objects attach them
> to class vars but no commit available.
I think that this is the model ...
>
> What was the main motivation to create a solo Gem ?
> * To ease the development of Gs_devKit ?
> * To execute GS code without performance penalties for persistence ?
> * To use a solo Gem for development ?

I think it was mainly the general case of being able to write executable 
smalltalk scripts without *requiring* that a stone be up and running ... 
internally we have a number shell scripts and perl scripts that we use 
for test drivers and the like and it would be real nice to be able write 
and maintain these scripts in gemstone smalltalk ...

so GsDevKit_home is one of the use cases ... the Pharo3.0 vm that gets 
built and run in GsDevKit_home is a good example that there are some 
things that you can't do in bash --- like extract information from .ston 
files ... with topaz solo, we could distribute and extent file with the 
GsDevKit_home code preloaded and quite a lot can be done without ever 
having to have a live stone running ... you do get to the point where it 
might make sense to use a running stone to store some of the meta data 
for the system, but with topaz solo, we can run lightweight scripts 
without requiring a stone to be running ...

In preparation for topaz solo being available, I've started playing 
around with smalltalk shebang scripts[1] that are based on using a Tonel 
class file as a script that could be run using topaz solo or a live 
stone[2]:

    #!/usr/bin/smalltalk
    "
    Example executable script
    "
    Class {
          #name : 'Sample',
          #superclass : 'StashScript',
          #category : 'Stash-Scripts'
    }

    { #category : 'script execution' }
    Sample >> scriptOptions [
    	^ {
    			#('help' $h #'none').
    			#('print' $p #'optional').
    	}
    ]

    { #category : 'script execution' }
    Sample >> executeScript [

    	opts
    		at: 'help'
         ifAbsent: [
    			| stream |
    			stream := WriteStreamPortable on: String new.
    			args size > 0
    				ifTrue: [
    					stream nextPutAll: '|args| '.
    					args do: [:arg | stream nextPutAll: arg; space ] ]
    				ifFalse: [ stream nextPutAll: 'no args ' ].
    			opts at: 'print'
    				ifPresent: [:optionalArg |
    					stream nextPutAll: ' |print| ', optionalArg asString ]
    				ifAbsent: [ stream nextPutAll: ' || no --print ' ].
    			^ stream contents ]
         ifPresent: [ ^ self usage ]
    ]

    { #category : 'usage' }
    Sample >> usage [
    	| dashes |
    	dashes := '----------------------------------------------------
    '.
       ^ dashes,
    		(self manPageClass
               fromString:
    'NAME
    	sample - example script
    SYNOPSIS
    	sample [-h|--help] [-p [<arg>] | --print[=<arg>]] [ <positional-args> ]\
    		[ -- <topaz-specific-options> ]
    DESCRIPTION

    	This example script shows how to define command options and positional arguments.

    	Use the env var GEMSTONE_SCRIPT_ARGS to define default <stone-name> and other
    	topaz arguments (<startTopaz-specific-options>) to be used when running scripts.

    EXAMPLES
    	sample.st --help
    	sample.st -h

    	sample.st --print=\`hi there\`
    	sample.st -p \`hi there\` arg1

    	sample.st --print=hi arg1 arg2
    	sample.st -p hi

    	sample.st --print
    	sample.st -p

    	sample.st arg1 arg2 arg3
    ') printString, dashes
    ]

You might recognize that the above script is similar to what I've been 
doing for tODE scripts ... this is all fairly experimental at this point 
... I'm basically trying to see how far I can go without having to 
resort to bash:) So far I've been working with a live stone ... when 
writing some scripts it is very convenient to be able to use a smalltalk 
development environment (Jadeite and Rowan in my case) to write the 
scripts, but I anticipate that you should be able to target a smalltalk 
shebang script at a live stone or topaz solo ...

Dale

[1] https://github.com/dalehenrich/stash
[2] https://github.com/dalehenrich/stash/blob/master/bin/sample.st
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20190410/5f11ab2a/attachment-0001.html>


More information about the Glass mailing list