Squeak
  links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
DeltaStreams
Last updated at 10:56 am UTC on 16 August 2017
Delta streams was a proposal for a replacement of Squeak change sets and the update stream.

2008

Delta streams aims to be a compelling replacement to change sets and the update stream. Delta streams (not yet implemented) are analagous, to the update stream, and deltas are analagous to change sets. Deltas improve on change sets in several different ways:

The main motives for this project:
  1. Much improved ChangeSet functionality, should be able to fully replace them. A nice goal in itself.
  2. Making it easy to move fixes and enhancements to the base image AND to packages between branches and forks of Squeak.
  3. Making it trivial to publish, discover and subscribe to streams of Deltas.
  4. Making it trivial to publish, install and uninstall (revert) Deltas.

Thus it needs:
  1. A clean and fairly standalone implementation that should be easily adoptable by all Squeak forks/dialects. It will initially depend on SystemEditor for applying changes and the SystemChangeNotifier mechanism that was added to Squeak in... 3.7? (not sure)
  2. A smart but not TOO smart way to deal with merging and conflicts.
  3. A good robust distribution mechanism.
  4. Some kind of feedback system, probably added on top.


DeltaStreams release 0.1

Since it is meant to be able to move changes between radically different Squeak versions and forks, DeltaStreams runs in a lot of squeak releases. It is distributed as a .sar file for each supported squeak. It is not available on universes at this time.

Using Delta Streams


Features


Code

The code is currently developed in different Squeak images (3.8, 3.9, 3.10 - we try to keep it working broadly).
Releases are available on SqueakMap as complete installable SAR files.
The main parts in these SAR files are also available separately:

Related work


The following is not yet commented by Göran (will ASAP):
(N.B. the stuff below, expect for some use cases, was added by Andy Tween)

Use cases


Bootstrapping

  1. decide on Delta file format
  2. create a minimal Delta loader
  3. manually create a Delta file containing the rest of the Delta system (system.delta)
  4. use Loader to load the Delta system from system.delta
  5. develop the Delta system, using only Delta files for persistence/merging/loading etc.? Eat your own dog food :)
? does this mean that squeaksource / monticello can't be used ?

Göran: I don't think bootstrapping needs to be so complicated. Currently DeltaStreams consists of a changeset tailored per Squeak version with some small base fixes - and the rest is an MC snapshot (+ SystemEditor). There is no reason to not use existing facilities to load DeltaStreams support into an image.
Andy: ok. I was thinking of how DeltaStreams could be used during development (of DeltaStreams), rather than how the support would finally be distributed once complete.

Delta File Format


Göran: I can easily imaging several formats but don't want to confuse things. Currently file format is the least of our worries in coding this. :) One thing is certain - we will never hardwire a specific file format into the code.
Andy: This ties in with the bootstrapping idea of using DeltaStreams during development of DeltaStreams. If they aren't used for development, and it is done with Monticello and changesets, then you are right, it doesn't need to be decided upon until later.

Method source

Chunk format (don't like. Would like method source to be unescaped)
What about terminating each method source with a marker specified in the method entry's header

e.g.

AddMethod class="Object" selector="xxx:yyy:" category="xxxx" timestamp="0101001" upTo="/n%"
xxx: a yyy: b
       "this is my method"
       ^42
%
AddMethod class="Object" selector="%" category="xxxx" timestamp="0101010" upTo="/n%%"
% anObject
      "this upTo has been chosen to be enough $% chars so that it does not appear anywhere in the method source"
      ^super
         % anObject
%%
AddMethod class="Object" selector="yourself" category="xxxx" timestamp="0101010" upTo="%"
yourself
       "we don't care about the Lf in the upTo terminator in this example"
       ^self%
AddMethod... etc.



Woot Woot