
#programowanie #java #csharp
Gdzie można zobaczyć wszystkie etapy kompilowania i działania programu? W przypadku C# z tego co czytałem (nie wiem czy poprawnie zrozumiałem) mamy:
kod który napisaliśmy my -> CIL -> bytecode -> maszyna wirtualna -> ???
Chciałbym zobaczyć jakiś przykładowy kod który przechodzi przez wszystkie te etapy i na każdym etapie go podejrzeć, najlepiej aż do samego asemblera na procesorze. Niestety nie za bardzo udało mi się coś takiego znaleźć.
Gdzie można zobaczyć wszystkie etapy kompilowania i działania programu? W przypadku C# z tego co czytałem (nie wiem czy poprawnie zrozumiałem) mamy:
kod który napisaliśmy my -> CIL -> bytecode -> maszyna wirtualna -> ???
Chciałbym zobaczyć jakiś przykładowy kod który przechodzi przez wszystkie te etapy i na każdym etapie go podejrzeć, najlepiej aż do samego asemblera na procesorze. Niestety nie za bardzo udało mi się coś takiego znaleźć.
- Najlepsze
- Wszystkie komentarze







C# kompiluje się do IL (zwany też CIL albo MSIL) który maszyna wirtualna przekłada na kod assemblerowy.
IL możesz sobie obejrzeć różnymi dekompilatorami, pewnie jakoś da się podejrzeć jaki z tego powstał kod assemblerowy ale nie wnikałem nigdy w to.
A potem co sie faktycznie wykonuje na procesorze to niebardzo, chociazby z faktu, ze w JVM czesc kodu jest kompilowana, czesc interpretowana i zmienia sie to dynamicznie w cholere.
Ale zawsze mozna wymusic calosciowa kompilacje i odpalac program pare godzin...
Na wiki jest taki opis procesu:
The execution process looks like this:
Source code is converted to CIL i.e. Common Intermediate Language, which is the CLI's equivalent to assembly language for
Nie wiem czy cię to zadowoli ale z tego co pamiętam(mam nadzieję że nic nie namieszałem) schemat wylgąda tak:
1) Piszesz sobie program w jakimś języku a możesz nawet w kilku jednocześnie.
2 ) Kompilator danego języka c#, c++, VB czy F# kompiluje program albo poszczególne fragmenty do CIL
3) Kod CIL jest w teorii niezależny od plaformy- możesz go sobie przenosić gdzie chcesz wystarczy że masz działające CLR
4) CIL możesz
Pewnie masz rację, może kiedyś znowu mnie natchnie, pogrzebię coś z nudów i przetestuję te dekompilatory.
Trochę tagami mi mieszasz, nie wiem jak w C#, ale w javie jak to w javie, wszystko można, kompilujesz, oglądasz sobie bytecode, odpalasz z -XX:+PrintAssembly i paroma innymi i masz assemblera, printowanego przy chyba każdej zmianie przez JIT-a czyli powinieneś zobaczyć niektóre etapy optymalizacji:
Losowy link z google bo nie mam nic w zakładkach:
http://mechanical-sympathy.blogspot.com/2013/06/printing-generated-assembly-code-from.html
@Khaine: Jest coś takiego jak Managed C++