Serge, Thanks again for your example, yes I have read about the one in your book, a clever example that you gave with the compiled code + manual il . This is one of my interests in ilasm in general, because I would like to try some of that.
Then if I may summarize : Augmentation is not part of the ECMA standard, but can be used as a non-standard extension to it. The standard does not cover the amount of times a class may occur in a file, just the syntax of a class once found? Please excuse my ignorance. mike --- Serge Lidin <[EMAIL PROTECTED]> wrote: > I'm sorry I wasn't clear enough -- no, the class augmentation > capability isn't going anywhere, it's a very useful feature and it > will stay. What will go away, is the need for forward class > declaration in IL Assembler. The backward compatibility will not be > affected: the source with forward class declaration will compile just > fine, as well as without the forward class declaration. > > I don't know about any specific scenario of compilation to IL > Assembler that would require class augmentation. However, there are > so many different languages and even more ways to implement a > compiler, so I wouldn't be surprised if such scenarios existed. > > A typical example of class augmentation: Suppose, you need your > assembly to do some things you can only describe in IL Assembler, but > you have neither time nor ambition to write the whole assembly in > ILAsm. So you write most of your assembly in, say, C#, except the > pieces that you can't express in C#. These pieces you write in ILAsm, > in a separate file. Then you compile C# source, disassemble the > "incomplete" DLL into an ILAsm file, and re-assemble both ILAsm files > into new, "complete" DLL. > > As to your other question: no, class augmentation doesn't work across > assemblies. You can't take a class from another assembly and augment > it in your assembly. Instead, if you want to extend an "alien" class, > you'll have to derive your own class from it. More than that, the > class augmentation doesn't even work across modules within the same > assembly. Class augmentation is a purely linguistical feature of the > IL Assembler, it's not a metadata feature (such as class extension or > interface implementation). > > I don't think class augmentation across the module boundaries can be > implemented in principle: if you have half of class Foo declared in > module A.dll and another half -- in B.dll, then what will be the > resolution scope of Foo type reference? And what will the Loader do > while loading A.dll? Lay out one half of Foo and be done with it? > > Thanks, > Serge > > > -----Original Message----- > From: James Michael DuPont [mailto:[EMAIL PROTECTED]] > Sent: Monday, January 13, 2003 10:22 AM > To: Serge Lidin; [EMAIL PROTECTED] > Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED] > Subject: RE: Augmented classes and ILASM > > > Serge, > Thank you for your prompt answer and good description of the > situation. > > Unfortunatly if I have understood you properly, that means that > writing > Augmented code will also be non-portable in the end. :( > > Surly Augmentation can be shown to be a valid technique for the > separation of aspects of a program into different files, but I guess > that not many people are going to be writing large IL programs by > hand. > > Will the augmentation be feature that is only a effect of the nature > of > handwritten ILASM, or is it possible to write a compiled IL assembly > that would dictate the need for the separation of a class? > > I wonder if it possible to augment a class across two different DLLS? > > That would allow for the seperation of the aspects of a class into > multiple modules, each that would be linked into one whole. > > It looks to me to be an implementation detail in the ildasm/ilasm. I > will have to re-read the spec. looking for a statement on the layout > and location of the class metadata. I wonder if all the data about a > type/classes has to be in one section. (surly this is a silly > question > that stems from my lack of understanding) > > One can then safely remove the "forwards" section of the il that is > created by the rotor ilsdasm for testing interoperability with other > implementations of ilasm. > > I had not noticed that IL is a superset of the ECMA features yet, > thanks for pointing them out. I still have alot to learn about IL, > but > the more that I learn about, the more I am excited. > > You have really described the IL language in your book in a very > entertaining way. It is truly a good read. > > The real redeeming factor about IL in my option is the amount of type > information that is stored in the IL, this greatly aids in the > understandibily of a give set of code. > > Compared to the Parrot assembler language, IL is incredibly verbose! > > Best regards, > mike > > --- Serge Lidin <[EMAIL PROTECTED]> wrote: > > Hi James, > > > > Thanks for good words about my book. > > > > To answer your question: The class augmentation is not mentioned in > > ECMA spec, because in this spec IL Assembler is used mostly as a > mean > > to describe the metadata and IL. The class augmentation doesn't > > change anything in this regard, so it was considered irrelevant to > > the spec. > > > > You might also notice that actual implementation of IL Assembler is > a > > superset of the spec'ed features. Some features, such as TLS > > constants and unmanaged exports, were deemed > > "implementation-specific" and not subject to standardization. > > > > The necessity of forward class declaration (first declare the > classes > > including the nested ones, then declare them with the members) is > > based on the class augmentation principle. The forward class > > declaration is strongly recommended for IL Assembler v.1.0 and > > v.1.1., because of some internal IL Assembler problems. In further > > versions of IL Assembler, the internal handling of the class > > declarations is different, so there will be no need for the forward > > class declaration. > > > > Thanks, > > Serge > > > > > > -----Original Message----- > > From: James Michael DuPont [mailto:[EMAIL PROTECTED]] > > Sent: Monday, January 13, 2003 3:29 AM > > To: Serge Lidin; [EMAIL PROTECTED] > > Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED] > > Subject: Re: Augmented classes and ILASM > > > > > > Hi Serge, > > > > I am resending this, so that it will go to the whole list > > First of all, I would like to thank you for writing such a good > book, > > Inside IL assembler. I have a question about the "Augmented" > classes > > feature : > > > > I cannot seem to find the area in the ECMA spec that covers the > > ability > > to augment classes, and reopen them. You cover it in your book, and > > rotor supports it, but still, i would like to resolve exactly where > > this is covered in the spec, can you advise? > > > > In in IL produced by Rotors ILDASM, there a number for "Forwards" > > that > > are declared for clases, with the pattern : > > > > I have opened a bug report for the dotgnu ilasm based on the il > > created > > by rotor : > > > https://savannah.gnu.org/bugs/?func=detailbug&bug_id=2196&group_id=353 > > > > .class private auto ansi beforefieldinit DotGNU > > extends [mscorlib]System.Object > > { > > } // end of class DotGNU > > > > > > // =============== CLASS MEMBERS DECLARATION =================== > > // note that class flags, 'extends' and 'implements' clauses > > // are provided here for information only > > > > .class private auto ansi beforefieldinit DotGNU > > extends [mscorlib]System.Object > > { > > .field static assembly literal string Title = "DotGNU.Testing.dll" > > > > } // end of class DotGNU > > > > > > mike > > > > > > > > ===== > > James Michael DuPont > > http://introspector.sourceforge.net/ > > > > __________________________________________________ > > Do you Yahoo!? > > Yahoo! Mail Plus - Powerful. Affordable. Sign up now. > > http://mailplus.yahoo.com > > > ===== > James Michael DuPont > http://introspector.sourceforge.net/ > > __________________________________________________ > Do you Yahoo!? > Yahoo! Mail Plus - Powerful. Affordable. Sign up now. > http://mailplus.yahoo.com ===== James Michael DuPont http://introspector.sourceforge.net/ __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com