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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
0
4 450
29

Ответы 29

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

Silverlight работает только на компьютерах Intel Mac и Windows. Большая часть компьютеров Mac с поддержкой PPC (особенно домашних и образовательных) перестала поддерживаться, когда Silverlight 1.1 представил среду CLR.

Andy Dent 25.01.2009 08:05

К сожалению, приложения Silverlight не работают в Linux. У проекта Moonlight Mono просто нет ресурсов для этого.

Jacob Nordfalk 27.11.2011 05:56

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

Теоретически это возможно, поскольку CLR («виртуальная машина» .Net) соответствует открытому стандарту (CLI). Вопрос в том, какие еще есть реализации этого стандарта. Mono - еще одна работа, но это единственный известный мне проект.

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

Реальная стратегия, похоже, заключается в том, что поощряется множество расширений только для Windows, так что любая открытая реализация .net может предоставлять только подмножество «реально используемой» полной среды, так что каждая программа .net действительно является скрытой рекламой Windows. из-за того, что использование на других платформах затруднительно.

Svante 12.11.2008 16:48

Не говоря уже о том, что Mono всегда отстает от релиза. Конечно, в текущем выпуске есть LINQ, но в нем все еще отсутствует большинство функций 3.5.

cdmckay 23.06.2009 07:58

Это просто разжигание страха. Microsoft поместила все версии спецификации ECMA C# и спецификации CLI под свое обещание сообщества не применять патенты на полные реализации указанных спецификаций. microsoft.com/interop/cp/default.mspx

Ron Warholic 24.05.2010 18:23

@ Рон Уорхолик: Это означает, что они будут держаться подальше от идеальных реализаций C# и CLI (а как насчет неполных реализаций?). Однако .NET framework - это нечто большее, чем это, и я не думаю, что есть какие-либо обещания в отношении других вещей. Внедрение C# и CLI мало что дает для кроссплатформенности без фреймворка.

David Thornley 24.05.2010 18:38

@David: Mono - это соответствующая реализация, поэтому нет проблем с ее неполностью. ECMA-335 охватывает большинство полезных библиотек (большую часть пространства имен System за вычетом WinForms), и есть альтернативы с открытым исходным кодом для всего, что не описано (Gtk # и т. д.). Если вы на 100% параноик, что Microsoft попытается вас обмануть, просто напишите код, используя компоненты с открытым исходным кодом, и у вас не будет проблем. В контексте вопроса это может быть не полностью WORA, но, учитывая, что компилятор Mono был построен отдельно с нуля, вы не можете ожидать намного лучшего.

Ron Warholic 24.05.2010 19:34

@ Рон Уорхолик: Хорошо, значит, Моно покрыто. Существуют ли какие-либо другие полные, соответствующие реализации (обещание патента Microsoft распространяется только на полные реализации)? Если нет, то это .NET и Mono, а все остальное - на риск разработчика, что не соответствует стилю Java. Будет ли Gtk # запускать приложения WinForms, кстати? Или стандартная программа Java будет работать (если плохо) в различных системах, а стандартная программа .NET не будет работать даже в Mono?

David Thornley 24.05.2010 20:25

Я думаю, что идея .NET заключается в том, что это «один раз записывай, запускай где угодно (по выбору Microsoft)». Однако проект Мононуклеоз постепенно меняет ситуацию.

Это похоже на Java «Запиши один раз, запусти где угодно с совместимой JVM, которая не демонстрирует совершенно другого поведения производительности и / или устаревших функций между незначительными версиями» :-)

endian 19.11.2008 19:39

ИМХО, он никогда не будет поддерживаться на таком количестве платформ, как Java.

Единственное усилие - Mono, не спонсируемое Microsoft.

Проверьте здесь на SO и на официальный сайт

На самом деле, я думаю, что спонсорами Mono являются Microsoft и Novell. Проблема с Mono в том, что он не очень хорошо организован, и они реализуют текущие функции дня, а не сосредотачиваются на получении стабильной полной версии .NET 2.0 с последующим добавлением новых языковых функций.

Scott Dorman 17.09.2008 18:55

К тому же они всегда отстают на несколько шагов.

Doug Moore 17.09.2008 19:23

Теоретически да. Сборки .Net - это байт-коды, которые при запуске преобразуются в собственный код с помощью JIT-компилятора («точно в срок»).

На практике не так много платформ, помимо Windows, которые имеют компилятор .Net JIT. Есть один для Linux, он называется MONO.

Не знаю про Mac, Sun и т. д.

Поскольку .NET доступен (официально) только в Windows, то нет, он не записывается и не запускается где угодно. Однако команда Mono делает все возможное, чтобы помочь распространить .NET за пределы Windows, но они всегда сильно отстают от официальных материалов.

Я не думаю, что изначально Microsoft планировала создать среду выполнения для каждой платформы и устройства, но они поощряли это, используя документированный (?) Промежуточный язык.

Язык без библиотек и платформ бесполезен.

mP. 24.05.2010 18:07

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

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

Действительно ли это было целью .NET? Если бы это было так, я бы подумал, что Microsoft приложит некоторые усилия, чтобы сделать библиотеку кроссплатформенной. Однако это не так. Я полагаю, что когда монопроект стал зрелым, они вложили в него немного денег, но это не значит, что они пытались перенести CLR на Linux.

Doug Moore 17.09.2008 19:24

Мультиплатформенность, конечно, была в видении ... прямо сейчас мононуклеоз хорошо справляется с реализацией среды выполнения для других ОС.

Мононуклеоз

Короткий ответ - нет, Microsoft поддерживает только операционные системы MS (включая Windows Mobile) для .NET.

Длинный ответ - существуют общедоступные проекты с открытым исходным кодом для репликации .NET framework для Linux и других ОС, особенно Rotor и Мононуклеоз. Они не поддерживают все, но вы можете развернуть много кода .NET, включая silverlight.

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

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

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

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

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

Намерение или, по крайней мере, подача были таковы. Реальность такова, что .NET не может работать на других платформах. Единственное серьезное исключение - это проект с открытым исходным кодом Мононуклеоз. По сути, это переработанная среда выполнения .NET (эквивалент виртуальной машины java), которая работает в Linux, Solaris, Mac OS X, Windows и Unix.

Он был довольно успешным, но официально не поддерживается.

Если вы думаете о том, чтобы ваш монолитный работодатель Acme corp принял .Net и Linux, забудьте об этом. На самом деле, с .NET вы работаете на машинах с Windows, точка.

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

Да, так эффективно использовать что-либо из пространства имен Microsoft.* - плохой стиль, потому что он разрушает любые надежды на переносимость.

Svante 12.11.2008 16:50

Да, .NET имеет Common Language Runtime (CLR), который является эквивалентом .NET JVM. Microsoft не поддерживает его на стольких платформах, как Java, но с помощью Моно проект можно создавать кроссплатформенные приложения с обычными оговорками.

Имейте в виду, что .NET - это больше, чем просто среда CLR. Это целая платформа.

Microsoft не поддерживает CLR ни для чего, кроме Windows. Как вы думаете, почему пинвок повсюду. Как вы думаете, почему стандартизированы были только язык и все библиотеки?

mP. 24.05.2010 18:03

Это зависит от вашего определения «где угодно». Существует несколько разновидностей виртуальной машины Java и инфраструктуры .Net. И в большинстве случаев вы не можете просто написать код для настольной виртуальной машины / фреймворка и ожидать, что он будет работать на мобильном телефоне.

Так. в некотором смысле даже Java - это не совсем чистая «напиши один раз, запусти где угодно».

Однако верно, что виртуальная машина Java в настоящее время работает в нескольких операционных системах, в то время как .Net framework работает только на устройствах Windows.

Есть одна интересная инициатива под названием «Mono», которая предлагает поддержку .Net в Linux, Solaris, Mac OS X, Windows и Unix. Читайте здесь: Моно сайт

dotNet can be, because of the CLR which is similar in function to the JVM. But i dont believe MS had any intention of it being. http://www.mono-project.com/Main_Page может быть полезно, но это не продукт MS. Кстати, как и то, как широкий спектр контейнеров j2ee затуманивает концепцию WORA для приложений j2ee, приложения ASP.NET, работающие на чем-либо, кроме IIS, на самом деле не будут работать одинаково на разных платформах.

Я не думаю, что это когда-либо было целью разработки .NET - Microsoft не проявляет особого интереса к людям, пишущим программное обеспечение для платформ, отличных от Windows ...

Однако существует проект Mono (http://www.mono-project.com), который представляет собой «инициативу открытой разработки, спонсируемую Novell для разработки UNIX-версии платформы разработки .NET с открытым исходным кодом».

Microsoft никогда не делала таких заявлений, но они ДЕЙСТВУЮТ на арене WORA. Silverlight 2.0, например, будет использовать подмножество .NET framework и будет доступен в Windows, Linux (через проект Moonlight), MacOS, Windows Mobile и телефонах Nokia.

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

Учитывая ответы других, мне все еще неясно, действительно ли Microsoft собиралась сделать .NET инициативой WORA. Я думаю, единственный способ узнать это - включить кто-то из команды Microsoft .NET вмешивается.

Поскольку мы не можем окончательно узнать первоначальные намерения .NET в отношении WORA, мы можем указать на усилия, которые пытаются сделать это реальностью (как говорилось в предыдущих ответах).

[Моно] (http://en.wikipedia.org/wiki/Mono_(software))

Это инициатива за пределами Microsoft.

Mono is a project led by Novell (formerly by Ximian) to create an Ecma standard compliant .NET compatible set of tools, including among others a C# compiler and a Common Language Runtime. Mono can be run on Linux, BSD, UNIX, Mac OS X, Solaris and Windows operating systems.

Silverlight

Этим усилиям активно занимается Microsoft. Silverlight 2.0 реализует версию платформы, аналогичную .NET 3.0, и, похоже, представляет собой попытку успешно доставить платформу на несколько платформ через браузер.

It is compatible with multiple web browser products used on Microsoft Windows and Mac OS X operating systems. Mobile devices, starting with Windows Mobile 6 and Symbian (Series 60) phones, will also be supported.

Хотя в нем не говорится конкретно о функциональности переноса в GNU / Linux, очевидно, существует сторонняя реализация бесплатного программного обеспечения под названием [Moonlight] (http://en.wikipedia.org/wiki/Moonlight_(runtime)).

Кажется, это то, что мы знаем в настоящее время, но, как говорилось ранее, Было бы очень полезно, если бы кто-нибудь из команды .NET мог подключиться к этому, чтобы правильно прояснить, действительно ли WORA была оригинальной инициативой.

Как я только что прокомментировал предыдущий ответ, Silverlight теперь поддерживается только на Intel Mac.

Andy Dent 25.01.2009 08:06

Несомненно, это должно было быть WORA. Это просто MS решила, что Anywhere and Everywhere уже будет Windows. Кто знал, что Linux и MacOS все еще будут существовать. Но, судя по всем Макам на PDC, я думаю, они были либо наполовину правы, либо наполовину неправильны!

Если бы WORA действительно была первоначальной целью, то, я думаю, к настоящему времени мы бы увидели реализации .NET на всех основных платформах, полностью поддерживаемые Microsoft. Мне кажется, я припоминаю, что в то время, когда Sun кричал «WORA» с крыш, ответом Microsoft было «Пишите на любом (языке), выполняйте на одной (платформе)» (WARO :-). Как уже упоминал кто-то другой, я думаю, что они всегда твердо поддерживали WORASLAIW (Write Once Run Anywhere So Long As its Windows)

Как вы заметили, они, похоже, немного меняют курс с Silverlight, чтобы попытаться получить часть действия Flash / Flex теперь, когда поле битвы значительно сместилось с рабочего стола в сторону браузера.

Но это мультиплатформенный Win9x / WinNT / Mobile

Чтобы поместить это в контекст, многие люди считают, что Java также никогда не выполняла свое обещание «Записывать один раз, запускать где угодно».

В лучшем случае вы получили «Пишите один раз, отлаживайте везде» или «Пишите один раз, везде как дерьмо».

Все успешные приложения на основе 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. Таким образом ваше приложение будет выглядеть и ощущаться как родное приложение.

Похоже на хрень ... Как веб-сервер похож на хрень? Он выложил htm и изображения, которые ему были даны ... Вы не можете винить врага java в этом.

mP. 24.05.2010 18:06

Предполагается, что вы используете java только для создания HTML ... игнорируя Swing или другие графические интерфейсы

Mark Baker 24.05.2010 18:24

@mP. У меня есть сервер сборки Jenkins, и веб-сервер может выглядеть как дерьмо. Сначала я подумал, что если я могу делать все, что мне нужно, с консоли, то с Дженкинсом ничего не может пойти не так. Но этот Java-сервер - один из самых болезненных для меня опытов. Интеграция с git на удивление ужасна.

Atomosk 25.04.2017 08:54

Если бы Microsoft серьезно относилась к dotnet на других платформах, отличных от Windows, они бы выпустили библиотеки классов для повторного использования другими, при этом возникла необходимость снова переписать те же библиотеки. Sun, с другой стороны, сделала это, что означает меньшее количество препятствий, если никто не хочет перейти на другую платформу. Естественно, с java все еще нужно писать виртуальную машину и делать нативные вещи, но это помогает избежать головной боли, связанной с повторной реализацией всей библиотеки классов. Стандартизация языка явилась маркетинговым ходом, призванным привлечь внимание технических специалистов. Язык без библиотек бесполезен. Попробуйте выполнить свой следующий проект только с примитивными типами ... Правильно, напишите свой собственный строковый класс и т.д. и расскажите мне, насколько полезен стандартизованный язык без каких-либо доступных библиотек ...

Ответ очень шаткий: да. В тот момент, когда вы включаете внешнюю библиотеку, ответ меняется на Нет.

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

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

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

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

Но идея та же самая по линии WORA. Как и в девизе SUN, вы можете использовать .NET framework для программирования на любых языках программирования, сертифицированных Microsoft, и запускать его с помощью интерфейса командной строки. Разве совместимость не означает то же самое, что и WORA? Фактически, я где-то читал, что идея .NET возникла из-за того, что SUN скомпилировал один раз и запустил где угодно.

ThN 12.11.2013 18:17

Другие вопросы по теме