Thank you Michael for your 2c's :)
The format you suggested is so easy to translate into the XML-format that I had in mind, just by supplying an appropriate self (calls for a traits implementation ;-). Even the text body with its indentations and whitespace is taken care of.
Of course the other direction (XML to your 2c's) is a bit more complicated but doesn't look undoable.
Thanks again, will keep in mind you have a library for such things :)
/Klaus
On Thu, 23 Aug 2007 15:30:06 +0200, Michael wrote:
Klaus D. Witzel wrote:
Hi Göran,
I refer to your proposed Delta File Format, with your remarks Human readable? encoding , (utf8? BOM or no BOM?) (put encoding in header?) and the Method Source preamble.
Can I suggest to consider a small XML-parseable format, which is so flat that it is easy to parse by just the two methods #upTo: and #scanTokens: (perhaps assisted by #replaceAll: $" with: $' and #utf8ToIso).
This way Deltas could perfectly be used in other markedup docs, for example with xhtml. Also transport (http+friends) and transfer encoding can be handled by existing (hope so :) protocols. It would look like
VisualWorks has an XML file out format that is the default. It has brought the product no discernable advantage except that it is aware of packages, properties etc that were never added to the standard bang fileout format (which was an oversight by someone at some point in the past).
At one point there was some fevered excitement over the idea of presenting smalltalk xml fileouts using XSLT to make XHTML.. but at the end of the day, the outcome was hardly spectacular - you could generate something far more interesting directly from the image and make it interactive with seaside, for example.
As to human readable - well.. let's just say XML leaves a lot to be desired there :) I'd much rather see pure message sends going on here, eg:
self encoding: #utf8. self class: 'SuperDeltaObject' superclass: 'Object' do: [ self instanceVariables: #(a b c). self comment: 'uhm, what class comment ;-)'. self method: 'with:do:' category: '--all--' timestamp: '8/23/2004 14:41' author: 'st' body: [ ^this perform: that ]. self classMethod: 'initialize' category: 'class initialization' timestamp: '8/23/2004 14:42' author: 'st' body: [ ]. ]
I'm sure there would be plenty of debate on the actual methods used to build things, mode versus scope and things like that.. all worthwhile. But the beauty of it is that it doesn't introduce a non-smalltalk syntax such as the bangs or xml.
Just my 2c. I've got a library in VW that does most of this. I'm sure the technique could be ported fairly readily.
Michael
<?xml version="1.0" encoding="UTF-8"?><...
st:xmlns="http://www.squeak.org/2007/deltaFileFormat%22%3E <st:class name="SuperDeltaObject" superclass="Object" dialect="Squeak"> <st:classcomment /> <!--uhm, what class comment ;-) --> <st:method selector="with:do:" category="--all--" timestamp="8/23/2004 14:41" author="st"> with: this do: that ^ this perform: that </st:method> <st:metaclass instvars=""> <st:method selector="initialize" category="class initialization" timestamp="8/23/2004 14:42" author="st"> initialize </st:method> </st:metaclass> </st:class></...>
All the not explicitly mentioned attributes can have an intuitive default (like format="fixed" and instvars="", etc) and complex attributes (like oldinstvarorder="c b a") can be ignored by simple readers.
It looks a bit wordy but, what do you think?
/Klaus
On Tue, 21 Aug 2007 03:01:45 +0200, goran@krampe.se wrote:
Hi all!
Ok, managed to get some more code written tonight - but I am still on a low level here - matching up with ChangeSet etc. But if anyone wants to join in:
See details here: http://wiki.squeak.org/squeak/6001
The first goal is to make DSDelta work as a "true log" capturing all changes in full detail.
One question for you gurus out there - do we care about changing the ORDER of say instvars?
regards, Göran