Является ли .NET платформой для однократной записи и запуска в любом месте (WORA), как утверждает Java? - PullRequest
8 голосов
/ 17 сентября 2008

Я так ярко помню лозунг Солнца ... "Напиши один раз, беги куда угодно" . Идея заключается в том, что, поскольку программы компилируются в стандартные байтовые коды, любое устройство с виртуальной машиной Java может запустить его. За прошедшие годы Java, похоже, вышла на многие платформы / устройства.

Является ли это намерением или было намерением .NET. Если да, то какие усилия предпринимаются для того, чтобы сделать это реальностью?

Ответы [ 29 ]

8 голосов
/ 17 сентября 2008

Чтобы исправить некоторые комментарии других, здесь .Net ВСЕГДА задумывался как мультиплатформенный. Вот почему Microsoft разделила пространства имен на «System. *» (Которые были независимы от платформы) и «Microsoft. *» (Которые были специфичны для Windows).

6 голосов
/ 17 сентября 2008

Существует Mono , который работает на Linux, Solaris и OS X. На практике .Net все еще в значительной степени является платформой только для Windows. На самом деле не в интересах Microsoft толкать ее на WORA, а наоборот. Кажется, кросс-платформенный, однако, есть. Многие люди были действительно параноиками по поводу Mono в Linux. Предполагаемая стратегия MS состоит в том, чтобы сначала позволить ей стать важной частью платформы приложений Linux, а затем освободить юристов. Я не ставлю свое будущее на мобильность .Net.

5 голосов
/ 24 мая 2010

Ответ очень шаткий Да. В момент включения внешней библиотеки ответ изменится на Нет.

Например, у Microsoft нет 64-битного драйвера JET. JET используется .NET для доступа к базам данных MS Access.

Любые приложения, скомпилированные для цели Any CPU, использующие базы данных MS Access, не будут работать в 64-разрядной версии Windows.

(Это игнорирует, что указанные приложения не переносимы в Mono.)

4 голосов
/ 17 сентября 2008

Microsoft никогда не предъявляла этих требований, но они предпринимают шаги на арене WORA. Например, Silverlight 2.0 будет использовать подмножество .NET Framework и будет доступен в Windows, Linux (через проект Moonlight), MacOS, Windows Mobile и телефонах Nokia.

Как уже упоминали другие, проект Mono также предоставил платформу для нескольких сред.

4 голосов
/ 22 ноября 2009

Чтобы поместить это в контекст, по мнению многих, Java никогда не давала своего обещания "Write Once Run Anywhere".

В лучшем случае вы получили "Write Once Debug Everywhere" или "Write Once выглядит как дерьмо везде"

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

Например, следующие очень успешные приложения linux, написанные с использованием привязок c # к GTK, называемые GTK # и не использующие winforms, как вы ожидаете:

Banshee - музыкальный плеер типа itunes

fspot - фото менеджер

TomBoy - программа для заметок

GnomeDo - Быстрый запуск и док

Столь же успешные приложения Windows .net не пишутся с использованием GTK # (даже если это кроссплатформенное), они пишутся с использованием winforms или WPF.

Когда Google пришел к созданию Chrome, они не пытались использовать кроссплатформенную инфраструктуру графического интерфейса, вместо этого они решили использовать собственные платформы графического интерфейса на каждой платформе. Зачем? потому что таким образом приложение правильно вписывается в свою среду, таким образом оно выглядит, ощущается и действует как свой родной для операционной системы.

В основном, когда вы пытаетесь выполнить запись один раз в любом месте, вам приходится идти на серьезные компромиссы, и в результате получается то, что на самом деле ни к чему не приводит.

Индустрия в значительной степени отказалась от высокой цели написания когда-либо запущенного где-либо, как хорошей идеи, которая не сработала на практике.

Наилучшим подходом для mono / .net является совместное использование двоичных файлов более низкого уровня и использование встроенного графического интерфейса на каждой целевой платформе. GTK # на Linux, Winforms или WPF на Windows, CocoaSharp на Mac. Таким образом, ваше приложение будет выглядеть и ощущаться как собственное приложение.

3 голосов
/ 17 сентября 2008

Не думаю, что официальным «намерением» .NET было WORA. Я думаю, что вы могли бы с уверенностью сказать, что .NET был спроектирован так, чтобы он всегда работал на будущих ОС MS. Но ничто не мешает запуску .NET на других платформах. Mono является примером реализации среды выполнения .NET для ОС, отличной от Windows.

3 голосов
/ 17 сентября 2008

С Mono мы довольно близки, а с SilverLight мы уже там.

2 голосов
/ 17 сентября 2008

Да, это была цель .NET, хотя я не думаю, что она имела такой же акцент, как в Java. В настоящее время единственный известный мне способ - это проект Mono, который создает версию CLI, работающую в Linux.

Интересно, что Silverlight фактически имеет уменьшенную версию CLR, которая может работать как на Windows, так и на Mac, что позволяет одному и тому же приложению Silverlight работать на обеих платформах без изменений.

1 голос
/ 17 сентября 2008

Да и нет. Части среды .NET являются стандартами и могут быть приняты открыто.

Например, среда выполнения (CLR) имеет переносную версию с именем Mono , которая является мультиплатформенной, с открытым исходным кодом и используется (например) Second Life.

1 голос
/ 17 сентября 2008

Теоретически язык предназначен для компиляции в байт-код, такой как Java, который интерпретируется средой Common Language Runtime, механизмом, который также позволяет нескольким языкам (не только C #) работать вместе и работать в среде .NET.

Однако Microsoft разработала только CLR для Windows. Разрабатываются другие альтернативы не-MS, наиболее заметными из которых являются Mono , реализация CLR или несколько платформ (см. Ссылку).

Так что в теории да, на практике - посмотрим.

...