Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Compilazione di programmi vuoti in vari linguaggi .NET

Un mese fa avevo scritto due post (questo e questo) su programmi vuoti in C#. Oggi vorrei completare il quadro anche per altri linguaggi .NET, con il tabellone qui sotto che spero parli un po' da sé. Non sono riuscito a individuare le opzioni giuste per il compilatore Visual C++ (cl.exe) (con i vostri commenti magari riuscirò a completare la tabella anche per C++ e, perché no, per altri linguaggi .NET).

Quattro commenti soltanto: 

  • in Visual C# .NET non c'è bisogno di referenziare assembly che supportino la compilazione e la generazione di codice (come "Microsoft.VisualBasic.dll", "vjscor.dll", "Microsoft.JScript.dll");
  • Visual Basic .NET referenzia l'assembly "Microsoft.VisualBasic.dll" senza utilizzarlo;
  • sorprendentemente, la dimensione dell'assembly per JScript .NET (3584 byte) è ben inferiore alla dimensione dell'assembly per J# .NET (20480 byte), pur corrispondendo a un codice IL ben più lungo (sabotage Java? - scherzo); lo stesso si verifica con Visual Basic .NET (2560 byte) se confrontato con Visual C# .NET (3072 byte) - non mi aspettavo :-)
  • il compilatore JScript .NET addiritura genera una classe, dal nome "JScript 0" (attenzione allo spazio bianco!).

(Aggiornamento 07/11/04): Grazie a Corrado per la parte VB.

Linguaggio .NET Compilatore IL Dimensione DLL in byte
IL ilasm .module fooil.DLL
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
1536
Visual C# .NET csc
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 1:0:5000:0
}
.assembly foocs
{
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module foocs.dll
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
3072
Visual Basic .NET vbc
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 1:0:5000:0
}
.assembly extern Microsoft.VisualBasic
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
.ver 7:0:5000:0
}
.assembly foovb
{
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module foovb.dll
.imagebase 0x00400000
.subsystem 0x00000002
.file alignment 512
.corflags 0x00000001
2560
J# .NET vjc
.assembly extern vjscor
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
.ver 1:0:5000:0
}
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 1:0:5000:0
}
.assembly fooj
{
.custom instance void [vjscor]com.ms.vjsharp.cor.VJSharpAssemblyAttribute::.ctor(valuetype [vjscor]com.ms.vjsharp.cor.VJSharpAssemblyGeneratorType,
string) = ( 01 00 00 03 31 2E 30 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module fooj.dll
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 4096
.corflags 0x00000001
20480
JScript .NET jsc
.assembly extern Microsoft.JScript
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
.ver 7:0:5000:0
}
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 1:0:5000:0
}
.assembly foojs
{
.custom instance void [Microsoft.JScript]Microsoft.JScript.ReferenceAttribute::.ctor(string) = (
01 00 4E 6D 73 63 6F 72 6C 69 62 2C 20 56 65 72
73 69 6F 6E 3D 31 2E 30 2E 35 30 30 30 2E 30 2C
20 43 75 6C 74 75 72 65 3D 6E 65 75 74 72 61 6C
2C 20 50 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6E
3D 62 37 37 61 35 63 35 36 31 39 33 34 65 30 38
39 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module 'JScript Module'
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
.class public auto ansi 'JScript 0'
extends [Microsoft.JScript]Microsoft.JScript.GlobalScope
{
}
.class public auto ansi 'JScript 0'
extends [Microsoft.JScript]Microsoft.JScript.GlobalScope
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGlobalScopeAttribute::.ctor() = ( 01 00 00 00 ) 
.method public specialname rtspecialname 
instance void .ctor(class [Microsoft.JScript]Microsoft.JScript.GlobalScope A_1) cil managed
{
.maxstack 3
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: dup
IL_0003: ldfld class [Microsoft.JScript]Microsoft.JScript.Vsa.VsaEngine [Microsoft.JScript]Microsoft.JScript.ScriptObject::engine
IL_0008: call instance void [Microsoft.JScript]Microsoft.JScript.GlobalScope::.ctor(class [Microsoft.JScript]Microsoft.JScript.GlobalScope,
class [Microsoft.JScript]Microsoft.JScript.Vsa.VsaEngine)
IL_000d: ret
}
.method public instance object 'Global Code'() cil managed
{
.maxstack 2
IL_0000: ldarg.0
IL_0001: ldfld class [Microsoft.JScript]Microsoft.JScript.Vsa.VsaEngine [Microsoft.JScript]Microsoft.JScript.ScriptObject::engine
IL_0006: ldarg.0
IL_0007: call instance void [Microsoft.JScript]Microsoft.JScript.Vsa.VsaEngine::PushScriptObject(class [Microsoft.JScript]Microsoft.JScript.ScriptObject)
IL_000c: ldnull
IL_000d: ldarg.0
IL_000e: ldfld class [Microsoft.JScript]Microsoft.JScript.Vsa.VsaEngine [Microsoft.JScript]Microsoft.JScript.ScriptObject::engine
IL_0013: call instance class [Microsoft.JScript]Microsoft.JScript.ScriptObject [Microsoft.JScript]Microsoft.JScript.Vsa.VsaEngine::PopScriptObject()
IL_0018: pop
IL_0019: ret
}
}
3584

Print | posted on sabato 6 novembre 2004 18:57 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET