<span class="Apple-style-span" style="font-size: small;">I've been following this discussion and it seems like implementation is way ahead of design. I'm looking at the syntax below and seeing it has no advantage over text pickle format to me. Sure it's a bit more readable, but as it stands, this is really only going to be useful for python-python operations and the existing pickle formats do that fine. Why would we need another one-off markup language? All that you've said so far about Yaml was "I didn't yet made comparison with yaml. I should do that too. Now I can only say that yaml is much complicated notation (IMHO)." In fact, I think a subset of Yaml is all that is necessary for this, just as Json is (now) a subset of Yaml. My suggestion is that Json < Pyon < Yaml is a good goal.</span><div>
<span class="Apple-style-span" style="font-size: small;"><br></span></div><div><span class="Apple-style-span" style="font-size: small;">I agree Yaml is complicated and the docs don't help as much as they could with too much emphasis on syntax and not enough on semantics. However, Yaml has already addressed issues like typing and defining objects to be reused. I'm not a Yaml expert so I may have gotten some of the following wrong, but it should be enough to give a general idea:</span></div>
<span class="Apple-style-span" style="font-size: small;"><br></span><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-size: small;">[int, float, str]<br>
== <br>[!type int, !type float, !type str]<br>or maybe<br>  [!py!type int, !py!type float, !py!type str]<br></span></blockquote><div><div><div><span class="Apple-style-span" style="font-size: small;"><br></span></div><div>
<span class="Apple-style-span" style="font-size: small;">and</span></div><div><span class="Apple-style-span" style="font-size: small;"><br></span></div></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">_p__0=(1,2)</span></span><span class="Apple-style-span" style="font-size: small;"><br></span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">_p__1=[1,2]</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">[_p__0,_p__1,_p__0,_p__1] </span></span><span class="Apple-style-span" style="font-size: small;"><br>
<br>==<br><br>[&_p__0 !tuple [1,2],  &_p__1 [1,2], *_p__0, *_p__1]<br><br>or<br><br>- &_p__0 (1,2)<br>- &_p__1 [1,2]<br>- *_p__0<br>- *_p__1<br></span></blockquote><div><div><div><div><span class="Apple-style-span" style="font-size: small;">  </span></div>
<div><span class="Apple-style-span" style="font-size: small;">and</span></div><div><span class="Apple-style-span" style="font-size: small;"><br></span></div></div></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">lst=['foo',lst]</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">_p__1=C(lst=lst,d=d,parent=_p_</span><span class="Apple-style-span" style="font-size: small;">_1)</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">d={'a':'bar','c':d,'b':lst,'d'</span><span class="Apple-style-span" style="font-size: small;">:_p__1}</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">[lst,d,_p__1]</span></span><span class="Apple-style-span" style="font-size: small;"><br><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">==?</span></span><span class="Apple-style-span" style="font-size: small;"><br><br></span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">[&lst ['foo', *lst]], &d{'a','bar','c':*d,'b':*lst,'d':&_p__1 !!C {lst: *lst, d: *d, parent: *_p__1}}]</span></span><span class="Apple-style-span" style="font-size: small;"><br>
<br></span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">or in a multi-line format:</span></span><span class="Apple-style-span" style="font-size: small;"><br>
<br></span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">- &lst ['foo, *lst]</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">- &d</span></span><span class="Apple-style-span" style="font-size: small;"><br></span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">    'a': 'bar'</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">    'c': *d</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">    'b': *lst</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">    'd': &_p__1 !!C</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">        lst: *lst</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">        d: *d</span></span><span class="Apple-style-span" style="font-size: small;"><br></span><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;">        parent: *_p__1</span></span><span class="Apple-style-span" style="font-size: small;"><br>
</span></blockquote><div><div><div><div><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;"><br></span></span></div><div><span class="Apple-style-span" style="font-size: small;">The only thing I see missing from Yaml is forward references which might be nice for producing more readable output in some cases but I don't think is technically necessary.<br>
</span></div><div><span class="Apple-style-span" style="font-size: small;"><br></span></div><div>--- Bruce</div><div><span class="Apple-style-span" style="border-collapse: collapse; "><span class="Apple-style-span" style="font-size: small;"><br>
</span></span></div><div><span class="Apple-style-span" style="font-size: small;"><br></span><div><div><br><div class="gmail_quote">On Wed, Nov 5, 2008 at 2:57 AM, Arnaud Delobelle <span dir="ltr"><<a href="mailto:arnodel@googlemail.com">arnodel@googlemail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="Ih2E3d">On 05/11/2008, Zaur Shibzoukhov <<a href="mailto:szport@gmail.com">szport@gmail.com</a>> wrote:<br>

> I have added support for naming objects in dumps,  cross-references<br>
> and declarative support in dumps/loads too.<br>
<br>
</div>This is great stuff!<br>
<div class="Ih2E3d"><br>
> I can't now commit changes. This night I will commit changes to<br>
> sources and update project pages.<br>
><br>
> Here are examples of how it works now:<br>
</div>[...]<br>
<div class="Ih2E3d">> >>> pyon.dumps([lst,d,c], fast = False, lst=lst, d=d)<br>
<br>
</div>How about changing the syntax slightly so that the given names are all<br>
in a dictionary:<br>
<br>
>>> pyon.dumps([lst, d, c], fast=False, given={'lst':lst, 'd':d})<br>
(or one could use given=dict(lst=lst, d=d))<br>
<br>
This would have two advantages:<br>
<br>
* eliminate the rist of keyword argument name collision<br>
* one could put all the 'given' objects in a dictionary and then<br>
'pickle' expressions as needed using this method.  Later pyon.loads<br>
could be passed this dictionary so that the objects can be unpickled<br>
correctly.<br>
<br>
I think this idea is good as it would make it possible to pickle some<br>
objects that contain unpicklable objects just by declaring them as<br>
'given'.</blockquote><div><br></div><div><snip> </div></div></div></div></div></div></div></div>