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

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

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

На этот вопрос нельзя ответить сразу по двум причинам:
1. C# - это язык, а язык не может быть кросс-платформенным, так как платформы в разрезе языка и нет.
2. .NET уже много лет как кросс-платформенный.
Начиная с уже мейнстримного .NET 8, заканчивая mono и всякой экзотикой типа nano framework


но при этом, это не так

Ничто нельзя запустить на "чём угодно"


но в неё вопрос кроссплатформенности решена абсолютно полностью

Если вопрос "абсолютно полностью" решён, то почему я не могу запускать программы, написанные на Java, на любом железе?
Ответ написан
Комментировать
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 был кроссплатформенным
Ответ написан
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
C# кроссплатформенный. как и dotnet 8. другой вопрос - в линукс и осикс нет com.. к примеру.. нет winforfms... и это не проблема C#..
есть тот же qt, и есть его.. ну если не порты, то обертки точно...
вы сами не понимаете сути вопроса.. такое чувство, что вы хотите winforfms везде.. опробуйте MAUI
Ответ написан
@Jhayphal
Посмотрите Avalonia UI, Asp.net 8, Maui, etc. Ещё как кроссплатформенный. Более того, при этом высоко производительный. Особенно если юзать native aot.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Le0Wolf
Можно подробнее про проблемы с кроссплатформенностью? Какие проблемы в этом направлении решены в java, но не решены в c#? На Windows работает, на MacOS работает, на Linux работает, на различных мобильных платформах тоже работает и даже вроде есть реализации под голое железо (микроконтроллеры и все такое). Что может Java такого, что не может c#?
Ответ написан
Комментировать
@DeskundigeICT
C# - это язык программирования, который был разработан компанией Microsoft в конце 1990-х годов. Он основан на концепции виртуальной машины, которая называется Common Language Runtime (CLR). CLR - это среда, которая исполняет код, написанный на C# или других языках, поддерживающих стандарт .NET. CLR обеспечивает некоторые преимущества, такие как управление памятью, безопасность, отладка и т.д.

Однако, CLR не является универсальной виртуальной машиной, которая может работать на любой платформе. Она зависит от операционной системы и архитектуры процессора, на которых она запускается. Поэтому, для того, чтобы C# был кроссплатформенным, нужно иметь реализацию CLR для каждой платформы, на которой хочется запустить код на C#.

Изначально, Microsoft разрабатывала CLR только для своей операционной системы Windows, которая была самой популярной и востребованной на рынке. Это означало, что C# был привязан к Windows и не мог работать на других платформах, таких как Linux или Mac OS. Это было одним из основных отличий от Java, которая имела виртуальную машину Java (JVM), которая была доступна для многих платформ и обеспечивала полную кроссплатформенность.

Со временем, появились проекты, которые пытались сделать C# кроссплатформенным, используя открытые стандарты и спецификации .NET. Самым известным из них является проект Mono, который начался в 2001 году и продолжается до сих пор. Mono - это реализация CLR и библиотек .NET для Linux, Mac OS и других платформ. Mono позволяет запускать многие приложения, написанные на C#, на разных платформах, но не без ограничений и проблем. Например, Mono не поддерживает все возможности и технологии, которые есть в оригинальном .NET Framework от Microsoft, такие как Windows Forms, WPF, ASP.NET и т.д. Также, Mono может иметь различия в производительности, совместимости и стабильности по сравнению с .NET Framework.

В последние годы, Microsoft стала более открытой и поддерживающей кроссплатформенность. Она выпустила новую версию .NET, которая называется .NET Core, которая является модульной, легковесной и кроссплатформенной реализацией CLR и библиотек .NET. .NET Core поддерживает Windows, Linux и Mac OS, а также позволяет разрабатывать веб-приложения, мобильные приложения и микросервисы на C#. .NET Core является будущим .NET и планируется объединить его с .NET Framework и Mono в единую платформу, которая будет называться .NET 8.

Таким образом, можно сказать, что C# становится все более кроссплатформенным, но это не значит, что он работает на чем угодно. Он все еще зависит от наличия реализации CLR для конкретной платформы, а также от совместимости и поддержки различных технологий и библиотек, которые используются в приложениях на C#. В этом смысле, Java все еще имеет преимущество в кроссплатформенности, так как JVM более универсальна и доступна для большего числа платформ.
Ответ написан
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Если почитать обучающий портал A tour of the C# language
https://learn.microsoft.com/en-us/dotnet/csharp/to...
то там вообще нигде не пишут про кросс-платформенность.

Мне кажется что этот миф пошел из обсуждения что платформа .Net создавалась MS в противовес
Java чтобы иметь конкурентное преимуществое для чисто своей Windows-разработки но при этом
обеспечить удобства (Managed Memory, CLR e.t.c).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы