Talk:Common Intermediate Language

Too Specific
The notion of a common intermediate language is not specific to Microsoft's .Net; this idea has been around since the time people tried to understand computation and compilers. If anything, this article should be discussing things like UNCOL as well, and Microsoft's CIL should be just one example. --Lingwitt (talk) 12:19, 26 May 2008 (UTC)

Broken Link for Kenny Kerr's intro to CIL (called MSIL in the tutorial)
The closest thing I could find in 10 seconds of googling is this link, and even it has a link to that same 404 page:

http://weblogs.asp.net/kennykerr/archive/2004/09/09/introduction-to-msil-part-3-defining-types.aspx


 * actualy, I think i found it. anyone care to verify? http://weblogs.asp.net/kennykerr/archive/2004/09/07/introduction-to-msil-part-1-hello-world.aspx

Machine Symbolic Intermediate Language?
I have never heard of the term "Machine Symbolic Intermediate Language". Google and MSDN don't bring up any 1:1 matches. Is there any evidence of this usage? Vector4F 20:17, 18 August 2005 (UTC)


 * Likewise. Perhaps this statement should be removed. There are enough acronyms in the world without people inventing new ones for the sake of it! Rickyp 11:10, 20 September 2006 (UTC)

CIL?
Why does MSIL redirect to here? In all the documentation I've come across, this language has always been called "MSIL." Do a Google search for CIL and you'll get pages on unrelated material. Do a search for MSIL and--remarkably--you'll get pages about .NET and the Microsoft Intermediate Language. If no one objects within a few days, I'll redirect CIL to MSIL and change all references to CIL to MSIL. If you have a compelling contrasting viewpoint (with references), please submit it.

To back up my argument, you may go to MSDN (Microsoft's technical website) and type in CIL. There you'll get hits on unrelated material. Type in MSIL and you'll get hits on MS's MSIL compiler. You can also check out Jesse Liberty's book Programming C#. He also discusses MSIL and never mentions CIL. &mdash; Frecklefoot | Talk 14:30, Jun 24, 2004 (UTC)


 * IL was referred to as MSIL for a long time before Microsoft officially changed the name to CIL. That is why you will find more references to MSIL. Be that as it may, the official name of the language has been CIL since before the v1 .NET Framework shipped. I fixed up the references in the wikipedia to be up-to-date with current terminology, while leaving in references to the original name.


 * The reason for the change is the the runtime was standardized, including IL, and so they didn't want any Microsoft-specific names in the standardized portions of the runtime.


 * Perhaps relevant: http://dotnet.di.unipi.it/EcmaSpec/PartitionIII/index.html uses CIL. - Bevo 17:27, 30 Jun 2004 (UTC)


 * I don't consider a count of google search hits to be indicative of how up-to-date a term is. In fact, the more out of date term is likely to have more hits, by default I would think.


 * Onebit 20:07, Jun 24, 2004 (UTC)

Thanks for the update! &mdash; Frecklefoot | Talk 20:32, Jun 24, 2004 (UTC)


 * Sure thing! Onebit 20:38, Jun 24, 2004 (UTC)

Byte me
The CIL is not bytecode (byte = 8 bits), it is actually word based (WORD = 16 bits). Saying "wordcode" however sounds weird. Is there a way to describe it so it is correct and not weird-sounding? Right now it says it is bytecode, which is not correct (Java is bytecode based). &mdash; Frecklefoot | Talk 18:57, Jun 25, 2004 (UTC)


 * Use of "bytecode" is appropriate. Originally the term "bytecode", no-doubt, referred to the size of the instructions. However, bytecode has been around for a long time, and not every example of bytecode centers around bytes in terms of the actual data stream. Even the existing wikipedia entry for bytecode refers to the fact that not all bytecodes are byte-length. At this point "bytecode" is a word unto itself; on the other hand, using "wordcode" would be making up a new word.


 * Meanwhile, the CIL portion of the CLI spec refers to the instructions as "bytecodes". --Onebit 20:47, Jun 30, 2004 (UTC)


 * I suppose one of the earliest examples of this type of computer language was called P-code (or pseudo-code), see UCSD p-System. I'd have preferred that a term like P-code to have been used instead of bytecode, but I guess it's too late now. - Bevo 21:06, 30 Jun 2004 (UTC)


 * It's a generic name and it's easy to say, sounds like a computer term, and has been used a lot. P-code, as Bevo mentioned, stands for psuedo-code, but it's really too generic of a name.  I've even seen it used to refer to Java, Perl, Python bytecode etc..  This harks back to it's more common meaning - pseudo-code is what you jot down on the back of napkins, not for processing.  That's probably why we use bytecode and not p-code.  I have only used the term "bytecode" to refer to an intermediate language while I have used pseudo-code many times to refer to generic programming.


 * Vector4F 05:10, 12 Jul 2004 (UTC)


 * It needs to be called p-Code. Pseudo-code can mean both bytecode and "compiler nonspecific" code (for writing algorithms), but p-Code is always used to refer to bytecode (or wordcode, or dword code). And these articles need to be merged. You guys aren't discussing -whether- they should be merged; everyone agrees they should. You're discussing which term is more appropriate, which deserves a whole different "disputed article" sticky note.


 * Cheburashka 20:49, 4 October 2006 (UTC)

MSIL is one kind of CIL
The microsoft research project phoenix uses the term CIL with its own intermediate language wich has nothing to do with MSIL. In my oppinion CIL stands for all bytecode languages that are 1) shared between multiple compilers and 2) meant to be compiled to machine code instead of being interpreted. Have a look at http://research.microsoft.com/phoenix

SealedSun 21:33, 27 January 2006 (UTC)


 * That's understandable, but as it says in the article, after it was standardized it dropped the "Microsoft" bit, because it is a spec developed jointly with IBM and others. Technically it would make more sense to merge the MCIL article with CIL.  But until there is an article made about "other" CILs, I wouldn't worry about it.  Foofy 00:21, 7 February 2006 (UTC)


 * Well, articles about other CILs, they'll be pretty rare because the only other implementation that counts[Mono] aims to achive Binary Compatibility with Microsoft's runtime. So, their CIL needs to mimick Microsoft's CIL. Yuvi

CIL can be targeted by a regular C/C++ compiler
This should be mentioned somewhere - CIL, notably, has pointers, unlike JVM, which uses segmented memory. Take basically any C/C++ application, feed it to a C++/CLI compiler and you get a 100% .NET executable (well, not really true in practice, but it's more an accident of implementation than anything else, like how executables produced by Visual C++ will still depend on the native C runtime DLL. No reason a C/C++ runtime couldn't be implemented on top of BCL)


 * Well, I'll invite you to add it, it's wikipedia after all:)

text/bytecode contradiction
Is CIL a textual programming language, like a scripting language, or a type of bytecode? This article claims it is both! Herorev 19:53, 19 November 2006 (UTC)


 * Agreed.
 * "Upon execution of a .NET assembly, its CIL is passed through the Common Language Runtime's JIT compiler to generate native code" - so where does bytecode come into all this? -Wootery 20:59, 24 May 2007 (UTC)


 * CIL has both a textual representation as well as a bytecode representation. The bytecode version is used when persisting the code in an .NET assembly. When disassembled, the textual representation is used. Both are semantically same. (Excuse me for ressurecting an archaic thread) --soum talk 17:06, 16 February 2008 (UTC)

Merge from MSIL
I merged MSIL into this article basically by copy-pasting the MSIL article. Please make sure all the references to MSIL/CIL/IL within the text are correct. Tocharianne 00:52, 30 December 2006 (UTC)

Merger proposal
I believe that .NET metadata needs to be merged into CIL. They are effectively the same concept. The .NET Metadata page has needed expert help on for some time, and being the expert that I am (pushing my ego), it would make sense to put into this page.  Zac  Bowling  (user 19:19, 3 December 2007 (UTC)

Disagree. A .NET *assembly* contains metadata and CIL code. That does not mean metadata is the same thing as CIL.Paul Foxworthy (talk) 00:56, 20 June 2018 (UTC)

The standard and perspectives
I think that we should keep this neutral regarding of implementations and let this article be written in the perspective of the standard. The same about other articles about this family of technologies. We should treat all implementations as equal compared to the standard. However, that does not exclude that we may compare those in each of those articles. What I mean is that we should not exclude other major implmentations like Mono. Robert Sundström (talk) 14:02, 22 December 2009 (UTC)

Neutral article
I thought it would be better to handle NGEN as a separate thing because it is not a part of the standard. It is a .NET Framework utility. There is a separate article on that now (see Native Image Generator) I have changed the information in the article of origin to Ahead-of-time to make it neutral to any implementation of the Common Language Infrastructure. Robert Sundström (talk) 20:06, 8 January 2010 (UTC)

Syntax of CIL
There is now a listing of the instruction set: List of CIL instructions.

As with information about the syntax of the CIL; I have started working on a article that. A draft is available from here. Robert Sundström (talk) 03:35, 13 February 2010 (UTC)

CIL stands for C Intermediate Language
Hey, please keep calling this artikel SIL or better MSIL. In programming-languages research, CIL is a well-established notion for the C Intermediate Language, and the respective tool implementation. Reference: G. C. Necula, S. McPeak, S. P. Rahul, and W. Weimer. CIL: Intermediate language and tools for analysis and transformation of C programs. In Proc. CC, LNCS 2304, pages 213–228. Springer, 2002. http://www.cs.virginia.edu/~weimer/2006-655/reading/necula-cil.pdf

Perhaps the question is "what was first"? But since it is possible to simply use SKIL for that MS language ... —Preceding unsigned comment added by 91.67.144.101 (talk) 20:13, 21 January 2011 (UTC)

No. The CIL acronym is in the ECMA standards, for better or for worse. Just use Wikipedia disambiguation.

CIL is a binary language, NOT human-readable
I disagree with the notion that CIL is the "lowest-level human-readable programming language" as asserted by the first sentence of the article. Just load any .NET assembly to a text editor and you'll see. What's human-readable is the ".NET assembly language", for lack of a better term, into which a tool like ildasm can disassemble the CIL code of an assembly.

CIL is a binary language for a hypothetical virtual-machine processor. To say that it's human-readable is analogous to saying that the Intel processor machine language is human-readable because it can be disassembled to human-readable Intel assembly language. The latter assertion is simply wrong. Hence CIL is NOT human-readable. 69.155.133.21 (talk) 05:12, 26 April 2011 (UTC)

Bug in example code
The example code is a piece of code whose intention is to print the prime numbers below 1000. The code has been copy paste from the java bytecode article, however in java "outer: for { continue outer}" has a different meaning than c# "outer: for { goto outer }" in the java case the continue resumes the outermost for loop, while in c# it will restart the outer for loop from scratch. The program will not finish and print the prime numbers. The CIL code indeed gives the same behavior jumping to the beginning thereby reinitializing the counter i to 2. Although this has no relevance to the article I think the example code should have the correct intended behavior. — Preceding unsigned comment added by 108.198.177.229 (talk) 02:58, 4 November 2012 (UTC)

cil syntax highlighting lost
Since the switch from Geshi to Pygments for syntax highlighting (T85794), support for 'cil' was unfortunately dropped, as can be seen with the plain text formatting on this page and others such as Assembly (CLI) and List of CIL instructions. If you want specialised 'cil' syntax highlight support again, it will need to be added to Pygments. Alternatively, if there is another language which has similar syntax, we can add that as a fallback. It looks like there are a few options, including 'cpp', 'csharp', etc. John Vandenberg (chat) 07:00, 23 July 2015 (UTC)

Confusing disambiguation link
"For the counterpart to compiled assembly in the Common Language Infrastructure, see Assembly (CLI)."

I think the disambiguation link at the top of the article is either plain wrong or poorly phrased.

My guess at the original intention of the link is:

"This article is about the text representation of CIL you get after you run a disassembler like ildasm. Binary CIL is the .NET counterpart to machine language in other environments. Machine language can be compiled or assembled from assembly language. For details of binary CIL, see the article describing .NET assembly". If that is the intent, it's wrong and should be deleted. This article is the right place to describe CIL. Assemblies contain CIL, metadata, resources and a manifest. An assembly is not the same thing as CIL and this article should continue to exist in its own right in Wikipedia.

I wonder if whoever wrote the link was confusing the .NET concept of an assembly with "assembly language" in other environments. They are not the same thing - it might have been better for Microsoft to use a different term in the first place.

If the original creator of the link meant something else, the wording should be clarified. I can't think of another interpretation. Paul Foxworthy (talk) 01:20, 20 June 2018 (UTC)