[Newbies] Is Squeak/Pharo an appropriate language choice?

Louis LaBrunda Lou at Keystone-Software.com
Fri Nov 1 13:53:51 UTC 2013

Hi Charles,

I don't know enough about Magma to answer your questions.  I'm really a VA
Smalltalk guy and only play a little with Squeak.  I knew just enough about
Magma to point you to it.  I'm sure there are a lot of Squeakers that know
about Magma and can probably answer your questions but they are probably
not reading this list.  Try re-posting on:
gmane.comp.lang.smalltalk.squeak.general.  There may also be a Magma
specific list but I'm not sure about that.

Before you decide you need a database for sure maybe you could experiment
with creating a lot of data in your image and see how long it takes to
load/save.  If it isn't too long then the OS paging out pieces and then
back when needed might not be too bad?

Also, if you are going to use a database maybe you could use a hash (big)
for the id's?


On Thu, 31 Oct 2013 14:53:03 -0700, Charles Hixson
<charleshixsn at earthlink.net> wrote:

>On 10/31/2013 01:28 PM, Louis LaBrunda wrote:
>> Hi Charles,
>>> If I'm going to need to use a database, and handle my own rolling in and
>>> out anyway, then Smalltalk isn't a good choice.  And while multiple
>>> processing is only a speed-up thing, that's a pretty important thing in
>>> and of itself.
>> I think you may need an OODB, you should take a look at Magma
>> http://wiki.squeak.org/squeak/2665.  You may not need to do as much rolling
>> in and out on your own as you think.
>> Lou
>> -----------------------------------------------------------
>> Louis LaBrunda
>> Keystone Software Corp.
>> SkypeMe callto://PhotonDemon
>> mailto:Lou at Keystone-Software.com http://www.Keystone-Software.com
>Short answer:
>Probably not sufficient.
>Long answer (excuse the rambling, I was thinking it through as I wrote it):
>If I'm understanding http://wiki.squeak.org/squeak/2639 correctly, which 
>I may not be, I'd still need to recode the entire graph structure to be 
>designed in terms of id#s (keys) rather than direct references.
>I.e., I'd need to code it in terms of two collections one of which would 
>contain keys that, when interpreted, referenced itself.  This does 
>appear to move the plan into the area of the possible, but at the cost 
>of the advantage that I'd hoped Smalltalk would provide of a large 
>persistent image.  I thought at first when it was talking about 
>transparency that this wouldn't be necessary, but:
>> Magma *can* maintain and quickly "search" large, flat structures, but 
>> the normal Smalltalk collections such as Bag or OrderedCollection are 
>> not suitable for this. The contiguous ByteArray records Magma uses to 
>> store and transport Smalltalk objects would be impractical for a large 
>> Smalltalk Collection
>Seems to mean that the Graph couldn't be stored as something that Magma 
>would recognize as a graph.  So does "Objects are persisted by 
>reachability", though that has other possible interpretations.  But 
>since the graph would contain a very large number of cycles in multiple 
>"dimensions"...  OTOH http://wiki.squeak.org/squeak/2638 on Read 
>Strategies appears to mean that it wouldn't automatically (or rather 
>could be set to not automatically) pull in items that are references 
>within the object being read.
>Again, http://wiki.squeak.org/squeak/5722 , may mean that a class with 
>named variables holding 4 arrays of arrays of length 3 (reference float 
>float) and a few other variables containing things like bools and 
>strings and ints, would be handled without problem. But note that each 
>of those references is to an item of the same type, and it could include 
>cycles.  So I can't decide WHAT it means.  Do I need to recode the 
>references as id#s? Does that even suffice?  (If it does, then it's 
>still a good deal.  But if I must name each entry separately, it's not a 
>good deal at all, as the number of entries in each of the 4 outer level 
>arrays is highly variable, and though I intend to apply an upper limit, 
>only experiment can determine what a reasonable upper limit is.)
>And yet again (if I'm understanding correctly) I'm going to need to 
>violate just about every one of the hints on performance in 
>http://wiki.squeak.org/squeak/2985 .  I'm not sure how much MagmaArray 
>keeps in RAM of things that aren't currently in use.  At one point it 
>sounded like 6 bytes.  This is actually a lot of overhead in this kind 
>of a system.
>Additionally, it appears that Magma doesn't have anyway to detect that a 
>reference is "stale" (i.e., hasn't been referenced in a long time), an 
>use that to decide to roll it out.  It looks as if this needs to be done 
>by the program...but that time-stamp (and a few other items mustn't 
>(well, needn't...but I sure would need to overwrite it when I read it 
>in) itself be included in the items rolled out.  So I need to solve THAT 
>Magma seems to be a good object database, but I can't see that it makes 
>Smalltalk a desirable choice for this project  (It may, this could be a 
>documentation problem...either my not understanding it or the 
>information not being clear.)  If I'm going to recode the references 
>into id#s, then either Ruby or Python make it trivial to turn the object 
>into a string (and to reconstitute it later), and they also make it 
>trivial to leave out any volatile variables. Perhaps Magma does the 
>latter, but this wasn't clear.
>Definitely a part of my problem is that I don't have a clear image of 
>how I would proceed.  The only examples given were small fragments, 
>extremely useful in clarifying points, but insufficient to yield a 
>larger idea of how to use things.  (E.g., I have no idea how to do Ma 
>Object Serialization, but I may need to implement it anyway.)
>Perhaps this is all because I don't really know Smalltalk well...which I 
>assuredly don't.  I was hoping to use Smalltalk to avoid the database 
>problem, trading RAM (including virtual RAM) consumption for capacity, 
>but it looks as if I end up at a database anyway.  And in that case I 
>should use a language that I'm already familiar with.  (I'd really been 
>hoping that the persistent image would be the answer.)  If I do a 
>decomposition I could even get away with using a key-value store.  The 
>only problem is that the id# requires lookup via an indirect reference.  
>(Is it in the Directory?  If not, get it from the database, if not, it's 
>a new value.)  Once I do the recoding of references to id#s, the 
>database portion is "trivial, but annoying". But now I've added 
>thousands of additional indirections/second.  However, IIUC, Magma would 
>be doing that under the hood anyway (as opposed to the image, which 
>would be handled in hardware memory translation), and If I code it, I 
>can put in things like automatically rolling out when it's stale.  (By 
>the way, does "stub" mean remove from memory, or remove from the 
>database?  From context I decided it probably meant remove from memory, 
>but I couldn't decide whether dirty data would be written before being 
>removed from memory, and I couldn't be really sure it wasn't just being 
>deleted.  That needs rephrasing by someone who knows what it's supposed 
>to mean.)
>To me this appears to be, again, not the project that justifies 
>implementation in Smalltalk.  Perhaps if I were already experienced in 
>Smalltalk I wouldn't see things that way, as Magma clearly means that 
>Smalltalk *can* handle doing the project.
>Thank you for your suggestion.
Louis LaBrunda
Keystone Software Corp.
SkypeMe callto://PhotonDemon
mailto:Lou at Keystone-Software.com http://www.Keystone-Software.com

More information about the Beginners mailing list