Hi!

Sorry, this post turned out long. But hopefully interesting anyway.

On 02/13/2011 06:36 PM, Schwab,Wilhelm K wrote:
You cite an example very similar to what Dolphin does, and we could do with 
SIXX.
> Dolphin serializes things not to avoid the image but to allow packaging.
> SIXX could do the same for us.
[SNIP]

> If we had something that could read and rewrite Smalltalk code that is truly independent
> of WB, then class methods would be nice way to store GUI designs.

Bill

Just wanted to chip in here - IMHO there is a loooong history when it comes to how to "save" UIs. We have seen (and in many different programming languages) various ways through the years:

- Build them with code each time we want them
        Pros:   Resilient against framework/library changes
                Very readable and editable
                Easy to "store" in the language (just save as a method)
        Cons:   Very hard to use as a "save format"
                Has too much freedom if we hand edit it

I actually favor the above since I normally dislike UI Designer tools :). But I can of course see the value of a really good UI designer (WB Pro is one of the best I have ever used, and the one in VisualAge was also superb).

- Save them in "dumb" data structures (like VW specs)
Pros: A bit resilient since it relies on a builder, but not as good as code because it is just dumb data
                Similar easy to store in the language
        Cons:   Not readable and editable
        
VW has used this for a long time and it is indeed pretty slick since you just "store" it in a method. That is one very nice characteristic, and if you have good options to dig into the builder after it has read the spec - then having the spec be "non readable/editable" is not that painful. But still, it is a bit of a serialization hack and ... doesn't feel quite right.


- Save them in a more advanced (than an Array) non Smalltalk langauge like XML Pros: Quite resilient against framework/library changes, if grammar is made to be declarative in style
                Easy to use as "save format"
        Cons:   Get's complex and icky
                Not so easy to "store" in language (a String literal?)
                Not so readable and editable

IMHO using XML is "nice" (well...) for inter system and inter language communications/interchange. But realistically, how much interplay can we expect when we are talking about Morphic UIs? AFAIK the rest of the world haven't been able to gather around a single format either. If there indeed was a format that all the Gtk/Qts and whatnots out there used - then by all means. But is there?


- Serialize (in binary or whatever language like XML etc) them as they are in their object form and deserialize to instantiate
        Pros:   Simple as save format, just smack it out
        Cons:   Not resilient against framework/library changes, in fact very 
brittle
                Not readable nor editable
                Not so easy to "store" in langauge (ByteArray? String literal?

Serialization (as in "storing the object model exactly as it is") IMO almost only has drawbacks. It is very brittle when systems change and it is not readable nor editable etc. I just don't like it at all :)



Ok, sooo... not sure if I made the Pros/Cons clear enough to be understood here. Anyway, in my quest earlier to build Deltas and Deltastreams I ended up investigating "formats" and then I created Tirade:

        http://goran.krampe.se/blog/Squeak/Tirade.rdoc
        http://goran.krampe.se/blog/Squeak/Tirade2.rdoc
        http://goran.krampe.se/blog/Squeak/Tirade3.rdoc

(sorry for lack of nice CSS there)

NOTE: Since those articles I have simplified it a bit - I scratched the complicated "stack" logic around figuring out the receiver.

Anyway, Tirade is in short a very long cascade that only allows arguments in literal forms. So basically Tirade doesn't serialize objects - it serializes a *sequence of messages*. And then when we "deserialize it" we replay those messages onto a receiver.

Thus, in syntax it is very Squeakish - it even uses the same number parser etc as the Compiler does. But it is a very restricted subset of Smalltalk which makes it fast and secure.

So, given the Pros/Cons above, let's see how Tirade would fit:

* Easy to read and edit: yes, it looks like Smalltalk, but without a receiver to the left.

* Easy to store in a method: yes, quite simple, the easiest way may be to save it as "Smalltalk" like this:

tiradeOn: recorder
        "Create Tirade by sending messages to a Tirade recorder."
        recorder message1; message2; message3

In that way you can still use senders/implementors etc of the message selectors.

* Easy to store outside of the language: yes, trivial, and fast to write and read

* Very resilient against framework/library changes if we use a declarative style.



regards, Göran

Reply via email to