1

Тема: c# спочатку компілюється в MSIL?

Прів. От читаю тут про дженеріки https://msdn.microsoft.com/uk-ua/library/f4a6ta2h.aspx
і тут кажуть, що для кожного параметризованого типу, з котрим використовується дженерік клас, створюється дженерік клас, в котрому замінюються всі випадки використання парам. типу на відповідний конкретний тип (за винятком типів, що є посиланнями.. ну ви зрозуміли).

Так от мені цікаво, на якому етапі створюються ось ці копії класу, в котрих підставляються потрібний тип параметру?

Це воно спочатку компілює в MSIL, і .exe містить саме MSIL, а коли запускаємо .exe, то середовище виконання .net перетворює той MSIL на байткод?

2

Re: c# спочатку компілюється в MSIL?

msdn написав:

Stack<int> stack;
At this point, the runtime generates a specialized version of the Stack<T> class that has the integer substituted appropriately for its parameter.

Під час виконання MSIL коду на основі дженеріка генерується клас з вказаними типами.

Прихований текст

Байткод в Java. Native код називають бінарним.

І так, спочатку MSIL.

Подякували: FakiNyan1

3

Re: c# спочатку компілюється в MSIL?

leofun01 написав:
msdn написав:

Stack<int> stack;
At this point, the runtime generates a specialized version of the Stack<T> class that has the integer substituted appropriately for its parameter.

Під час виконання MSIL коду на основі дженеріка генерується клас з вказаними типами.

Прихований текст

Байткод в Java. Native код називають бінарним.

І так, спочатку MSIL.

а в c++ такої фігні нема, там відразу бінарний код, і тому кажуть, що с++ швидше за c# ?

4

Re: c# спочатку компілюється в MSIL?

FakiNyan
Це одна з причин. Іще в С++ нема збирача сміття, і з рантайму лінкується лише те, що треба. В той час як .Net, при запуску простого консольного додатка, підтягує в оперативку пів рантайма.

Подякували: FakiNyan, leofun012

5

Re: c# спочатку компілюється в MSIL?

Виходить C# правельніше називати транслятором, а не компілятором?!

6

Re: c# спочатку компілюється в MSIL?

sasha276
Компілятор там також є, він переганяє MSIL у машинний код, але, переважно, під час роботи програми.

Подякували: FakiNyan, leofun012