On Fri, Oct 19, 2012 at 2:42 PM, Dale Henrichs <dhenrich@vmware.com> wrote:
Eliot,

STON (and JSON IIRC) allows either $" or $' as string literal delimiters, so I am not holding onto the $" as a key readability component.

For me:

� { 'category' : 'Topez-Client-Core'}

is perfectly readable and could be accomplished with the JSON reader/writer....

agreed, but you're not answering my question. �Is Igor's any the less readable?

Dale
----- Original Message -----
| Sent: Friday, October 19, 2012 2:07:28 PM
| Subject: Re: [Pharo-project] Yet another Notation format: Object literals
|
| HI Dale, Hi Igor,
|
|
| On Fri, Oct 19, 2012 at 9:33 AM, Dale Henrichs < dhenrich@vmware.com
| > wrote:
|
|
| Igor,
|
| "you can do anything you like" ... you mean like choosing to use STON
| and not invent my own notation format?
|
| STON is a perfectly good notation format for Smalltalk...
|
| Methinks that with your recent suggestions are no longer using
| literal Smalltalk syntax which is fine, if we are not restricted to
| literal Smalltalk syntax, then the following should be a valid
| format:
|
| {
| "category" : "Topez-Client-Core",
| "classinstvars" : [
| ],
| "classvars" : [
| ],
| "commentStamp" : "",
| "instvars" : [
| "project",
| "package",
| "currentClass",
| "classOrInstance",
| "category",
| "selector",
| "history",
| "currentWindowId",
| "windows",
| "namedWindows" ],
| "name" : "TZTopezStatus",
| "pools" : [
| ],
| "super" : "Object",
| "type" : "normal" }
|
| which brings us back to were we started.
|
|
|
| Sorry to come late to the party and sorry to point out the obvious
| but the above is fine in Igor's scheme if one gives up double quotes
| (since these are comment characters). So the above, with single
| quotes replacing the double quotes, and #(...) replacing {...} is a
| valid Smalltalk literal. Is the latter any the less readable? I
| don't think so. Do you, Dale? (and sorry if the conversation has
| already moved on).
|
|
|
|
| Smalltalk does not have a literal syntax for dictionaries. While
| fabricating dictionaries from literal arrays is possible, the
| results are not very readable ... unless you start taking liberties
| with Smalltalk syntax...
|
| If you are no longer restricting yourself to Smalltalk syntax, then
| what's wrong with the STON notation above?
|
|
| Dale
|
| ----- Original Message -----
| | From: "Igor Stasenko" < siguctua@gmail.com >
|
|
| | To: Pharo-project@lists.gforge.inria.fr
| | Sent: Friday, October 19, 2012 9:10:26 AM
| | Subject: Re: [Pharo-project] Yet another Notation format: Object
| | literals
| |
| | On 19 October 2012 16:55, Dale Henrichs < dhenrich@vmware.com >
| | wrote:
| | > Igor,
| | >
| | > I'm afraid that your notation is not very friendly to humans ...
| | > a
| | > computer can keep track of the key value pairs in the literal
| | > dictionary, but a human will fail very quickly...
| | >
| | > The appeal of JSON (and STON) is that the output is readable by
| | > mere mortals:
| | >
| | > (JavaScript Object Notation) is a lightweight
| | > data-interchange format. It is easy for humans to
| | > read and write.
| | >
| | > What we're missing from Smalltalk is a literal dictionary or
| | > literal map syntax ... without that I'm afraid that for human
| | > friendly, lightweight notations we have to step away from the
| | > Smalltalk syntax - STON does this very nicely BTW...
| |
| | no problem, Dale.
| | What symbol you want to have to separate keys from values?
| | is '->' ok?
| |
| | Dictionary>>asObjectLiteral
| |
| | "convert a receiver into an object literal "
| |
| | ^ Array streamContents: [:stream |
| | stream nextPut: self class name.
| | self keysAndValuesDo: [:key :value |
| | stream
| | nextPut: key asObjectLiteral;
| | nextPut: #->;
| | nextPut: value asObjectLiteral ] ]
| |
| | (Dictionary newFromPairs: #( a b c d)) asObjectLiteral
| |
| | #(#Dictionary
| | #a #'->' #b
| | #c #'->' #d)
| |
| | which if you pretty-print will look like:
| |
| | #(
| | Dictionary
| | a -> b
| | c -> d
| | )
| |
| | is it better?
| | or you prefer this one:
| |
| | #(
| | Dictionary
| | (a -> b)
| | (c -> d)
| | )
| |
| | you can do anything you like, by implementing the conversion
| | methods
| | in a way you like :)
| |
| | >
| | > Dale
| | >
| | > ----- Original Message -----
| | > | From: "Igor Stasenko" < siguctua@gmail.com >
| | > | To: "Pharo Development" < Pharo-project@lists.gforge.inria.fr >
| | > | Sent: Friday, October 19, 2012 4:09:22 AM
| | > | Subject: [Pharo-project] Yet another Notation format: Object
| | > | literals
| | > |
| | > | Hi,
| | > | as i promised before, here the simple smalltalk-based literal
| | > | format.
| | > | It based on smalltalk syntax, and so, unlike JSON, it doesn't
| | > | needs
| | > | to
| | > | have separate parser (a normal smalltalk parser used for that).
| | > |
| | > | The idea is quite simple:
| | > | you can tell any object to represent itself as an 'object
| | > | literal' ,
| | > | for example:
| | > |
| | > | (1@3) asObjectLiteral
| | > | --> #(#Point 1 3)
| | > |
| | > | { 1@2. 3@4. true. false . nil } asObjectLiteral
| | > |
| | > | -> #(#Array #(#Point 1 2) #(#Point 3 4) true false nil)
| | > |
| | > | (Dictionary newFromPairs: { 1->#(1 2 3) . 'foo' -> 'bar' })
| | > | asObjectLiteral
| | > | ->
| | > | #(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar')
| | > |
| | > | Next thing, you can 'pretty-print' it (kinda):
| | > |
| | > | #(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar') printObjectLiteral
| | > |
| | > | '#(#Dictionary
| | > | 1
| | > | (#Array 1 2 3)
| | > | ''foo'' ''bar'')'
| | > |
| | > |
| | > | and sure thing, you can do reverse conversion:
| | > |
| | > | '#(#Dictionary
| | > | 1
| | > | (#Array 1 2 3)
| | > | ''foo'' ''bar'')' parseAsObjectLiteral
| | > |
| | > | a Dictionary('foo'->'bar' 1->#(1 2 3) )
| | > |
| | > | Initially, i thought that it could be generic (by implementing
| | > | default
| | > | Object>>#asObjectLiteral),
| | > | but then after discussing it with others, we decided to leave
| | > |
| | > | Object>>#asObjectLiteral to be a subclass responsibility.
| | > | So, potentially the format allows to represent any object(s) as
| | > | literals, except from circular referencing objects, of course.
| | > |
| | > | The implementation is fairly simple, as you may guess and
| | > | contains no
| | > | new classes, but just extension methods here and there.
| | > |
| | > | Take it with grain and salt, since it is just a small proof of
| | > | concept. (And if doing it for real it may need some changes
| | > | etc).
| | > | Since i am far from areas right now, where it can be used, i
| | > | don't
| | > | want to pursue it further or advocate if this is the right way
| | > | to
| | > | do
| | > | things.
| | > | Neither i having a public repository for this project..
| | > |
| | > | So, if there anyone who willing to pick it up and pursue the
| | > | idea
| | > | further, please feel free to do so and make a public repository
| | > | for
| | > | project.
| | > |
| | > |
| | > | --
| | > | Best regards,
| | > | Igor Stasenko.
| | > |
| | >
| |
| |
| |
| | --
| | Best regards,
| | Igor Stasenko.
| |
| |
|
|
|
|
|
| --
| best,
| Eliot
|




--
best,
Eliot