Modules: What to do next
Last updated at 2:38 pm UTC on 16 January 2006
I'm reviving Dan I's old "next steps" list as the basis for a to-do list after the modules went into the update stream. (hg 2002-02-06)
Feel free to contribute to this page. Note that nothing will get done unless somebody actually does it. You can't place "orders" here and expect them to be magically completed. hg
Allow the use of repositories to distribute and share modules over the net
Released. hg 2002-02-14
Better UI support
This is needed to make simple hacking simple. We need to have/create a default module where things get collected. Note that this really needs to collect changes into DeltaModules (discontinued).
- This needs better hookup of DeltaModules, so they collect changes like change sets now. In fact the easiest solution may be to intercept the changes mechanism.
Use the system to outload a couple of big packages
... and confirm that everything works if you bring them in again.
- VM Construction
- Network apps (Celeste, Scamper, Chat and HTML)
- Wonderland and 3D
This would be a big step toward effective shrinking.
This works for VMConstruction and Baloon3D/Alice/Wonderlands. See Unloading modules.
Getting the Network apps (and any other part of the image) to unload is "simply" (not so!) to refactor them to untangle bad dependencies, that's what I did for VMC and B3D. hg
Use the system to inload a couple of big packages
- Refactoring Browser
- This one is a _big_ task. They spent ages on getting the RB to work with the new namespaces in VisualWorks. The load/unload part is not the worst part. hg
- I've done this, but only by taking the code from Ned's BSS project, which makes it a bit ugly. hg
- Thinglab and/or Cassowary.
See Class Extensions and related pages, plus Modules (Storing and installing modules) for more info.
Steps to compact files and fast loading with image segments.
- The first thing needed is to make modules no longer rely on the image's sources and changes files, but use its own. You can then load compiled classes and CompiledMethods e.g. from and image segment, and directly use a downloaded module sources file, without needing to write the loaded definitions to a changes file when loading. (I have made a proof-of-concept hack that does this. Ask me for it. hg)
- To store a module (or many) as an image segment, one must convert objects point to things that shouldn't be outloaded, i.e. things in other projects.
- Actually you can use an ISeg as soon as you have the code properly pointing to sources on disk, so one could use ISegs to quicly unload parts of the distributed image without the above step.
- Technique for eliminating outpointers: You have to make a veryDeepCopy of the module, and in the copy go through method literals and replace refs to globals defined in other modules with ModularAssociationDiskProxy (etc.) objects. Do something similar to classes (e.g. superclass instvar, subclasses instvar). You have to nil out the contents of class variables too.
- E.g. method literals hold Associations of varibleNameSymbol->theExternalValue; you replace the association with a disk proxy.
- Then when you bring things back in, the proxy should take the names of the external globals and have the module use its normal name lookup code to find the definition for that name. Then give the resulting Association as the replacement for the proxy. NB: it is important to use the new Association not just the new value.
- Then do the same for superclasses etc.
- Dan has wild ideas about reading sources from files that remain compressed.
- Here are ImageSegment and Göran Hultgren's Introduction to ImageSegments
Arrive at a preliminary design for projects as components
In other words,
Here is a simple benchmark:
- Start from a URL
- Determine prerequisites
- Load them if necessary
- Load the content
- Be able to run it (duh)
- Be able to unload it and be "clean" afterward.
My KidsRefrigeratorMagnets which requires Ned's RMs, which requires Ned's Connectors. Delivered in a world and ready to play. di
As far as modules go, I have already done this part, as demoed at OOPSLA. hg
Here is a complicated one:
Drive a Car in a world and ready to play, and...
Will automatically bring in all of EToys if not there.
Not really harder in the modules part–the hard part is getting the eToy classes to unload in a meaningful way.
So the part that remains is hooking this up to projects. hg