<br><br><div><span class="gmail_quote">On 12/20/06, <b class="gmail_sendername">Travis Oliphant</b> &lt;<a href="mailto:oliphant@ee.byu.edu">oliphant@ee.byu.edu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; My question is then: is there any plan to change this ? If not, is<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; this<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; for some reasons I don&#39;t see, or is this just because of lack of<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; manpower ?<br>&gt;<br>&gt;<br>&gt; I raised the possibility of breaking up the files before and Travis
<br>&gt; was agreeable to the idea. It is still in the back of my mind but I<br>&gt; haven&#39;t got around to doing anything about it. Maybe we should put<br>&gt; together a step by step approach, agree on some file names for the new
<br>&gt; files, fix the build so it loads in the new stub files in the correct<br>&gt; order, and then start moving stuff. My own original desire was to<br>&gt; break out the keyword parsers into a separate file but I think Travis
<br>&gt; had different priorities.<br><br>The problem with separate files is (and has always been) the NumPy<br>C-API.&nbsp;&nbsp;I tried to use separate files to some extent (and then use<br>#include to make it all one big file).&nbsp;&nbsp;The C-API is exposed by filling
<br>in a table of function pointers.&nbsp;&nbsp;You will notice that when<br>arrayobject.h is included for an extension module, all of the C-API is<br>defined to pull a particular function pointer out of a table that is<br>stored in a Python CObject in the multiarray module extension itself.
<br>Basically, NumPy is following the standard Python advice (as Numeric and<br>Numarray did) about how to expose a C-API, but it&#39;s just gotten a bit big.<br><br>Solutions to that problem are always welcome.</blockquote>
<div><br>I&#39;ve been thinking about that a bit. One solution is to have a small python program that takes all the pieces and writes one big build file, I think something like that happens now. Another might be to use includes in a base file; there is nothing sacred about not including .c files or not putting code in .h files, it is just a convention, we could even chose another extension.&nbsp; I also wonder if we couldn&#39;t just link in object files. The table of function pointers just needs some addresses and, while the python convention of hiding all the function names by using static functions is nice, it is probably not required. Maybe we could use ctypes in some way?
<br><br>I am not pushing any of these alternatives at the moment, just putting them down. Maybe there are others?<br><br>Chuck<br></div><br></div><br>