Metadata in WinRT, WinMD, COM and ECMA 335/CLI, my head just exploded

ECMA 335?  WTF? No it’s CLI Partitions 1 to through 6.  Somewhere in this specification there are the rules around WinRT.  Don’t do a find for the information though, which is what makes standards so annoying to work with.  You will like need to quickly scan this recently released standard (June 2012), and yes it is 574 or so pages of terse writing.  I think that there should be at least a couple of cartoons in the document.

So take a look at the pdf: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf , and for those who think that this standard was created only by Microsoft the following companies also worked with the standards committee at sometime:

Borland, Fujitsu Software Corporation, Hewlett-Packard, Intel Corporation, IBM Corporation, IT University of Copenhagen, Jagger Software Ltd., Monash University, Netscape, Phone.Com, Plum Hall, and Sun Microsystems.

Now where is the part in the standard that defines the WinRT.  I always like to go back to basics, it gives me a great excuse for never finishing my blogs since software is fast paced and someone like an engineer who focuses on things like the effect of friction on materials for their entire career doesn’t exist in software.

Oh well.

COM is different then WinRT, but WinRT is part of COM.  Is this statement correct?

COM is an Object Model.  So is COBRA, never used that object model, at least knowingly.

So we back into metadata in a meta-way along the meta-road.  See meta- is a suffix that software types like to use to describe the details of what is to come or what is contained in an object.  Think of the meta thingie, in this case metadata. 

Metadata for the object might be the ingredients on a box of cereal, and so if the label on the box, so if you are going to eat Cheerios, then you will want to make sure that the box says Cheerios, that is Metadata, and then you can get finer definition on the ingredients by reading the smaller print on the side of the box.  In software we need to understand this in our object oriented software.

Soooo. COM has a certain way to label the ingredients of the software and WinRT has a way that uses the process but in a lighter weight way.  THink of it this way: You buy a big bar of candy, the label has enough room for the ingredients to be listed completely, but if you buy a really small piece of candy it might state that you need to go to a web site to find out the ingredients.  Both are the same candy, but the labeling is different.  See: I.9.1 (Partition 1) Components and assembles.

Metadata is emitted and read from a CLI Module through the direct access to a file or using a reflection library.  Seriously it is that simple, Metadata is stored in the file in a certain way, at one time in programming you had to write the code correctly then smarter people wrote the tools that added the necessary metadata without you doing it manually, which is handy.  Unless you are teaching students what is in the metadata, otherwise I really don’t want to worry about iUnknown.

 

COM came into being for many reasons, but one of the things it allowed you do was to conserve memory and hard drive space, in the old days, 512K was a bunch of memory and hard drives were expensive and a big one was 100 MEG!  Not 100 Gig, 100 MEGABYTES.  Actually the first Hard drive I encountered was 80K and it was quite large.  But that was then and this is now.  However, COM files were not always on the systems, users deleted them, other programs updated or changed the COM files in ways you as a developer didn’t know about.  To seek a really old article on COM you can go to: https://msdn.microsoft.com/en-us/library/ms809984.aspx

One of the first things you encounter is the “Interface Rules”  more in a later blog…