Обсуждение:Сравнение C Sharp и Java

Последнее сообщение: 7 лет назад от 217.118.83.162 в теме «Мобильные приложения»

Нарушение ВП:НТЗ править

Статья "Сравнение C Sharp и Java" написана с точки зрения человека изначально приверженного операционной системе Windows и языку C#, а поэтому, по моему мнению, не совсем объективно. Я попробую исправить данный недостаток этой несомненно интересной статьи. Среда Java изначально создавалась для реализации кросс-платформенности СКОМПИЛИРОВАННОГО в байт-код текста программы 85.249.160.32 09:22, 7 августа 2008 (UTC) . Это была основная цель разработки. То что побочным эффектом стало несомненно более быстрое и удобное программирование, по сранению, для примера, с C++, было прямым следствием переносимости кода Java. Поясню. Например нам нужно работать со звуком, записывать звук с микрофона, либо выводить звук на колонки. Чтобы это было возможно сделать, нужны были объекты Java для работы со звуком, которые бы работали одинаково на разных операционных системах. Эти объекты были созданы очень интуитивными и легко используемыми. Не нужно стало тратить время на разработку громоздкого кода, работающего со звуком под Linux и ещё более громоздкого под Windows. Следствием этого явилось ускорение разработки и уменьшение числа ошибок. То же справедливо для многопоточного программирования, встроенного в Java и т.д. Основная мысль, которую я хотел бы донести, это то, что удобство разработки программ на Java стало следствием переносимости языка, а не наоборот. Успех Java явился толчком к созданию C#. C# изначально создавался для удобства разработки программ, это было изначальное условие. Имея перед глазами такой эталон как Java, это было не сложно. Даже сторонники C# признают, что C# - язык персональных компьютеров, с Intel совместимыми процессорами, работающими под операционной средой Windows. Да, в этой нише, Java немного (подчёркиваю немного) уступает С#, например по GUI. Но сфера применения кода, написанного на C# намного уже, чем кода написанного на Java. Если вы написали алгоритм на Java, использующий данные в fixed-point формате, с возможной многопоточностью, то данный алгоритм, в СКОМПИЛИРОВАННОМ в байт-код виде, будет работать на всех устройствах и системах имеющих виртуальныю Java машину, начиная от сотового телефона, заканчивая, мощнейшими серверами, независимо от вида операционных систем и типов процессоров. Ничего подобного C# не может. Поэтому сравнение Java и C# не вполне корректны. Краткие выводы: Если вы разрабатываете код только под Intel совместимые процессоры, работающие под операционной средой Windows, то вам подойдёт как C#, так и Java. В С# вы получите небольшой выигрыш по скорости и по качеству GUI. За Visual Studio с C# вам (или вашей фирме) нужно будет выложить немалые деньги. За Java вы не будете платить ничего, весь SDK и IDE NetBeans абсолютно бесплатны. Если же вы хотите чтобы ваш откомпилированный код работал на большинстве существующих операционных систем и на процессорах, отличимых от Intel, то реальной альтернативы языку Java просто не существует.Ответить

Жава была разработана Sun-ом главным образом с целью создания рынка для серверов способных её тянуть. Сам язык прост но абсолютно не выразителен и не расширяем. Общеизвестно (см. статистику в гугле), что большинство программистов на Джаве - жители Индии, многие из них не имеют достаточного образования. Язык устроен таким образом, что на нём очень легко начать программировать, довольно сложно прострелить себе ногу, и, в принципе, можно разобраться в коде, написанном даже программистом с очень низкой квалификацией. Но любой разработчик на джаве рано или поздно сталкивается с проблемой, когда его производительность начинает ограничиваться скоростью набора бойлерплейт-кода на клавиатуре.
Данный коментарий явно написан сторонником языка Java, плохо знающим что такое .NET в целом. Дело в том, что сам по себе байткод .NET открытый и предпологает возможность написания JIT для любой аппаратной и програмной платформы. Тоесть сам по себе .NET (а следовательно и C#) является настолькоже кроссплатформенным, насколько и Java. Естественно существуют некоторые библиотеки, работающие только под Windows (например, System.Windows.Forms), однако ни Swing, ни AWT тоже не будут в работать на мобильной платформе. ALEX KS 00:15, 2 февраля 2008 (UTC)Ответить
Это технически. Но правами на .Net владеет компания Microsoft. И .Net платформа защищена патентами. Так что делать свои реализации очень сложно. Фактически проект Mono вынужден постоянно обходить патентные ограничения MS. --A.I. 20:13, 4 февраля 2008 (UTC)Ответить
Ну так возьмите и прямо исправьте статью, указав на фактическое отсутствие кроссплатформенности C# и ограниченность возможностей того же Mono. Читателей интересуют не только теоретические изыскания на тему полезности управляемого кода, но и фактическое положение дел. Правьте смело. 79.120.48.100 20:34, 8 марта 2008 (UTC)id-alex@yandex.ruОтветить
Я считаю, что если сравниваются языки, тогда и сравнивать нужно только их, если это в корню не противоречит возможности создания кода на целевой платформе. Я о том, что, насколько мне пока ясно, ничто не мешает создать компилятор именно с языка C#, который создавал бы байт-код для JVM, а не CLR. Кстати, насколько это возможно, учитывая привязку того же C# на BCL? (Цыба 21:35, 4 июля 2009 (UTC))Ответить

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


Поправил статью, в основном трогал только моменты, которые относятся непосредственно к Java. — Эта реплика добавлена участником Leonidv (ов)

Часть правок (с которыми не согласен) откатываю. --М. Ю. (yms) 12:39, 11 июня 2008 (UTC)Ответить


Автор пишет слова о компиляции большими буквами, вводя читателей в заблуждение. Результатом компиляции является байт-код. Байт-код не имеет отношения к коду процессора. Это приводит к невозможности

оптимизации под конкретный процессор. При ИНТЕРПРЕТАЦИИ байт-кода или компиляции по требованию MSIL-кода, которая происходит в момент запуска и работы программы, делать оптимизацию невозможно, так как это приведет к еще большему ТОРМОЖЕНИЮ выполнения кода.

А почему никто не упоминает, насколько развиты и разработаны фреймворки на обеих платформах? Скажем, на Java имеется мощнейший фреймворк Sping, который уже имеет собственное распространение и для .NET. Хотя разработчики утверждают, что все-таки на Java он идет впереди. Все эти могучие идеи инверсии контроля и внедрения зависимостей... Или взять например фреймворки в Java, осуществляющие ORM (Hibernate и др.): а что такого есть у .NET? Вот это интересно было бы посравнивать!--92.112.231.186 13:23, 8 июня 2010 (UTC)Ответить

Конечно есть! ADO.NET Entity Framework, NHibernate, etc. Многие удобные библиотеки были портированы с Java (учитывая особенности и возможности .NET'а), другие - созданы с нуля, к примеру, Sandcastle. AlexeyM 12:22, 23 ноября 2011 (UTC)Ответить

Полная кроссплатформенность Java на уровне скомпилированного файла крайне сомнительна. Пишем программу на JSE. Компилируем. Пытаемся запустить на мобильном телефоне. Даже на уровне алгоритмов переносимость не всегда возможно достичь. В .NET ситуация очень похожа. Точно могу сказать, что приложение, скомпилированное для WM, может корректно работать на обычной Windows, если не используются компоненты доступные только в .NETCF. Также есть редкие моменты когда некоторые участки программы на уровне исходного кода будут работать как на полном фреймворке так и на компактном, но на уровне байт кода несовместимы. Неплохобы осветить в статье реальную кроссплатформенность на уровне как исходного так и бай кода. Поговорим о среде разработки под .NET. Точного лицензионного соглашения на Microsoft Visual Studio 2010 Express не смотрел, но компания намекает что «The Visual Studio 2010 Express is a set of free tools». Насколько их понимание «free» совпадает с нашим я не уточнял. Mr Greene 15:13, 3 августа 2010 (UTC)Ответить

Технически, на уровне IL скомпилированный код для .NET совместим со всеми реализациями CLR одной и той же версии, однако на разный платформах доступны различные библиотеки, поэтому десктопное приложение обычно нельзя запустить на мобильном устройстве без изменений. Но существуют способы этого добиться: например, использовать Silverlight или Xna, если речь идёт о Windows Phone 7. Касаемо Visual Sudio Express: её допустимо использовать в том числе и для разработки коммерческих приложений см. вопрос на StackOverflow. AlexeyM 12:37, 23 ноября 2011 (UTC)Ответить

Настольные приложения править

Я поставил там POV и очень смеялся. Оказывается, «профессионализм разработчиков» должен состоять в умении затыкать дыры в неудачном дизайне языка и среды. --М. Ю. (yms) 13:30, 11 июня 2008 (UTC)Ответить

"Профессионализм" должен состоять, говоря вашим языком, в том, чтобы понимать что происходить. К сожалению, .NET разработчики в VS не всегда себе ясно представляют, что они делают и для чего. Фактически, они могут даже не понимать смысла слов "делегирование". В Java такое не возможно - хочешь не хочешь, а разобраться с базой ООП придется. Leonidv 22:00, 17 июня 2008 (UTC)Ответить

Фразу «В то же время программист на Java должен обладать более высокой спецификацией, чем программист на C#» надо как-то переформулировать, чтобы было понятно, что речь идёт о стартовом уровне (начальном пороге). И слово «спецификация» здесь не в тему. --М. Ю. (yms) 15:41, 18 июня 2008 (UTC)Ответить
"спецификация" это вообще опечатка была :) Насчет делегирования - я в этом еще раз убедился, читая на форуме "делегатов в Java нет". Отдельного слова для них нет, а сами они очень даже есть Leonidv 12:12, 22 июня 2008 (UTC)Ответить

А вы думали зачем Microcoft платформа .Net ? править

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

Из раздела Внутренние классы править

класс, объявленный внутри другого класса, может иметь доступ к нестатическим (экземплярным) членам родительского класса, то есть «знает о this»;

Слово "родительский" всегда и везде обозначало "класс, от которого наследуется данный". В данном случае уместнее будет использовать что-нибудь типа "внешний". Оставляю на усмотрение сообщества выбор правильного варианта 81.25.40.74 19:14, 4 октября 2008 (UTC).Ответить

Согласен, но лучше бы пруф.

Мобильные приложения править

"На рынке смартфонов и КПК быстро набирает силу Windows Mobile, она же становится предпочтительной платформой для написания тяжёлых бизнес-приложений. Windows Mobile основана на платформе Windows CE и использует .NET Compact Framework (.NETCF) — подмножество полной версии .NET Framework с дополнительной функциональностью для мобильных устройств." Не знаю как с тяжелыми бизнес приложениями, но на рынке смартфонов и КПК Windows Mobile теряет позиции, а не набирает силы. В этом легко убедится посмотрев статистику на рынке мобильных ОС. А вот что сейчас набирает силу, так это Android, а Android это Java. 89.112.28.117 22:34, 4 ноября 2009 (UTC)Ответить

Cогласен - Winand 12:18, 19 июня 2010 (UTC)Ответить
C# и CLI не зависят от конкретной платформы, на них существуют международные стандарты (к примеру ECMA-334 и ECMA-335), поэтому существуют реализации под другие платформы. Для Android'а существует MonoDroid, базирующийся на Mono. AlexeyM 12:46, 23 ноября 2011 (UTC)Ответить

Теперь Xamarin (бывший MonoDroid) входит в стандартную поставку Visual Studio. Т.е. фактически для мобильной разработки разницы нет? 217.118.83.162 19:08, 15 ноября 2016 (UTC)Ответить

Из раздела Методы править

В Java параметры метода передаются только по значению, но поскольку для экземпляров классов передаётся ссылка, ничто не мешает изменить в методе экземпляр, переданный через параметр.

По значению в Java передаются только примитивные типы, всё остальное - через ссылку.Zefick 09:41, 11 января 2010 (UTC)Ответить

Из раздела Массивы и коллекции править

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

В Java многомерный массив создаётся одним оператором. Память может быть выделена под каждую строчку, но неявно, а может быть для этого JVM сделает всего-лишь одно выделение памяти, а вотом распределит указатели по массиву. Так что про циклическое выделение памяти тоже может быть не верно. Но вызов new нужен всё равно один в любом случае.Zefick 09:41, 11 января 2010 (UTC)Ответить

Сравнение лицензий править

Этот раздел устарел годика эдак на три. Уже совсем иные реалии в мире Java, Oracle ведёт совсем не такую политику лицензирования как Sun.

Подписывайтесь в обсуждениях. Критиковать легко, делать — трудно. Возьмитесь — обновите раздел до актуального состояния, а? --dm обсужд. 07:26, 9 ноября 2010 (UTC)Ответить
Не вижу ни малейшего смысла подписываться ойпишнеком. Сделайте подпись только датой, как на лурке.

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

В первом сообщении говорилось что права на C# принадлежат Wicrosoft, так права на Java принадлежат Oracle Corporation (ранее Sun Microsystems) (см Java) и они очень ревностно относятся к этому(даже поругались с Apple и Google)

"В Java параметры метода передаются только по значению, но поскольку для экземпляров классов передаётся ссылка, ничто не мешает изменить в методе экземпляр, переданный через параметр." ^ как то расплывчево звучит, нельзя по четче - только по ссылке


Да еще некоторые вещи присутствующие в C# будут реализованы в Java через 2-3 года 2012-2013 см сайт Oracle по планам развития Java

Attributes, reflection править

Жутко недоволен реализацией от мс. Это что бы не было обвинений в тенденциозности. В статье стоило бы сравнительно описать рефлексию и атрибуты в ms реализации c#. На яве давно не, что там соответствует? Напишите сюда, покопаемся, вспомним-разберемся. Немаловажный аспект. Вот лично для меня, это расширение языка такой же важности, что и функциональное программирование. А ведь еще и не развито и не использовано толком. 13:06, 27 августа 2011 (UTC)

Что именно не устраивает в текущей реализации? Рефлексия в .NET не зависит от языка, так как реализована в CLI на уровне библиотеки. AlexeyM 12:41, 23 ноября 2011 (UTC)Ответить

Значимость предмета статьи править

Значимость предмета статьи несомненна. Вообще, сравнение любых двух языков программирования, особенно, довольно близких по синтаксису и идеологии (происхождению), это крайне важный энциклопедический материал. Я снимаю шаблон {{Значимость}}, но все остальные претензии к статье, которая нуждается в существенной переработке, остаются в силе. --OZH 11:06, 18 ноября 2013 (UTC)Ответить