>Для чего нужна промежуточная компиляция в байткод и в чем ее минусы? Почитайте Dragon book (Компиляторы, принципы, технологии и инструментарий, Ахо, Сети, Ульман и уже Лам) xtx про структуру любого компилятора, хотябы того же gcc. Сейчас любой компилятор фактически переводит программу в некий байткод, выполняет отпимизации и потом байткод переводит в нативный. Для чего это сделано - для упрощения: перевод в байткод является language specific задачей, оптимизация и перевод в нативный код - уже общая задача для всех языков. Что же сделали в .net - разорвали компилятор на две части. Первая занимается компиляцией кода в IL, вторую обозвали vm и она занимается jit компиляцией в нативный код и исполнением. Для тех кому сильно чешется даже существует утилитка ngen.exe, которая сгенерит нативный образ для сборки.
>А нужна она для обеспечения кроссплатформености, а минусы ее:
>1. Меньшая скорость работы приложений.
Это у жабы так, у неё стековая виртуальная машина которая на x86 ну вообще никак не ложится, в отличии от регистровой машины .net.
>2. Большее потребление ресурсов: CPU HDD и главное ОЗУ.
У .net достаточно скромные требования, немного выше, но сейчас это не критично.
>Какие нафиг примущества тогда у нее может быть, ее и с java
>сравнить нельзя, и не с любым компилируемым языком.
читай выше.
>А если у клиента соляка стоит на серверах, или не дай бог
>Linux? то конечно вы ему порекоммендуете ему Windows Server Enterpise Edition.
Я уже понял что вы далеки от программирования и разработки софта. Вначале всегда идёт ТЗ. Если у клиента солярка или другой юникс/не-юникс, тогда и разработка будет идти на чём-то другом (у меня были в основном c/c++/java в рамках проекта в разных пропорциях)