<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8086252</id><updated>2012-01-06T00:49:47.185+05:30</updated><title type='text'>Diary of a VB.NET Compiler Developer</title><subtitle type='html'>This column chronicles the growth of the future de facto Open Source VB.NET compiler - bmcs</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8086252.post-112015132035344814</id><published>2005-06-30T22:26:00.000+05:30</published><updated>2005-06-30T22:41:10.040+05:30</updated><title type='text'>VB 8.0 Spec &amp; Few last words</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ca6e29d9-47d5-472a-9e65-7d9e4e98be0f&amp;displaylang=en"&gt; The VB 8.0 Spec &lt;/a&gt; is out.
&lt;/p&gt;

&lt;p&gt;
It is more than 2 months since I have committed to the BMCS tree and I am less likely to make further commits. (My employer is no Google you see !)
&lt;/p&gt;

&lt;p&gt;
Mono's VB.NET compiler - mbas has seen steady patches in the last 6 months and I wish that it goes production very soon. I would but be proud that it has some of my little commits.
&lt;/p&gt;

&lt;p&gt;
BMCS is up for grabs if someone wants to own it !
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-112015132035344814?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/112015132035344814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=112015132035344814' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/112015132035344814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/112015132035344814'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/06/vb-80-spec-few-last-words.html' title='VB 8.0 Spec &amp; Few last words'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-111324587328703439</id><published>2005-04-11T23:56:00.000+05:30</published><updated>2005-04-12T00:27:53.290+05:30</updated><title type='text'>The fine art of Articulation</title><content type='html'>&lt;p&gt;
I had been following the &lt;a href="http://slashdot.org/article.pl?sid=05/04/09/2136247"&gt; Linux and BitKeeper story. &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Newsforge has carried &lt;a href="http://os.newsforge.com/article.pl?sid=05/04/11/118211&amp;amp;from=rss"&gt; an article  &lt;/a&gt; on the same.
&lt;/p&gt;

&lt;p&gt;
I find the following argument to be particularly subtle and very well articulated. I quote Linus' own words from the article:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;
Larry is perfectly fine with somebody writing a free replacement. He's told me so, and I believe him, because I actually do believe that he has a strong moral back-bone.
&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;
What Larry is _not_ fine with, is somebody writing a free replacement by just reverse-engineering what _he_ did.
&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;
Larry has a very clear moral standpoint: "You can compete with me, but you can't do so by riding on my coat-tails. Solve the problems on your own, and compete _honestly_. Don't compete by looking at my solution."
&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;
And that is what the BK license boils down to. It says: "Get off my coat-tails, you free-loader". And I can't really argue against that.
&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
As I juxtapose these arguments with the work that I have been doing with BMCS, I feel shivers running through my "backbone".
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-111324587328703439?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/111324587328703439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=111324587328703439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111324587328703439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111324587328703439'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/04/fine-art-of-articulation.html' title='The fine art of Articulation'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-111314821091447137</id><published>2005-04-10T20:56:00.000+05:30</published><updated>2005-04-10T21:20:10.916+05:30</updated><title type='text'>Utility of a Open Source VB.NET compiler ?!</title><content type='html'>&lt;p&gt;
What is the utility of having a VB.NET compiler in the Open Source world ? Is it something that is good to have or is it something that is a must have ? What would be the 'scenario' like when the mono community is ready with a fully working and reliable VB.NET compiler ?
&lt;/p&gt;

&lt;p&gt;
These questions constantly pound me as I work on new patches for the BMCS ...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-111314821091447137?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/111314821091447137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=111314821091447137' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111314821091447137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111314821091447137'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/04/utility-of-open-source-vbnet-compiler.html' title='Utility of a Open Source VB.NET compiler ?!'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-111194043001435298</id><published>2005-03-27T20:04:00.000+05:30</published><updated>2005-03-27T22:07:14.860+05:30</updated><title type='text'>"Feature Creeps" in BMCS</title><content type='html'>&lt;p&gt;
This "Good Friday" weekend had been a "Good Hacking" weekend for me. I made good progress on the conversions between the primitive types.
&lt;/p&gt;

&lt;p&gt;
As I was hacking, the following question constantly surfaced at the back of my head - "How will I be managing the features sneakily creeping in from gmcs world to the bmcs world?". There are two components to answering this question - Identifying that a feature is creeping in and tactfully "handling" the same.
&lt;/p&gt;

&lt;p&gt;
To cite an example, "unsigned numeric types" are "feature creeps" from the C# world. The following pattern keeps recurring in the gmcs conversion routines.

&lt;/p&gt;

&lt;p&gt;
&lt;/p&gt;&lt;pre&gt;
static public Expression ImplicitNumericConversion (EmitContext ec, Expression expr,
                               Type target_type, Location loc)
{
    Type expr_type = expr.Type;
    if (expr_type == TypeManager.ushort_type){
        //
        // From ushort to int, uint, long, ulong, float, double
        //
        if (target_type == TypeManager.int32_type)
            return new OpcodeCast (expr, target_type, OpCodes.Conv_I4);
   }
}
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;
The ushort_type above is cached in the TypeManager as follows: 
&lt;/p&gt;

&lt;p&gt;
&lt;/p&gt;&lt;pre&gt;
public class Typemanager
{
    // cached unsigned short type
    static public Type ushort_type = typeof (System.UInt16);
}
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;


&lt;p&gt;
One naive way of handling this is to remove all references to the unsigned types. I tried doing this snip, snip, snip ... and it's no fun but a plain drudgery.
&lt;/p&gt;

&lt;p&gt;
Then I sat back and said to myself, sure enough, I can do better than this and ended up doing this -
&lt;/p&gt;

&lt;p&gt;
&lt;/p&gt;&lt;pre&gt;
namespace Mono.CSharp {
    public class NotDefinedAsPrimitiveType {
    }
}

public class TypeManager
{
    public static Type ushort_type = typeof (NotDefinedAsPrimitiveType);
}

&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;
Barely three lines of change and most of the feature creep is gone !
&lt;/p&gt;

&lt;p&gt;
Btw, I should admit that it took more time writing these few lines of code than doing all those snips ...
&lt;/p&gt;

&lt;p&gt;
Coming back to the question that I raised previously, the obvious answer is that I should start educating myself about the language semantics in the C# world. This will help me make educated and intelligent choices for handling of feature creeps.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-111194043001435298?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/111194043001435298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=111194043001435298' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111194043001435298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111194043001435298'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/03/feature-creeps-in-bmcs.html' title='&quot;Feature Creeps&quot; in BMCS'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-111166987047980421</id><published>2005-03-24T18:21:00.000+05:30</published><updated>2005-03-24T19:09:27.966+05:30</updated><title type='text'>A Reference VB Parser</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.panopticoncentral.net/"&gt;Paul Vick &lt;/a&gt; has earlier released a &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=d8da92aa-354c-4bb0-8e9b-e4763b49a0e3"&gt; VB Parser &lt;/a&gt; under the Shared Source Licence. The parser is written in VB.NET and is apparently of beta 2 quality complying with 7.1 version of the spec.
&lt;/p&gt;

&lt;p&gt;
The above parser could help Mono's VB.NET compilers (mbas and bmcs) in two ways:
&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;A reference implementation against which ambiguities in the language specification could be clarified
&lt;/li&gt;
&lt;li&gt;As a test suite in itself
&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-111166987047980421?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/111166987047980421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=111166987047980421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111166987047980421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111166987047980421'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/03/reference-vb-parser.html' title='A Reference VB Parser'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-111064516563917410</id><published>2005-03-12T21:15:00.000+05:30</published><updated>2005-03-14T10:28:34.970+05:30</updated><title type='text'>Challenges in writing a compatible VB.NET compiler</title><content type='html'>&lt;p&gt;
Thanks to this &lt;a href="http://kjambunathan.blogspot.com/2005/03/type-conversions-in-bmcs.html#comments"&gt;user comment&lt;/a&gt; to my &lt;a href="http://kjambunathan.blogspot.com/2005/03/type-conversions-in-bmcs.html"&gt;previous enty&lt;/a&gt; , I am realising that I need to be more aware of the happenings on in the VB.NET world.
&lt;/p&gt;

&lt;p&gt;
Anyways, to answer this reader's comment, I should admit that my immediate focus is to get a compiler that complies to the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bf32527d-187c-49fa-8c67-9e9105535550&amp;amp;DisplayLang=en"&gt;VB.NET 7.1 Language Specification &lt;/a&gt;. When I get to grab a copy of the VB.NET 8.0 Language Specification, I would start getting in the related changes in to BMCS. Can anyone of you make this document available to me if at all Microsoft has made this available as part of their .NET 2.0 bundle ?
&lt;/p&gt;


&lt;p&gt;
On a related note, let me register here that there are two "must haves" for making available a fully functional and compatible VB.NET compiler.
&lt;ol&gt;
&lt;li&gt;The Languages Specification &lt;/li&gt;
&lt;li&gt;A functional and compatible "VB.NET Runtime" &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;
The item (1) above is obvious in itself and it is indisputable that it is a "must have".
&lt;/p&gt;

&lt;p&gt;
The item (2) above is less obvious and requires some elaboration and explanation.

"VB.NET Runtime" broadly refers to a set of service routines that is implicitly made use of in any VB.NET executable. These service routines provide type conversion and late binding related functionality and is tucked away in the Microsoft.VisualBasic.CompilerServices namespace of the Microsoft.VisualBasic.dll. Any developer who had casually peeked in to a VB.NET execuatble would have noticed that Microsoft's VB.NET compiler - vbc sneaks in calls to the above namespace to provide the "VB.NET experience" to the programmer. So, a certain amount of base compiler functionality is made available as part of the Microsoft.VisualBasic.dll
&lt;/p&gt;

&lt;p&gt;
The "VB.NET runtime" is a bit troublesome in that the Compiler Services APIs are not at all documented as part of Microsoft's SDK. As a result considerable reverse engineering needs to be done to get their functionality right.
&lt;/p&gt;

&lt;p&gt;
I am particularly happy to note that both the above two "must haves" are taken care of vis a vis Mono's .NET 1.1 environment.
&lt;/p&gt;

&lt;p&gt;
I am thankful to folks at Microsoft for having made the VB.NET 7.1 spec freely and widely accessible.
&lt;/p&gt;

&lt;p&gt;
As for "VB.NET runtime", much of the groundwork had been done by Chris J Breisch, Rafael Teixeira, Martin Adoue, Dennis Hayes and Duncan Mak. Special thanks are due to folks at Mainsoft who made available a huge chunk of Java code that implements the whole of Microsoft.VisualBasic.dll.
&lt;/p&gt;

&lt;p&gt;
It remains to be seen how the Mono community goes ahead and meets the above two challenges wrt VB.NET 8.0 language environment.
&lt;/p&gt;

&lt;p&gt;
Btw, I thank &lt;a href="http://mono-nosip.blogspot.com/"&gt;Ankit Jain &lt;/a&gt;, for submitting the much required &lt;a href="http://lists.ximian.com/archives/public/mono-vb/2005-March/000390.html"&gt;perl fixups &lt;/a&gt;to Mono's VB.NET runtime. &lt;a href="http://www.gnomebangalore.org/?q=node/view/498"&gt;The inexpressibility of "Default Parameter Values" &lt;/a&gt;in C#-based Microsoft.VisualBasic.dll has at last been addressed. I am waiting to see the corcompare results for this critical library once the patches have been successfully merged.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-111064516563917410?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/111064516563917410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=111064516563917410' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111064516563917410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111064516563917410'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/03/challenges-in-writing-compatible-vbnet.html' title='Challenges in writing a compatible VB.NET compiler'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-111004849539623269</id><published>2005-03-05T23:10:00.000+05:30</published><updated>2005-03-06T00:18:15.396+05:30</updated><title type='text'>Type Conversions in BMCS</title><content type='html'>&lt;p&gt;
BMCS now has the basic infrastructure in place to do VB.NET like Type Conversions - both Implicit and Explicit.
&lt;/p&gt;

&lt;p&gt;
The changes turned out to be much simpler than I had earlier thought.
&lt;/p&gt;

&lt;p&gt;
The main difficulty was the nomenclature used by the C# and VB.NET specifications. It took sometime for me to realize the following two facts:

&lt;ol&gt;
&lt;li&gt;VB.NET 's notion of "Widening and Narrowing Conversions" is equivalent to C# 's notion of "Implicit and Explicit Conversions".&lt;/li&gt;
&lt;li&gt;VB.NET has no notion of "User Defined Conversions".&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;
Once the above essential facts were in place, a quick renaming of gmcs's conversion methods and a little bit of refactoring put everything in perspective. (Whoever asked "What is in a name?" should definitely be a fool!)
&lt;/p&gt;

&lt;p&gt;
One biggest challenge introduced by the above renaming and considerable deletions (VB.NET has no unsigned data type other than "Byte", you see) is the increased lexical distance between the gmcs and bmcs trees.
&lt;/p&gt;

&lt;p&gt;
I was immediately tempted to assess how much of a overhead that it introduces in merging of the two trees. After my second merge, I would say that it makes my life more difficult. Eventhough merging in itself is more of a pain, verifying that it indeed is just fine is actually much easier - just do a "diff of diffs" and verify that the only diffs are in the "positions of the diff".
&lt;/p&gt;

&lt;p&gt;
Once I am done with giving final touches to the conversion changes, I think I might resort to "re renaming" the methods. (Whoever asked "What's in a name?" definitely has his feet firmly on the ground!)
&lt;/p&gt;

&lt;p&gt;
My next goal is to VBify expression semantics and follow that up with a "rigorous" article on how C# and VB.NET differ with respect to Type Conversions.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-111004849539623269?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/111004849539623269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=111004849539623269' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111004849539623269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/111004849539623269'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/03/type-conversions-in-bmcs.html' title='Type Conversions in BMCS'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-110952831609567190</id><published>2005-02-27T23:38:00.000+05:30</published><updated>2005-02-27T23:51:14.440+05:30</updated><title type='text'>Going online</title><content type='html'>&lt;p&gt;
After a long wait, I have gotten what I have always missed. An internet connection at home. 
&lt;/p&gt;

&lt;p&gt;
I now have more access to one and all. 
&lt;/p&gt;

&lt;p&gt;
I am more accessible now.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-110952831609567190?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/110952831609567190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=110952831609567190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110952831609567190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110952831609567190'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/02/going-online.html' title='Going online'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-110828171842523392</id><published>2005-02-13T12:44:00.000+05:30</published><updated>2005-02-13T13:35:56.026+05:30</updated><title type='text'>Lessons in keeping GMCS and BMCS in sync !</title><content type='html'>&lt;p&gt;
Thanks to this nice article on &lt;a href="http://www.ondotnet.com/pub/a/dotnet/2005/02/07/monowindows.html"&gt;Building Mono on Windows&lt;/a&gt;, I had my build environment set up within a Cygwin environment on my Windows XP box and I was able to get my first set of "gmcs merge patches" in to bmcs.
&lt;/p&gt;

&lt;p&gt;
(&lt;a href="http://www.mfconsulting.com/blog/"&gt;Paco, &lt;/a&gt;Thanks dude ! You are doing an excellent job in making my "Mono hacking" more productive and less hassle free. It gives me ready access to the benchmark implementation - Microsoft's vbc - while fixing up bmcs.&lt;/p&gt;


&lt;p&gt;
From this first ever merge, I could see the following challenges that lie ahead in keeping the gmcs and bmcs trees in sync:

&lt;ol&gt;
&lt;li&gt;The merging of trees should happen as frequently as possible. Checkpointing every two weeks is a must till such time as bmcs begins bloating. Any longer intervals of merges between the two trees would become unmanageable.

&lt;li&gt;The feature additions to bmcs should itself be made in batches as opposed to increments so that one could keeping the lexical distance between the two trees to the minimum.

&lt;li&gt;The VB.NET specific changes should be properly documented either through visible comments or conditional compiler constants so that one doesn't end up losing those changes while performing a merge.
&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;
The above challenges need to be delicately managed, as otherwise bmcs might end up being a significantly different beast compared to gmcs. This would seriously hamper bmcs from borrowing liberally from gmcs.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-110828171842523392?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/110828171842523392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=110828171842523392' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110828171842523392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110828171842523392'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/02/lessons-in-keeping-gmcs-and-bmcs-in.html' title='Lessons in keeping GMCS and BMCS in sync !'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-110753454730854705</id><published>2005-02-04T20:39:00.000+05:30</published><updated>2005-02-04T22:15:53.430+05:30</updated><title type='text'>Why BMCS and Why not MBAS ?</title><content type='html'>&lt;p&gt;
&lt;a href="http://kjambunathan.blogspot.com/2005/01/hello-vbnet-world.html"&gt;Earlier&lt;/a&gt; I had blogged about my intention to focus my spare time on contributing to bmcs. Therein I had declared my intention to make bmcs as "The future defacto Open Source VB.NET compiler".
&lt;/p&gt;

&lt;p&gt;
An interested VB.NET user has &lt;a href="http://kjambunathan.blogspot.com/2005/01/hello-vbnet-world.html#comments"&gt;raised the following  questions&lt;/a&gt; - "This will delay a lot the VB.NET compiler development. All mbas compiler work will be discarded?"
&lt;/p&gt;

&lt;p&gt;
The concerns of this VB.NET user is very valid but is totally unfounded. This is because folks from Novell - Manjula, Satya Sudha with additional help from Sudarshan and Ritvik Mayank - are continuing their work on mbas and making it better day by day. So mbas is not only thriving, it is all the more likely to see the light of the day much sooner than bmcs.
&lt;/p&gt;

&lt;p&gt;
Some people might be tempted to think of bmcs as being positioned in direct competition with mbas. Let me clarify that it's actually the other way round. bmcs will coexist with mbas and try to leverage as much work done on mbas as possible. The birth of bmcs needs to be viewed as one creating a better, more futuristic and robust choice of for the Open Source VB.NET developers.
&lt;/p&gt;

&lt;p&gt;
Let me explain why bmcs is "better", "robust", "scalable" and "futuristic".
&lt;/p&gt;

&lt;p&gt;
bmcs is grown from a more mature C# compiler code base that has already seen the light of the day. If one carefully happens to look at the history of mbas, one would realize that it was also cultured out from the mcs code base - but one that's more than 2 years old. So the code emission modules in bmcs is that much more thoroughly tested and feature rich as compared to the one available in mbas.
&lt;/p&gt;

&lt;p&gt;
bmcs is "futuristic". This is because bmcs is grown out of gmcs - Mono's next generation compiler supporting Generics and Partial Classes in C#. Hence bmcs can start supporting these features almost out of the box in no time.
&lt;/p&gt;


&lt;p&gt;
To appreciate why bmcs is more "scalable", one need to carefully consider how mbas is going to mature. As someone, who had spent significant time working on mbas, I see development on mbas proceeding on the following two levels - neither of which is non trivial.

&lt;ol&gt;
&lt;li&gt; Purging of C# language semantics with VB.NET language semantics &lt;/li&gt;

&lt;li&gt; Making the code generation and emission modules more robust and scalable&lt;/li&gt;

&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;
The task (1) above is something that needs to be done from scratch for both mbas and bmcs.
&lt;/p&gt;

&lt;p&gt;
The only sensible alternative to task (2) would be to borrow liberally from the existing mcs or gmcs code base. That's easier said than done. This is because the class orgnization in mbas is very old and the class structure of mcs has evolved in to a totaly different beast since the fork. The differentiation has been rendered more pronounced by the aggressiveness with which mcs had grown in the intervening two years.
&lt;/p&gt;

&lt;p&gt;
So bringing in new features like generics and partial classes means a significant refactoring and the attendant testing on mbas code base. Any sensible developer could see the enormity of this task.
&lt;/p&gt;

&lt;p&gt;
It's in relation to task (2) that bmcs is going significantly outwit and outlive mbas . It can not only leverage the work that is being done on mbas but can also leverage the work done on the generics C# compiler. A periodic merging of patches is all that's required to make the later task possible.
&lt;/p&gt;

&lt;p&gt;
Personally I am very upbeat about bmcs. The mood is as well shared by Rafael Texeira   - the brain behind the Mono's VB.NET compiler
&lt;/p&gt;




&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-110753454730854705?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/110753454730854705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=110753454730854705' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110753454730854705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110753454730854705'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/02/why-bmcs-and-why-not-mbas.html' title='Why BMCS and Why not MBAS ?'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8086252.post-110672017360886844</id><published>2005-01-26T11:32:00.000+05:30</published><updated>2005-01-31T16:47:24.643+05:30</updated><title type='text'>Hello VB.NET World !</title><content type='html'>&lt;p&gt;
I am an ardent Open Source enthusiast and an avid &lt;a href="http://www.mono-project.com"&gt; Mono&lt;/a&gt; hacker.
&lt;/p&gt;

&lt;p&gt;
I had earlier worked on Mono's VB.NET compiler - &lt;a href="http://www.go-mono.com/mbas.html"&gt;mbas&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Recently, I have &lt;a href="http://lists.ximian.com/archives/public/mono-vb/2005-January/000352.html"&gt;embarked on an initiative&lt;/a&gt; to build a VB.NET compiler "entirely from scratch". The initial work has been imported as a new tree - mcs/bmcs in to Mono's repository. Here is the &lt;a href="http://lists.ximian.com/archives/public/mono-vb/2005-January/000360.html"&gt;posting from Miguel&lt;/a&gt; announcing this initiative.
&lt;/p&gt;

&lt;p&gt;
My goal is to nurture bmcs and grow it as a de facto Open Source compiler for the VB.NET language.
&lt;/p&gt;

&lt;p&gt;
You would get to hear from me on a regular basis through this column.
&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8086252-110672017360886844?l=kjambunathan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjambunathan.blogspot.com/feeds/110672017360886844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8086252&amp;postID=110672017360886844' title='94 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110672017360886844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8086252/posts/default/110672017360886844'/><link rel='alternate' type='text/html' href='http://kjambunathan.blogspot.com/2005/01/hello-vbnet-world.html' title='Hello VB.NET World !'/><author><name>Jambunathan K</name><uri>http://www.blogger.com/profile/01664660620567970206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>94</thr:total></entry></feed>
