Платформа .NET независима? - PullRequest
6 голосов
/ 07 сентября 2010

.NET - это независимая от языка платформа.

Но так ли она независима от платформы?Как?

РЕДАКТИРОВАТЬ: Я слышал, .NET 4.0 разработан с учетом независимости от формы пластины!Что ж, надеюсь, что это может занять Java, если это так!

РЕДАКТИРОВАТЬ: Ответ зависит от того, как мы определяем «платформа», как .NET для платформы Windows и Mono для Java.

Но вопрос в том, разве у нас нет общей платформы разработки, которая не зависит от ОС!

Связана ли независимость ОС с независимостью платформы?

Ответы [ 14 ]

18 голосов
/ 07 сентября 2010

Это действительно вопрос того, как вы определяете «платформу».

например. .NET не зависит от платформы, если платформа является .NET, так же, как Java независима от платформы, если платформа является Java. То есть .NET (и Java) являются, в частности, платформами сами по себе (CLR, JVM). Пока существует реализация этой платформы, доступная для данной физической платформы, да, вы можете запускать скомпилированный код на ней независимо.

В конце концов, «независимость от платформы» - это так же, как «пиши один раз, беги куда угодно», маркетинг. Но на практике в настоящее время существуют реализации JVM для гораздо более конкретных платформ, чем .NET (хотя такие инициативы, как проекты Mono, направлены на изменение этого).

10 голосов
/ 12 сентября 2010

Чтобы ответить на этот вопрос, я считаю, что сначала нужно провести четкое различие между CLI и .NET:

  • CLI (сокращение от Инфраструктура общего языка ) является стандартом, и поэтому она разработана в основном для независимости от платформы .Здесь платформа относится к базовой компьютерной архитектуре, включая операционную систему.

    Хотя возможно, что стандарт требует определенных вещей, которые невозможно реализовать на всех архитектурах (я имею в виду очень ограниченные платформы,такие как встроенные системы), но, возможно, их можно рассматривать как крайние случаи.

  • .NET является основной реализацией CLI от Microsoft и работает только в системах Windows.Поэтому .NET * не не зависит от платформы.

    Обновление (август 2015 г.) : В конце 2014 г. Microsoft объявила, что планирует постепенно открывать исходные коды.части .NET Framework (особенно те части, которые относятся к серверным приложениям).В результате .NET Core от .NET Foundation .

  • .NET Core предназначен дляКроссплатформенная реализация CLI.

  • Mono также является реализацией CLI, но предназначена для работы на разных платформах, таких как Linux и Windows.Mono определенно более независим от платформы, чем .NET.


Во-вторых, существует проблема двоичной совместимости выходных данных компилятора.Поскольку стандарт CLI определяет формат файла (форма исполняемых файлов PE) и язык промежуточного кода (называемый CIL), который будет использоваться для сборок, вы можете свободно смешивать компоненты, написанные на VB.NET, C # и некоторых других языках, один раз, используя исходный код.был скомпилирован в CIL .

В этом смысле CLI (и вместе с ним все его соответствующие реализации, такие как .NET) не зависят от языка .

Интересно, что вы можете что-то скомпилировать с помощью компиляторов Microsoft .NET, и благодаря общему формату файла сборки, предписанному стандартом, вы сможете использовать сборку в проекте Mono - и наоборот.В этом смысле набор инструментов .NET можно считать независимым от платформы, но не сам .NET .Помните, что .NET Framework также включает в себя стандартную библиотеку, ориентированную на Windows (например, WPF).

5 голосов
/ 07 сентября 2010

Взято из вики :

  • Нет.DotNet не зависит от платформы.
  • Microsoft .NET изначально работает под Windows.Однако реализация с открытым исходным кодом Mono позволяет запускать ее в системах с открытым исходным кодом.Однако он не поддерживает все классы .NET, поэтому не ожидайте, что там что-либо будет работать полностью.
  • Как вы все знаете, в .NET есть разные компиляторы, такие как для C # - CSC VB -VBC и т. Д. После того, как ваш код будет выполнен, он будет преобразован в код MSIL, который является независимым.Этот код MSIL будет передан в CLR, и этот CLR зависит от платформы, т. Е. Для платформы Unix у вас должен быть тип CLR Unix, для Windows, как и для того же, поэтому мы можем сказать, что код .NET независим от платформы.*
3 голосов
/ 07 сентября 2010

Не уверен, что вы подразумеваете под своим вопросом, но если вы хотите знать, может ли приложение .NET работать в любой ОС, ответ будет отрицательным.

.NET Framework предназначена только для некоторых операционных систем, таких как Windows. Другие проекты доступны для других платформ, например Mono для Linux.

2 голосов
/ 20 августа 2014

DotNet не зависит от платформы или может быть частично независимым, в то время как Java полностью независима от платформы из-за своей JVM (виртуальной машины Java).лучший пример для понимания независимости Java. Вы можете запустить Java-программу в вашей «автомобильной» микроволновой печи, стиральной машине или на любом компьютере, если установлена ​​JVM (виртуальная машина Java).Java-байт-код является независимым бесплатным, это не имеет значения, в то время как мы использовали Mac, Windows, Unix, что угодно.

2 голосов
/ 07 сентября 2010

Существует кроссплатформенная реализация, называемая «моно».Оригинальные версии .NET от Microsoft предназначены только для Windows.

Подробнее о монопроекте: http://en.wikipedia.org/wiki/Mono_Project

1 голос
/ 07 сентября 2010

.Net отлично работает на MacOSX и Linux, если вы придерживаетесь .Net 2.0. Также были реализованы некоторые новые функции, такие как LINQ, C # 3.0 и т. Д. Необходимо учитывать, что пути к файлам, права доступа к файлам и т. Д. Не работают на 100% одинаково на разных платформах.

Забыл упомянуть, что я говорю о моно.

1 голос
/ 07 сентября 2010

В Linux есть несколько реализаций .net, возможно, и в других системах. Это называется Моно .

1 голос
/ 07 сентября 2010

Mono - это кроссплатформенная реализация .NET, но она не поддерживается Microsoft и отсутствует некоторые функции.

0 голосов
/ 04 июня 2014

Как известно .NET использовал фреймворк 4.0. Из-за этого написанный код (исходный код) конвертируется в байт-код. Это преобразование выполняется через MSIL (промежуточный язык Microsoft). MSIL - это специальный тип компилятора, который компилирует исходный код в исполняемый код. Который запускается или поддерживает любую платформу. Таким образом, благодаря использованию MSIL .NET язык является кроссплатформенным языком.

...