Common Language Infrastructure Annotated Standard

Common Language Infrastructure Annotated Standard

One of the most amazing things about the .NET Framework is that it is built upon published standards. The Common Language Infrastructure (CLI) standard specifies how the metadata is formatted and what the instructions do. I briefly review the published Common Language Infrastructure Annotated Standard written by James Miller and Susann Ragsdale here.

This page reviews the Common Language Infrastructure (CLI) Annotated Standard.

It's annotated

As a standard, the CLI standard is available in different forms. But this book presents the standard and also annotations, which can help you understand why it is the way it is, and what parts of it mean. I have found annotated books like this one help me gain better insight into underlying concepts of technical issues.

High-level concepts

The book does not just dive directly into the minute technical issues of the CLI standard. Instead, it provides a high-level overview at the start. Just what is the CLI standard? It answers this question for you. For me, many of the technical details were less useful than some of these descriptions.

CIL instruction set

My favorite technical details were found in the chapter on the CIL instruction set. As part of my effort to understand compilers, I found the precise descriptions of instructions used at the method level to be interesting. For example, branch instructions are critical to the Virtual Execution System.

beq.<length> - Branch on Equal [p. 517]
bge.<length> - Branch on Greater Than or Equal To [p. 518]
bge.un.<length> - Branch on Greater Than or Equal To, Unsigned or Unordered [p. 519]
bgt.<length> - Branch on Greater Than [p. 520]
bgt.un.<length> - Branch on Greater Than, Unsigned or Unordered [p. 521]
ble.<length> Branch on Less Than or Equal To [p. 522]
ble.un.<length> - Branch on Less Than or Equal To, Unsigned or Unordered [p. 523]
blt.<length> - Branch on Less Than [p. 524]
blt.un.<length> - Branch on Less Than, Unsigned or Unordered [p. 525]
bne.un<length> - Branch on Not Equal or Unordered [p. 526]
br.<length> - Unconditional Branch [p. 527]
brfalse.<length> - Branch on False, Null or Zero [p. 528]
brtrue.<length> - Branch on Non-false or Non-null [p. 530]

Branch CIL instructions. Above, you can see some of the CIL branch instructions that are described in depth in this book. The level of detail on each of these instructions is astounding. It is probably more detail than I need, but for people developing compilers, this would be more important. In any case, it can give your understanding of .NET more depth.

Not C#

.NET Framework information

This book is not about the C# programming language. Instead, it is about the underlying platform that C# programs are compiled into. It focuses on the metadata and the instructions in the metadata. For information about the C# language, there is a separate specification.

The C# Programming Language: Specification

Summary

In summary, this book was not directly useful for me, but it allowed me to develop a deeper understanding of the concepts underlying the framework. While much of the information is not relevant for people who are not generating metadata or executing instructions, it can help us realize the extent of the standardized work that C# programs are built upon.

Books About Programming
.NET