Fast bytecode loader (was Re: [squeak-dev] Re: Squeak vision)

Bert Freudenberg bert at freudenbergs.de
Thu Jul 16 11:40:12 UTC 2009


On 14.07.2009, at 03:01, osp at aloha.com wrote:

> Maybe it is just me, but "a fast bytecode package loader, without  
> the need
> to compile Smalltalk code" combined with "such feature could make life
> easier to third party Etoys developer and eventually attract more of  
> them
> to Etoys" sounds like an endorsement of closed-source commercial  
> EToys.

No, that's is a severe misunderstanding you construct here.

> If
> commercial success is not the attraction, what is? Faster initial load
> time? Reduced file transfer size? Perhaps I assumed too much.


Yes, both of these. The scenario we care most about is the one million  
kids using XO laptops. These machines are under-powered compared to  
recent PCs, and have rather little main memory. It's infeasible to  
have one image with all the extensions to Etoys, because the whole  
image is loaded into RAM. It would be very nice if these add-ons could  
be delivered as separate packages and loaded on demand.

That's what the current Dr Geo II package is doing. But it is slow,  
because all the code is compiled to byte code when loading the  
package. The Squeak byte code compiler has not exactly been optimized  
for speed, because in usual development you only compile a method at a  
time. In any case, the *result* of loading a package that includes  
both source code and byte code would be exactly the same as compiling  
the source code, but way faster.

This could also be used to speed up package loading in general. In  
fact, this would make the concept of "libraries" feasible in Squeak -  
packages loaded on demand. Think about pre-compiled lisp modules, or  
the .pyc files generated from .py Python files for speed. Note I'm not  
advocating this for Squeak but it would make it technically feasible.

It's just not exactly trivial to do in a robust way. At the very  
least, all global references in the compiled methods will have to be  
updated. This includes classes which have to be referenced, Symbols  
need to get interned and unified. The source could be appended to the  
changes file and source pointers incremented, or the source could  
remain in separate files but we'd need a new source code scheme for  
that.

I think this all would be immensely useful in the long run, but truth  
is we have been getting by without for so long that there just does  
not seem to be anybody both motivated and skilled enough to do it.

- Bert -





More information about the Squeak-dev mailing list