Задать вопрос

Почему C# не кроссплатформенный?

С# работает на виртуальной архитектуре, что по сути говорит о том, что его можно запустить на чём угодно, но при этом, это не так, да и вообще у него есть проблемы с кроссплатформенностью. Взять ту же Java, которая работает схожим образом, но в неё вопрос кроссплатформенности решена абсолютно полностью. Почему так?
  • Вопрос задан
  • 9458 просмотров
Подписаться 3 Простой 5 комментариев
Решение пользователя Сергей Соловьев К ответам на вопрос (7)
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
С# работает на виртуальной архитектуре

Правильнее говорить: имеет собственный байт код. Приложения .NET не запускаются в виртуальной машине! Они компилируются JIT'ом и просто могут взаимодействовать с платформой, но нет никакой ВМ (например, песочница как в JVM отсутствует - ты видишь обычный процесс.
Почему так?

Потому что C# (и .NET Framework в частности) был ориентирован для работы под Windows и там очень много специфичных для нее деталей есть (взять ту же концепцию COM объектов).
Java изначально поддерживала другую стратегию + была поддержка Linux (на котором сидели энтузиасты), что в итоге вылилось в то, что эти самые энтузиасты полюбили Java и начали писать на ней везде (а для этого надо было иметь реализацию JVM под нужную платформу)
Сейчас ситуация меняется: .NET есть под MacOS, Linux и Windows. Это не полная кроссплатформенность, но философия другая: мы будем поддерживать несколько платформ, но делать это качественно. Сейчас упор делается в Linux и веб в частности.
Дополнительно:
- Спецификация открытая и ничто не мешает реализовать под свои платформы. Взять тот же .net nanoFramework, mono, unity
- Mono вышел в 2004 году, а значит еще с тех пор .NET был кроссплатформенным
Ответ написан