From: Clark C . E. <cc...@cl...> - 2001-12-16 14:35:02
|
| | OK. Stop. I am troubled by our serialization of objects. | | In Python and Java, everything is an object. Right? As I recall, in Python and Java, a variable is either a type or a class but not both. | | In Perl, an object is any data structure that is "blessed". That simply | | means that a string is attached to it. The string can be thought of as a | | class name. Right. It is both a type and a class. How about the following rule: 1. If the type is a hashtable, then only the class name is used ("bless string") 2. For all other types that are blessed, a composite structure is used, where the outer structure is a mapping having the blessed string for a class, and the inner structure is typed appropriately. Thus, an integer value that is blessed "hi" would look like... value: !perl|hi =: 23 In this way, both the type and the class name are preserved. | | perl -MYAML -e 'print Store bless [], "Foo"' | | | | either won't work or is indistinguishable from: | | | | perl -MYAML -e 'print Store bless {}, "Foo"' If you used the above strategy... first: !perl|Foo =: [] second: !perl|Foo =: {} Now, since we've decided to allow for collapsing of mappings, I think these could be re-written as... if this re-write doesn't work; perhaps this is a big enough use case to allow for it. first: !perl|Foo =: [] second: !perl|Foo =: {} Does this do it for you? I'd rather not introduce a new construct, beacuse then it won't match Java/Python, etc. -- but then again, we are going to face some inter-language problems, no? Best, Clark P.S. I guess the short-hand is useful for stuff like pointers as well... hard-reference: &001 !ptr =: *001 |