Когда начали появляться первые языки программирования, то существовало четкое разделение – тот язык реализован в виде интерпретатора, этот – в виде компилятора. Разработчики компиляторов старались вовсю, так как им приходилось преобразовывать элементы языка в машинно-зависимый код (код процессора), при этом с трудом сохранялся баланс между скоростью исполнения программы и ее размером. Оптимизирующие компиляторы – целая наука, которая до сегодняшнего времени до конца не проработана. И, что хуже, с появлением новых процессоров всю работу по компилятору приходилось проводить заново.

В то время уже существовала виртуальная среда исполнения Java от компании Sun, где интерпретатор преобразовывал исходный код в промежуточный байт-код, а Java-машина транслировала его в машинный. Были и другие системы программирования, старающиеся разделить преобразование исходной программы от процесса генерации кода (TopSpeed от JPI). Майкрософт оценила такой подход и реализовала собственную платформу .NET, реклама которой проходила с большим шумом. Идея была в том, что множество входных языков для .NET (Basic, C#, PascalABC, F#, J#) создавали сначала промежуточный IL-код, а затем компилятор JIT преобразовывал его в машинный. Таким образом, .NET стала многоуровневой прослойкой между аппаратурой и компилятором, причем IL-код был универсален и более не привязан к конкретному языку программирования.

Это дало массу преимущество программисту: в отличие от JVM, где была только Java, он мог использовать более широкий набор языков. При этом можно стало использовать библиотеки и классы, написанные на других языках. Дополнительный плюс – в среде .NET все типы данных имеют одинаковый размер, то есть для переноса программы на другую аппаратную платформу достаточно установить в ней саму платформу .NET. Последнее, кстати, произошло не так уж гладко – в Linux и MacOS имеются незначительные изменения в этой среде, так что истинную многоплатформенность можно считать условной.

Наряду с пользой, у .NET есть множество недостатков. Несмотря на то, что полученный байт-код программ очень компактен, приходится таскать с собой платформу .NET, которая в версии 3.5, например, занимает около 650 Мб на диске. Огорчающий «довесок», надо сказать, хотя в Висту и Семерку .NET встроен. Во-вторых, все эти преобразования кода из одной формы в другую расходуют время, то есть программы, в среднем, работают медленнее. И, наконец, на .NET языках нельзя писать программы, работающие в реальном режиме времени (управление технологическими процессами) – из-за вынужденных «остановок», связанных со сборкой мусора в памяти. В остальном же, .NET платформа весьма популярна.

captcha