<br><br><div class="gmail_quote">On Wed, Feb 18, 2009 at 10:48 PM, 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 Martin!<br>
<br>
2Rodrigo:<br>
<div class="Ih2E3d">&gt;Encoding a OO type hierarchy using valuetypes is plain wrong.<br>
</div>What about C++? Each class and struct is a value type but with inheritance<br>
ability (and some others). Are programmers that designing their apps in C++<br>
wrong?. Value types is most efficient way to combine memory management<br>
schemes of Objective-C and Mono (see perftest on NObjective&#39;s main page).</blockquote><div><br>From a type safe perspective, subtyping and valuetypes simply don&#39;t match. C++<br>is a good example of an incredibly broken language - type slicing is a good example<br>
of how brain-dead the language is when it comes to type safety.<br><br>The core issue is that subtyping requires reference semantics to be safe and<br>provable correct.<br><br>Correctness comes first of performance.<br><br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Some of users told me that they don&#39;t want to attach to the Objective-C<br>
object using managed counterpart, but want work with it as raw pointer. Only<br>
value types can provide such ability.<br>
<div class="Ih2E3d"></div></blockquote><div><br>Well, they can always use IntPtr for that. No need for any hackery.<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d"><br>
&gt;It&#39;s not a bug in mono, the CLR is designed this way and there is no<br>
compeling reason to implement such broken behavior.<br>
</div>Mono bug is crashes while accessing of virtual methods of boxed object that<br>
not derived from ValueType/Enum. CLR ( CLR = MS CLI implementation ) able to<br>
run such code and I have no idea why Mono JIT team can&#39;t emulate such<br>
behaviour. Also CLR runtime verifier accepts such code coz it&#39;s VALID CIL<br>
(but not verifiable).<br>
</blockquote><div><br>This is simply not true. A simple example shows you the opposite [1]. The issue<br>is that your&#39;re abusing the CTS and the standard make guarantees on what happens<br>when executing such code.<br>
<br>But OTOH, we are always open to contributions from the community in case you<br>want to fix mono.<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Mono internally used a thousands of different hacks so using of vtypes not<br>
directly inherited from ValueType/Enum isn&#39;t criminal.<br>
</blockquote><div><br><br>This is not an argument, it&#39;s an excuse.<br><br>Cheers,<br>Rodrigo<br><br><br>[1] As for:<br>public interface Foo {<br>&nbsp;&nbsp;&nbsp; int Value();<br>}<br><br>public struct Bar : Foo {<br>&nbsp;&nbsp;&nbsp; int val;<br>
&nbsp;&nbsp;&nbsp; public Bar(int x) { this.val = x; }<br><br>&nbsp;&nbsp;&nbsp; public int Value() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return val;<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>public class Driver {<br>&nbsp;&nbsp;&nbsp; static void Main () {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Foo f = new Bar (10);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Console.WriteLine (f.Value ());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>} <br></div></div>