Hello,<br><br>Do you have a mode that will not use the proxy-weaver based inheritance?&nbsp; I&#39;m debating adding one.&nbsp; I realize it will make the generated proxies pretty large, but I&#39;m wondering how much larger it would make the compiled binaries.&nbsp; If&nbsp; I had to guess, I&#39;d think maybe 2x or 3x larger, which might be a small price to pay to not have to rely on (as rodrigo mention) a Mono CLR bug.<br>
<br>Rodrigo:<br>Are you saying that regardless of which method Eugeny uses, it will produce largely the same IL?&nbsp; The idea here is that there NSWindow is a struct that takes 70% of it&#39;s methods from NSControl (and its base classes). In fact, a method from NSObject or NSResponder (which sit at the bottom of the Objective-C inheritance chains) would get duplicated across the entire inheritance heirarchy (potentially hundreds or a few thousand times).&nbsp; I&#39;m not 100% sure here.&nbsp; Are you saying regardless of which solution is used, the generated dlls should be roughly the same size?<br>
<br>I just want to make sure that I&#39;m understanding everything.<br><br>Thanks!<br>Martin<br><br><div class="gmail_quote">On Mon, Feb 9, 2009 at 6:39 AM, Eugeny Grishul <span dir="ltr">&lt;<a href="mailto:eugeny.grishul@gmail.com">eugeny.grishul@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Hi,<br>
Thanks for deep code review =)<br>
<br>
Weaver pros and cons:<br>
1) without inheritance proxy assemblies will be about 60M due to duplicated<br>
methods<br>
2) it will be used for Objective-C property accessors for same goal<br>
<br>
Cons:<br>
1) code produced by weaver is not verifiable. By spec CLI itself does not<br>
allow for value type inheritance:<br>
<br>
8.9.7.<br>
...<br>
3. A value type does not inherit; rather the base type specified in the<br>
class definition defines the<br>
base type of the boxed type.<br>
4. The base type of a boxed type shall not have any fields.<br>
<br>
8.9.10.<br>
In their unboxed form value types do not inherit from any type. Boxed value<br>
types shall inherit directly from<br>
System.ValueType unless they are enumerations, in which case, they shall<br>
inherit from System.Enum. Boxed<br>
value types shall be sealed.<br>
<br>
My approach is a violation of the spec. If you run &quot;peverify&quot; on the<br>
assembly with one value type inheriting from another, it will tell you as<br>
much =) If mono won&#39;t support value-type inheritace in future it will be bug<br>
in ther JIT coz CLR implementation actually ALLOWS it.<br>
2) Current Mono VES implementation have a bug related ot value type<br>
inheritance and to workaround it don&#39;t allow objc proxies to be boxed.<br>
Following code will crash JIT:<br>
<br>
public void ButtonPressed( NSButton sender )<br>
{<br>
 &nbsp; &nbsp;Console.WriteLine( &quot;Pressed {0}&quot;, sender );<br>
...<br>
...<br>
<br>
And workaround:<br>
public void ButtonPressed( NSButton sender )<br>
{<br>
 &nbsp; &nbsp;Console.WriteLine( &quot;Pressed {0}&quot;, sender.ToString() );<br>
...<br>
...<br>
<br>
About NObjectiveAST - it works like NRefactory and able to parse and save<br>
AST tree to file. But if you want to extend interoping abilities of<br>
resulting code then you should modify HeaderAnalyzer (<br>
<a href="http://code.google.com/p/nobjective/source/browse/trunk/ProxyGenerator/HeaderAnalyzer.cs" target="_blank">http://code.google.com/p/nobjective/source/browse/trunk/ProxyGenerator/HeaderAnalyzer.cs</a><br>
) which is not part of NObjectiveAST. The goal of mine bridge is Objective-C<br>
interop so I&#39;ll not plan to add support for automatical P/Invoke<br>
generation.. My friend&#39;s dimpoma thesis is related with automatical P/Invoke<br>
generation (he will use NObjectiveAST and test his work on creating Qt<br>
bindings with full code coverage) and may be after 5 months of his work we<br>
will see brialliant project..or not =) Anyway you can make patch and help to<br>
improve project =)<br>
<br>
WBR,<br>
Eugeny Grishul<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
Martin Smith-8 wrote:<br>
&gt;<br>
&gt; Hello,<br>
&gt;<br>
&gt; I was looking at the NObjective source code, and noticed that that<br>
&gt; basically<br>
&gt; all the proxies are generated as structs. &nbsp;The compiled assembly then gets<br>
&gt; passed to a code weaver which fills in the Objective-C class inheritance<br>
&gt; structure. The code weaver basically uses Mono.Cecil to make structs<br>
&gt; support<br>
&gt; inheritance.<br>
&gt;<br>
&gt; I guess this works, but the thing I&#39;m wondering is: is it safe te rely on<br>
&gt; the fact that the mono runtime can actually support inheritance for value<br>
&gt; types? &nbsp;Is this something that&#39;s supposed to be supported by the CLI but<br>
&gt; just isnt supported by C#? &nbsp;I&#39;m assuming that there would be some serious<br>
&gt; issues if all the proxies weren&#39;t the same size (i.e. with only an IntPtr<br>
&gt; as<br>
&gt; the instance data).<br>
&gt;<br>
&gt; At any rate, cheers Eugeny. &nbsp;You&#39;ve created a pretty impressive layer<br>
&gt; here.<br>
&gt; Have you thought about extending NObjectiveAST to suport interoping some<br>
&gt; of<br>
&gt; the C-based functions (for example, NSMakeRect, or the CGContext*<br>
&gt; methods).<br>
&gt;<br>
&gt; Thanks again Eugeny for such great code!<br>
&gt; Martin<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Mono-osx mailing list<br>
&gt; <a href="mailto:Mono-osx@lists.ximian.com">Mono-osx@lists.ximian.com</a><br>
&gt; <a href="http://lists.ximian.com/mailman/listinfo/mono-osx" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-osx</a><br>
&gt;<br>
&gt;<br>
<font color="#888888"><br>
--<br>
View this message in context: <a href="http://www.nabble.com/NObjective-and-Inheritance-tp21882576p21914042.html" target="_blank">http://www.nabble.com/NObjective-and-Inheritance-tp21882576p21914042.html</a><br>
Sent from the Mono - OSX mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
Mono-osx mailing list<br>
<a href="mailto:Mono-osx@lists.ximian.com">Mono-osx@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-osx" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-osx</a><br>
</font></blockquote></div><br>