Internet è il postino dei nostri tempi che nessun cane azzannerà.
Riprenderemo ora il sorgente creato nella lezione precedente per dare una rapida occhiata alla la struttura. Il codice che abbiamo scritto rappresenta una delle più semplici applicazioni possibili e visualizza la stringa “Hello World!” quando eseguito.
using System; namespace TuxJournal
{ class App
{
public static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
}L’entry point non è altro che il primo metodo che viene invocato all’avvio del programma. Ora dovrebbe essere chiaro cosa è successo quando abbiamo scritto mono hello.exe e abbiamo visto apparire la scritta “Hello World!”, il runtime (CLR) ha cercato l’entry point e lo ha eseguito, l’unica istruzione che era presente al suo interno prevede di scrivere a video la famosa stringa.
Approfondiremo ulteriori concetti relativi alle alte parti di cui è composto il programma man mano che li rivedremo in altri sorgenti. La cosa interessante a questo punto è che l’eseguibile compilato trasportato su una macchina Windows dotata di ambiente .Net verrà eseguito senza problemi, come pure su un Mac OS X con Mono e così per tutte le architetture supportate. Come abbiamo già detto il fatto che il codice venga tradotto in un linguaggio intermedio è il meccanismo grazie al quale è garantita la portabilità del programma. Nelle utility di Mono è presente un comando che ci permette di vedere dal vivo l’IL (intermediate language) corrispondente ad un eseguibile, il comando in questione è monodis. L’uso più immediato di monodis è quello di passare sulla riga di comando l’eseguibile del quale si vuole vedere il sorgente disassemblato, nel nostro caso il comando completo è :
monodis hello.exe
.assembly extern mscorlib
{
.ver 1:0:5000:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .zV.4..
}
.assembly ‘hello’
{
.hash algorithm 0×00008004
.ver 0:0:0:0
}
.module hello.exe GUID = {E5E7ED31-16F1-49BC-A4D2-ABD664BF4C13}
.namespace TuxJournal
{
class private auto ansi beforefieldinit App
extends [mscorlib]System.Object
{ method line 1
.method public hidebysig specialname rtspecialname
instance default void .ctor () cil managed
{
Method begins at RVA 0×20ec
Code size 7 (0×7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void object::.ctor()
IL_0006: ret
} end of method App::.ctor method line 2
.method public static hidebysig
default void Main () cil managed
{
Method begins at RVA 0×20f4
.entrypoint
Code size 11 (0xb)
.maxstack 8
IL_0000: ldstr "Hello World!"
IL_0005: call void class [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
} end of method App::Main } // end of class TuxJournal.App
}
IL_0000: ldstr "Hello World!"
IL_0005: call void class [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
Proseguiremo ancora nell’approfondimento dell’applicazione nella prossima puntata, e man mano “ci allontaneremo” sempre più dai dettagli di sviluppo per acquisire una visione globale delle potenzialità che Mono è in grado di offrire.
Recent comments
1 min 12 sec ago
1 week 1 day ago
3 weeks 20 hours ago
4 weeks 3 days ago
7 weeks 6 days ago
13 weeks 1 hour ago
13 weeks 3 days ago
15 weeks 5 days ago
16 weeks 3 days ago
19 weeks 22 hours ago