2009-06-07 17 views
6

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?

+0

dlaczego pytasz? –

+8

Dlaczego pytasz, dlaczego pytam? – sblom

+0

Pytanie uzupełniające: Wiem, że 4.0 zdecydowanie ma nowy CLR, ale czy ma jakieś zmiany IL? –

Odpowiedz

5

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.

+0

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. –

0

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)

+1

Nie, sam CLR * został * zmieniony - wydaje mi się, że część .NET 2.0 SP1 była zmianą CLR. –

+0

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. –

0

..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ń