Słyszałem wcześniej, że roszczenie .Net 3.5 nie wprowadziło zmian w IL, do którego się kompiluje. Po przemyśleniu wszystkich funkcji kompilatora, które znam, zostały wprowadzone, w rzeczywistości wydaje się, że wszystkie mogą być wdrożone w tym samym starym IL, ale nie mogę znaleźć oficjalnego źródła do potwierdzenia tego twierdzenia. Czy to prawda?Czy .Net IL zmieniło się w ogóle od .Net 2.0?
Odpowiedz
myślę, że nie było żadnych zmian, takich jak IL, ale mieć nastąpiły znaczące zmiany w realizacji CLR, aby metody dynamiczne bardziej efektywne, pozwalające na wyrażenie drzewo kompilacji itd wydaje mi się, nastąpiły zmiany w zakresie bezpieczeństwa budowania dynamicznych metod, aby umożliwić wykonywanie wyrażeń lambda generujących drzewa wyrażeń, aby wywoływały prywatne metody pracy nawet w relatywnie niskich środowiskach zaufania. Kompilator wie, że można wywołać metodę prywatną, ponieważ punkt, w którym skompilowany jest kod źródłowy, ma do niej dostęp. Udowodnienie, że to jest trudne :) Zobacz this note by Eric Lippert.
IL nie uległa zmianie, ale kompilator będzie miał. Zauważyliśmy na przykład, że wewnętrzne narzędzia w WCF tworzą całkiem różne C# dla serwerów proxy i tym podobnych, które z kolei tworzą różne IL po skompilowaniu. Zobacz także omówienie "czerwonych bitów" i "zielonych bitów" w wpisie dziennika Soma http://blogs.msdn.com/somasegar/archive/2006/05/18/601354.aspx. –
Wysyłka CLR (wersja 2.0.50727) nie zmieniła się od .NET 2.0, więc twoja IL jest identyczna. (Patrz również this SO QA)
Nie, sam CLR * został * zmieniony - wydaje mi się, że część .NET 2.0 SP1 była zmianą CLR. –
Było kilka wydań wersji 2.0.50727 CLR od czasu wydania platformy .NET w wersji 2.0. Oryginalne wydanie RTM było np. Wersja 2.0.50727.42. Na moim komputerze (Vista SP2) pełna wersja to Wersja 2.0.50727.4016. Jednak od czasu pierwszej wersji AFAIK nie było żadnych zmian funkcjonalnych. –
..i wyniku, jeśli chcesz, możesz korzystać z wielu funkcji .NET 3.5 w .NET 2.0 projektu, tak długo, jak korzystać z najnowszych kompilator:
- właściwości automatyczne
- metody rozszerzeń (wymaga trochę brudna sztuczka tho)
- inicjalizatory obiektu
- Rodzaj wnioskowanie (var kluczowe)
- Lambda wyrażeń
dlaczego pytasz? –
Dlaczego pytasz, dlaczego pytam? – sblom
Pytanie uzupełniające: Wiem, że 4.0 zdecydowanie ma nowy CLR, ale czy ma jakieś zmiany IL? –