<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://bugvanquisher.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fbugvanquisher.spaces.live.com%2fcategory%2fComputer%2bTheory%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Bug Vanquisher: Computer Theory</title><description /><link>http://bugvanquisher.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catComputer%2bTheory</link><language>en-US</language><pubDate>Thu, 14 Aug 2008 19:03:07 GMT</pubDate><lastBuildDate>Thu, 14 Aug 2008 19:03:07 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://bugvanquisher.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-2671408739996403191</live:id><live:alias>bugvanquisher</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>More Horrors</title><link>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1401.entry</link><description>&lt;p&gt;Right off Brad Abrams &lt;a href="http://blogs.gotdotnet.com/brada/archive/2004/05/08/128618.aspx"&gt;blog&lt;/a&gt;! 
&lt;blockquote&gt;
&lt;h3&gt;Isn't it odd that... &lt;/h3&gt;
&lt;p&gt;From the files of things that make you go “hmmmm”. 
&lt;p&gt;System.Exception (the base class for all exceptions) is indeed an exception: throw new Exception () 
&lt;p&gt;But… 
&lt;p&gt;System.Enum (the base class for all enums) is not an enum: typeof (Enum).IsEnum == false 
&lt;p&gt;System.ValueType (the base class for all ValueTypes) is not a ValueType: typeof (ValueType).IsValueType == false 
&lt;p&gt;System.Attribute (the base class for all custom attributes) is not a custom attribute [Attribute] -&amp;gt; compile error 
&lt;p&gt;... 
&lt;p&gt;&lt;a href="http://blogs.gotdotnet.com/brada/archive/2004/05/08/128618.aspx#129534"&gt;#&lt;/a&gt; &lt;a href="http://blogs.msdn.com/brada"&gt;Brad Abrams&lt;/a&gt; said on May 10, 2004 9:21 PM: 
&lt;p&gt;Oh, and I just noticed that System.Array is not an Array: &lt;br&gt;typeof (Array).IsArray = false... &lt;/blockquote&gt;
&lt;p&gt;This again proves my &lt;a href="http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!313.entry"&gt;point&lt;/a&gt; that root in a hierarchy is always special. The rules used to build that hierarchy do not apply to the root, breaking the constraint system.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2671408739996403191&amp;page=RSS%3a+More+Horrors&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=bugvanquisher.spaces.live.com&amp;amp;GT1=bugvanquisher"&gt;</description><comments>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1401.entry#comment</comments><guid isPermaLink="true">http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1401.entry</guid><pubDate>Sun, 11 Nov 2007 10:48:02 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!1401/comments/feed.rss</wfw:commentRss><wfw:comment>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1401.entry#comment</wfw:comment><dcterms:modified>2007-11-11T10:48:02Z</dcterms:modified></item><item><title>Building The Tools</title><link>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1222.entry</link><description>&lt;p style="text-align:justify"&gt;Connected with the extremely twisted &lt;a href="http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!1221.entry"&gt;last post&lt;/a&gt;, consider the methods of programming the machines we have seen since 1943. Let us build a hierarchy of tools we use for programming and how they must have come to be what they are right now. 
&lt;p style="text-align:justify"&gt;ENIAC was programmed using rewiring and four years later than that for ROM function tables. Only six women programmed it. Compilers existed long before that. Assemblers came out a little late. We see the first portable programming language in 1972. High level languages soon follow, my &lt;a href="http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!707.entry"&gt;first love&lt;/a&gt; enters the picture, the world is swarming with all sorts of OO and high level languages by mid 1980s. Declarative languages add to the mix at this time too. Right now, we are partying on very expressive programming environments. 
&lt;p style="text-align:justify"&gt;Grab Visual C++ compiler, the language I use most. Or better yet &lt;a href="http://msdn2.microsoft.com/en-us/library/78f4aasd(VS.80).aspx"&gt;csc.exe&lt;/a&gt;. Consider how that compiler itself must have been built. If you have seen &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&amp;amp;displaylang=en"&gt;rotor&lt;/a&gt;, you will know that csc itself is written in C++. Therefore, it will require a C++ compiler, definitely &lt;a href="http://msdn2.microsoft.com/en-us/library/ms235639(VS.80).aspx"&gt;cl.exe&lt;/a&gt; because of &lt;a href="http://blogs.msdn.com/vcblog/archive/2007/11/01/visual-studio-build-process-vc-libraries-and-check-in-process.aspx"&gt;this&lt;/a&gt;. Put cl.exe into the interrogation box and ask the same question, who is your mother? It will say cl.exe with a build number or version number smaller than mine. 
&lt;p style="text-align:justify"&gt;But this isn't a chicken and egg problem because it must have begun at the first build of cl.exe. Let's say it was compiled with a C compiler. Then, who was the mother of that compiler? Some earlier C compiler. Who gave birth to that first one? An assembler is the most likely answer, say &lt;a href="http://msdn2.microsoft.com/en-us/library/afzk3475(VS.71).aspx"&gt;masm.exe&lt;/a&gt;. The question repeats itself, only this time in the context of assemblers. First assembler would have built the second and itself must have been built by some machine which required programming by re-wiring (only a guess, I have no proof :)). 
&lt;p style="text-align:justify"&gt;This machine may have built a few assemblers. Those assemblers must have boot-strapped themselves and eventually one of them may have become powerful enough to build a C compiler. (Actually, from what I just read, it goes way back than that assumption. C was a transformation of B which &lt;a href="http://bugvanquisher.spaces.live.com/mmm2007-10-25_18.59/labs.com/cm/cs/who/dmr/chist.html"&gt;had&lt;/a&gt; a compiler who origin was in BCPL's compiler. But let us again skip the details and say BCPL compiler may have been built with an assembler.) 
&lt;p style="text-align:justify"&gt;This early compiler must have boot-strapped itself too and built more powerful versions of it and other compilers. Definite proof for this is the &lt;a href="http://en.wikipedia.org/wiki/Cfront"&gt;C-front&lt;/a&gt;, first compiler for C++ which produced C code as a result which was compiled and executed. The process has been bootstrapping itself ever since and giving rise to more and more language compilers of all sort and hence, we trace the path from root to csc.exe! 
&lt;p style="text-align:justify"&gt;If you look carefully, you will find my &lt;a href="http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!313.entry"&gt;favorite&lt;/a&gt; data structure here too. Conceptually, ENIAC or something similar lies at the root. At every level, a transformation program (assemblers/compilers) is either boot-strapping itself or increase the set of available transformation programs at the next level. From ENIAC, we move to a decent number of assemblers, which boot-strap themselves to assemble BCPL (again, my hypothesis) compiler. BCPL compiler compiles B compiler which boot-straps itself and generates a C compiler. This C compiler again bootstraps and really makes the bomb go off by giving rise to other C compilers and C-front. And again, the rest is history.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2671408739996403191&amp;page=RSS%3a+Building+The+Tools&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=bugvanquisher.spaces.live.com&amp;amp;GT1=bugvanquisher"&gt;</description><comments>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1222.entry#comment</comments><guid isPermaLink="true">http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1222.entry</guid><pubDate>Sat, 03 Nov 2007 08:17:58 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!1222/comments/feed.rss</wfw:commentRss><wfw:comment>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1222.entry#comment</wfw:comment><dcterms:modified>2007-11-07T18:16:29Z</dcterms:modified></item><item><title>Abacus-&gt;ENIAC-&gt;Assemblers-&gt;Compilers-&gt;Declaratives</title><link>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1221.entry</link><description>&lt;p align=justify&gt;It must have begin with the first ever Abacus. One of the earliest machines to help us compute. Although primitive but really effective. Even if you do not include a concept of '0' in your numerals.  &lt;p align=justify&gt;Over millennia, we moved forward to faster, automated computing machines. &lt;a href="http://en.wikipedia.org/wiki/ENIAC"&gt;ENIAC&lt;/a&gt; was born. But limited in programmability and never reproduced. Remember it is still 1943 and the design has been locked. First ever compiler makes to the front for &lt;a href="http://en.wikipedia.org/wiki/Grace_Hopper"&gt;Mark 1&lt;/a&gt; in the same year. No &lt;a href="http://en.wikipedia.org/wiki/Von_Neumann_architecture"&gt;stored program concept&lt;/a&gt; till &lt;a href="http://en.wikipedia.org/wiki/First_Draft_of_a_Report_on_the_EDVAC"&gt;30/06/1945&lt;/a&gt;, machine programmability is very limited. Universal Turing Machines are still &lt;a href="http://en.wikipedia.org/wiki/Universal_turing_machine#Introduction"&gt;4 years&lt;/a&gt; away. Even with the concept of UTM in 1948, it takes one more year for human eyes to see the &lt;a href="http://en.wikipedia.org/wiki/Nathaniel_Rochester_(computer_scientist)#IBM_701_computer"&gt;first ever&lt;/a&gt; symbolic assembler.  &lt;p align=justify&gt;Therefore, let me change the title to  &lt;blockquote&gt;   &lt;p align=justify&gt;&lt;b&gt;Abacus-&amp;gt;ENIAC/Compilers-&amp;gt;Assemblers-&amp;gt;Declaratives&lt;/b&gt; &lt;/blockquote&gt;  &lt;p align=justify&gt;Let's fast forward the boring details and link leaden paragraphs to 1972. This year is significant because it marks the turning point in programming languages and will change the flow of events forever. We see '&lt;a href="http://en.wikipedia.org/wiki/C_language"&gt;C&lt;/a&gt;' being born and the rest is history.  &lt;p align=justify&gt;I am laying the ground for another post with this extremely brief history, many twisted details (some by me, for brevity's sake), and left out milestones (again my apologies).&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2671408739996403191&amp;page=RSS%3a+Abacus-%3eENIAC-%3eAssemblers-%3eCompilers-%3eDeclaratives&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=bugvanquisher.spaces.live.com&amp;amp;GT1=bugvanquisher"&gt;</description><comments>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1221.entry#comment</comments><guid isPermaLink="true">http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1221.entry</guid><pubDate>Sat, 03 Nov 2007 08:09:06 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!1221/comments/feed.rss</wfw:commentRss><wfw:comment>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!1221.entry#comment</wfw:comment><dcterms:modified>2007-11-03T08:09:06Z</dcterms:modified></item><item><title>Happy Turing Day</title><link>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!345.entry</link><description>&lt;p&gt;It's a bit late (actual date is 23&lt;sup&gt;rd&lt;/sup&gt; June), but better late than never.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2671408739996403191&amp;page=RSS%3a+Happy+Turing+Day&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=bugvanquisher.spaces.live.com&amp;amp;GT1=bugvanquisher"&gt;</description><comments>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!345.entry#comment</comments><guid isPermaLink="true">http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!345.entry</guid><pubDate>Mon, 25 Jun 2007 06:55:02 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!345/comments/feed.rss</wfw:commentRss><wfw:comment>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!345.entry#comment</wfw:comment><dcterms:modified>2007-06-25T06:55:02Z</dcterms:modified></item><item><title>The horrors within!</title><link>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!313.entry</link><description>&lt;p style="text-align:justify"&gt;Have you ever given thought to the C# type system (For all purposes I will only say C# whenever I mean C#/VB.Net/C++-CLI/whatever languages.)? Ever opened a bank account which requires a reference of someone having previously opened an account at the same bank? Admitted to a school which requires previously students' parents knew you? Got membership of a club where someone else had to recommend you? Or don't forget the politics? Know what &lt;a href="http://en.wikipedia.org/wiki/Russell's_paradox" target="_blank"&gt;Russell's paradox&lt;/a&gt; is. If every set is a subset of universal set, of which set universal set is a subset then? &lt;p style="text-align:justify"&gt;Each of these examples has a main theme, the idea of a tree structured hierarchy. You must start at the root to enter the system. There must a path from you to root or a relation to root in order to be part of the system. The root is special. It has no parent and without some external help, it would not even be a part of that system. The system is inconsistent specifically for the root. You need boot strapping to make root part of the system. Given the rules which apply for something to be part of the system, root will always violate these rules. The invariants which hold for every other thing that is part of the system, root is the sole entity for which they do not hold. Let me explain all these points with reference to the questions I asked. &lt;ol&gt; &lt;li&gt; &lt;p style="text-align:justify"&gt;C# type system: C# requires the each type must have a parent. If you do not specify a parent, it will implicitly inherit it from either &lt;a href="http://msdn2.microsoft.com/en-us/library/system.object.aspx" target="_blank"&gt;Object&lt;/a&gt; if you define a class or from &lt;a href="http://msdn2.microsoft.com/en-us/library/system.valuetype.aspx" target="_blank"&gt;ValueType&lt;/a&gt; if you define a struct. ValueType in turn inherits from object. Therefore, whatever the construct you always inherit from Object. Java and many other languages suffer from the same problem. In my knowledge, C++ is the only language to avoid this problem by not requiring every class to inherit from one single class. Now, consider my claims. &lt;ul&gt; &lt;li&gt;You must start at the root to enter the system. There must a path from you to root or a relation to root in order to be part of the system.&lt;br&gt;     As said earlier, no matter how you define your type, you always inherit from object.  &lt;li&gt;The root is special. It has no parent and without some external help, it would not even be a part of that system.&lt;br&gt;     object is special. It is the base class for every other class in C# but has no parent itself. Take a look at the disassembly we can peek at with &lt;a href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;reflector&lt;/a&gt;.  &lt;div&gt;&lt;pre&gt;[Serializable, ComVisible(&lt;span style="color:rgb(0, 0, 255)"&gt;true&lt;/span&gt;), ClassInterface(ClassInterfaceType.AutoDual)]&lt;br&gt;&lt;font size=3&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;public class Object&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;
{
    &lt;span style="color:rgb(0, 128, 0)"&gt;// Methods&lt;/span&gt;
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; Object();&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;virtual&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;bool&lt;/span&gt; Equals(&lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; obj);&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;bool&lt;/span&gt; Equals(&lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; objA, &lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; objB);&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;void&lt;/span&gt; FieldGetter(&lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; typeName, &lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; fieldName, &lt;span style="color:rgb(0, 0, 255)"&gt;ref&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; val);&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;void&lt;/span&gt; FieldSetter(&lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; typeName, &lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; fieldName, &lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; val);&lt;br&gt;    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;protected&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;override&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;void&lt;/span&gt; Finalize();&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;private&lt;/span&gt; FieldInfo GetFieldInfo(&lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; typeName, &lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; fieldName);&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;virtual&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;int&lt;/span&gt; GetHashCode();&lt;br&gt;    [MethodImpl(MethodImplOptions.InternalCall)]&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;extern&lt;/span&gt; Type GetType();&lt;br&gt;    [MethodImpl(MethodImplOptions.InternalCall)]&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;internal&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;extern&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;bool&lt;/span&gt; InternalEquals(&lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; objA, &lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; objB);&lt;br&gt;    [MethodImpl(MethodImplOptions.InternalCall)]&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;internal&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;extern&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;int&lt;/span&gt; InternalGetHashCode(&lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; obj);&lt;br&gt;    [MethodImpl(MethodImplOptions.InternalCall)]&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;protected&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;extern&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; MemberwiseClone();&lt;br&gt;    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;bool&lt;/span&gt; ReferenceEquals(&lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; objA, &lt;span style="color:rgb(0, 0, 255)"&gt;object&lt;/span&gt; objB);&lt;br&gt;    &lt;span style="color:rgb(0, 0, 255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;virtual&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;string&lt;/span&gt; ToString();&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;    As I have highlighted, object has no base class. Even the IL does not have an .extends directive. 
&lt;li&gt;The system is inconsistent specifically for the root.&lt;br&gt;     If we try to compile the above define (suitable completed and removing internal dependencies for the sake for demonstration), C# compiler will derive it from object defined in mscorlib. 
&lt;li&gt;
&lt;p style="text-align:justify"&gt;You need boot strapping to make root part of the system. Given the rules which apply for something to be part of the system, root will always violate these rules.&lt;br&gt;     Since, object cannot be defined in any HLL, we need something external to the targeting languages to define object. If we insist on defining it in C#, it will no longer be the object we intended it to be. 
&lt;li&gt;The invariants which hold for every other thing that is part of the system, root is the sole entity for which they do not hold.&lt;br&gt;    There is one invariant no type can violate. It must have a single parent. object has &lt;strong&gt;no&lt;/strong&gt; parent&lt;/ul&gt;
&lt;p style="text-align:justify"&gt;I am going to clump all other example together as they are not related to programming. However, banking deserves special attention.
&lt;li&gt;Open a bank account/Get admitted to a school/Club membership/Politics 
&lt;ul&gt;
&lt;li&gt;You must start at the root to enter the system. There must a path from you to root or a relation to root in order to be part of the system.&lt;br&gt;     You must know someone who is already a member. Someone must invite you into the system, you cannot enter solely on yourself. 
&lt;li&gt;The root is special. It has no parent and without some external help, it would not even be a part of that system.&lt;br&gt;
&lt;p style="text-align:justify"&gt;    This is easiest to explain in terms of a bank account. Consider, if everyone needed a reference to someone who already had an account, how could the first person open his/her account in the first place? Something external to the system that transcends the requirement that you must know a person beforehand who is part of the system must have played a factor. 
&lt;li&gt;The system is inconsistent specifically for the root.&lt;br&gt;     If you demand relationship, root will fail the test and the whole system collapses. 
&lt;li&gt;You need boot strapping to make root part of the system. Given the rules which apply for something to be part of the system, root will always violate these rules. 
&lt;p style="text-align:justify"&gt;    Root does not know anyone who previously had an account in a bank, he/she should not be allowed to open an account, but the system requires at least one member who will introduce others to the system. 
&lt;li&gt;The invariants which hold for every other thing that is part of the system, root is the sole entity for which they do not hold.&lt;br&gt;    System must not require root to fulfill relationship to some parent in order to bootstrap in the first place. Every object must have a parent, root is excluded. Period.&lt;/ul&gt;&lt;/ol&gt;
&lt;p style="text-align:justify"&gt;All these are examples of chicken and egg problem. &lt;a href="http://www.joelonsoftware.com/" target="_blank"&gt;Joel Spolsky&lt;/a&gt; has a very nice post somewhere (I found the link, it is &lt;a href="http://www.joelonsoftware.com/articles/fog0000000054.html" target="_blank"&gt;here&lt;/a&gt;) buried in his valuable archives which discusses the same problem from marketing point of view. He talks about things like, a new application requires a large customer base to be economical and have sufficient customer feedback to achieve a high quality but most customers don't have huge buying strengths and most won't waste money on something that just came out of company yesterday.
&lt;p style="text-align:justify"&gt;&lt;a href="http://en.wikipedia.org/wiki/Russell's_paradox" target="_blank"&gt;Russell's paradox&lt;/a&gt; asks for a set which is ever bigger than the universal set. The 'one who is all'. That set must contain everything yet must be contained in a set which is a proper superset.
&lt;p style="text-align:justify"&gt;Consider another example that just jumped out in front of me. A class of languages which can be recognized by a particular machine can always be defined in terms of a sort of meta language. When that describing language is fed to this machine, it fails to recognize it. All regular languages can be defined in terms of any language which will not be regular itself. Next, PDAs can be defined in language which PDAs will never recognize but &lt;a href="http://en.wikipedia.org/wiki/Turing_machine" target="_blank"&gt;TM&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Post-Turing_machine" target="_blank"&gt;PM&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Pushdown_automaton" target="_blank"&gt;nPDA&lt;/a&gt;s will. Turing machines will never recognize the language which describes them. In general, when we define a meta language to encompass all language a particular machine can recognize that language will transcend that machine. This can be proven by &lt;a href="http://en.wikipedia.org/wiki/Cantor's_diagonal_argument" target="_blank"&gt;Cantor's diagonal argument&lt;/a&gt;.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2671408739996403191&amp;page=RSS%3a+The+horrors+within!&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=bugvanquisher.spaces.live.com&amp;amp;GT1=bugvanquisher"&gt;</description><comments>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!313.entry#comment</comments><guid isPermaLink="true">http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!313.entry</guid><pubDate>Sat, 02 Jun 2007 13:16:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://bugvanquisher.spaces.live.com/blog/cns!DAED3FE79AA3FA09!313/comments/feed.rss</wfw:commentRss><wfw:comment>http://bugvanquisher.spaces.live.com/Blog/cns!DAED3FE79AA3FA09!313.entry#comment</wfw:comment><dcterms:modified>2007-06-20T06:21:24Z</dcterms:modified></item></channel></rss>