<br><br><div class="gmail_quote">On Thu, Mar 24, 2011 at 12:02 PM, Igor Stasenko <span dir="ltr">&lt;<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On 24 March 2011 19:43, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2011/3/24 Levente Uzonyi &lt;<a href="mailto:leves@elte.hu">leves@elte.hu</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, 24 Mar 2011, Eliot Miranda wrote:<br>
&gt;&gt;<br>
&gt;&gt; (pine can&#39;t quote your mail, sorry)<br>
&gt;<br>
&gt; :)  No problem.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; &quot;I have some image-level changes that I&#39;ll try and commit asap, or at least give you as some inbox packages<br>
&gt;&gt; - parsing FFI method annotations to discover the #threaded keyword that sets the &quot;go ahead and thread this call&quot; bit in an FFI spec<br>
&gt;&gt; - an additional inst var in ExternalFunction (IIRC) that allows the VM to record how much stack space to reserve when marshalling an FFI call<br>
&gt;&gt; - the new callback marshalling machinery that provides platform-independence<br>
&gt;&gt;<br>
&gt;&gt; I just need to fid the time to push the code to you.<br>
&gt;&gt;<br>
&gt;&gt; Now on testing I use<br>
&gt;&gt; a) an image with a &quot;listener&quot; that reads and writes from/to stdin/out while allowing one to interact with the image<br>
&gt;&gt; b) a native Mac OS file dialog that uses a threaded call to invoke without blocking the image and threaded callbacks to determine which files to<br>
&gt;&gt; show (filter callback) and what the accept action is.  I&#39;ve of course lost my workspace containing this and so have to ferret out the doits from my<br>
&gt;&gt; changes file (I feel such a fool!).  Alas this will need work as it used an extension to a Teleplace native file dialog plugin.  But posting it to<br>
&gt;&gt; FFI will be good; it will test the FFI further.<br>
&gt;&gt; c) a threaded version of the ODBC connect that hasn&#39;t really been tested<br>
&gt;&gt;<br>
&gt;&gt; etting you and others to start pounding on these would be fantastic.  Just a matter of finding time.  f you&#39;re happy for me to push inbox packages,<br>
&gt;&gt; changesets, workspace contents then I can provide something quickly.  If you want me to commit canges that I&#39;ve made sure are backward compatible<br>
&gt;&gt; and don&#39;t break trunk I&#39;m going ot be much slower.<br>
&gt;&gt;<br>
&gt;&gt; best regards (albeit feeling a little frazzled :-) ),<br>
&gt;&gt; Eliot&quot;<br>
&gt;&gt;<br>
&gt;&gt; Isn&#39;t it the best time to migrate the syntax of FFI calls to Pragmas? I know it takes some time to implement the pragma support, but IIRC Lukas did that a few years ago, so dusting it off and adding support for threaded calls (which I didn&#39;t see yet) shouldn&#39;t be that hard.<br>

&gt;<br>
</div>+1000.<br>
<div class="im"><br>
&gt; SPunds good.  Got any URLs?  Lukas, got any code?<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Both formats could be supported for a while, then we could leave the current format behind and simplify the parsers/compilers, etc.<br>
&gt;<br>
</div>+1<br>
<div class="im"><br>
&gt; Indeed.  In fact, nothing is set in stone here.  I desperately want an accurate C signature, not the quick hack we have now (a good thing we have a quick hack, but its a long way short of copy/pasting C into the pragma).  The interpreted marshalling scheme Andreas did (ffi specs etc) can serve for the moment.  The main thing before getting rid of that is a design for e.g. a NativeBoost based marshalling code generator that is cross-platform, cross-ABI and works with the interpreted VMs.  I think this is therefore a good way off, and there are people like Esteban who need to get going now, so we can&#39;t let the perfect be the enemy of the good and need to provide something functional asap, and that may mean living with the current ffi annotation for a few months.<br>

<br>
</div>In NativeBoost i made a separate class for parsing a C function<br>
declaration. It supports two forms of declaration:<br>
 - named function, i.e.<br>
   int foo (int bar, float zork)<br>
and anonymous one:<br>
  int (int bar, float zork)<br>
<br>
as input, parser takes a literal array.<br>
<br>
So its quite easy to integrate it into compiler/pragma parser, we only<br>
need to find out what format will work for us.<br>
<br>
so, it could be something like:<br>
<br>
&lt;cdecl: #( int foo (int bar , float baz )) module: #myModule&gt;<br>
<br>
or:<br>
&lt;ffi: #( cdecl int foo ... ) module: ... &gt;<br></blockquote><div><br></div><div>This is such a fascinating hack.  e.g.</div><div><br></div><div>#(int (*compar)(const void *, const void *))</div><div>    #(#int #(#* #compar) #(#const #void #*, #const #void #*))</div>
<div><br></div><div>#(int (struct { field : 8; fence : 8; gate: 16; } arg))</div><div>    #(#int #(#struct #&#39;{&#39; #field #&#39;:&#39; 8 #&#39;;&#39; #fence #&#39;:&#39; 8 #&#39;;&#39; #gate: 16 #&#39;;&#39; #&#39;}&#39; #arg))</div>
<div><br></div><div>Can anyone prove that Igor&#39;s approach works for all C signatures?  What about other languages?</div><div><br></div><div>I find this is like really dirty sex, repellent and irresistible at one and the same time.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
The class for parsing function prototype can be found in SqS/NativeBoost<br>
in class NBFnSpecParser<br>
and tests are in:<br>
NBFnSpecParserTest in NativeBoost-Test package.<br>
(some of them are NB-specific) but its easy to rip out extra functionality :)<br>
<br>
Also, there is a wiki page explaining this format:<br>
<a href="http://code.google.com/p/nativeboost/wiki/NBFnSpecParser" target="_blank">http://code.google.com/p/nativeboost/wiki/NBFnSpecParser</a><br>
<br>
So, if we agree with plan, i could port this class and adopt it for<br>
compiler (and yes , by taking Lukas code as well)<br>
<font color="#888888"><br>
--<br>
Best regards,<br>
Igor Stasenko AKA sig.<br>
</font></blockquote></div><br>