<div><span class="gmail_quote">On 10/17/07, <b class="gmail_sendername">Joe Mason</b> &lt;<a href="mailto:joe@notcharles.ca">joe@notcharles.ca</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">On 10/17/07, Keith J. Farmer &lt;<a href="mailto:kfarmer@thuban.org">kfarmer@thuban.org</a>&gt; wrote:<br>
&gt; Forgive my non-C-ness (it&#39;s been a long time since I wrote a native module<br>&gt; for Python), but aren&#39;t you now buying into a major re-implementation of all<br>&gt; the native Python standard library into C#?
<br><br>Couldn&#39;t the C/C# API just use IronPython objects and methods to<br>&quot;implement&quot; the Python standard library?</blockquote>
<div>&nbsp;</div>
<div>Yes, that would be the idea.</div>
<div>&nbsp;</div>
<div>I think it&#39;s best when thinking about the architecture to have a specific example to refer to.&nbsp; With that in mind, I&#39;m going to repeat some code I wrote earlier in the thread (with a few modifications).</div>

<div>&nbsp;</div>
<div>
<div><font face="courier new,monospace">PyObject * ReverseSequence(PyObject * self, PyObject * args)</font></div>
<div><font face="courier new,monospace">{</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; PyObject * columns;</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; if (!PyArg_ParseTuple(args, &quot;O&quot;, &amp;columns))</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; {</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; }</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; </font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; if (!PySequence_Check(columns))</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; {</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PyErr_SetString(PyExc_ValueError, &quot;must be a sequence&quot;);</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; }</font></div>
<div><font face="courier new,monospace"></font>&nbsp;</div>
<div><font face="Courier New">&nbsp;&nbsp;&nbsp; int length = PySequence_Length(columns);</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; PyObject * result = PyTuple_New(length);</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; <font face="Courier New">length</font>; i++)</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; {</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PyObject * value = PySequence_GetItem(sequence, i);</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;Don&#39;t remember if I need to INCREF value</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PySequence_SetItem(result, <font face="Courier New">length - </font>i - 1, value);</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; }</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; </font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; return result;<br>}</font></div>
<div>&nbsp;</div>
<div>Obviously, this isn&#39;t a &quot;real-world&quot; example, but it&nbsp;does show a few requirements for the compatibility layer.</div>
<div>1) The code expects a sequence.&nbsp; What kind of data should we be allowed to pass to it from IronPython?</div>
<div>2) The code returns a &quot;tuple&quot;.&nbsp; How will this tuple be translated into a CLR object for consumption by IronPython?</div>
<div>&nbsp;</div></div>
<div>--</div>
<div>Curt Hagenlocher</div>
<div><a href="mailto:curt@hagenlocher.org">curt@hagenlocher.org</a></div></div>