Будет ли Java догонять C #? [закрыто]

17

Сегодня я опубликовал вопрос о том, какой язык C # или Java будет лучше изучать. У меня были отличные ответы. Одна вещь, которая подошла, была то, что, возможно, Java теперь отстает от C # с новыми функциями. Я видел некоторые веб-ссылки и большинство указывало на то, что было в C #, а что нет на java.

Так что мой вопрос ко всем вам: снова догонит Java C #? И если бы вы догадались, где он будет стоять через 5 лет. Будет ли в нем все то, чего сейчас не хватает? Как насчет Java 7?

MandyNelson
источник
7
-1, предположительный и гипотетический. Изменился бы на +1, если заголовок изменился на «Является ли Java позади C #, и если да, то как он может догнать?»
Николь
2
Будут ли Java и C # догонять Scheme? Дайте мне знать, когда вы получите анонимные функции первого класса, замыкания и продолжения.
dietbuddha
5
@dietbuddha: Я предпочитаю не засорять мой код символами )'s', большое спасибо.
Джош К
1
@JoshK ты бы предпочел заполнить его; и}, верно? LISP, кажется, использует много скобок, потому что каждая функция использует их, и вы вкладываете в нее много функций.
ЮрийАльбукерке

Ответы:

32

Языковые возможности - очень малая часть того, что делает Java и C # галочкой. В конечном итоге это части более крупных экосистем J2EE и .NET.

Оба имеют свои сильные стороны и должны вырасти в следующие 5 лет.

Шамит Верма
источник
19
+1 за «Языковые функции - очень малая часть того, что делает Java и C # галочкой»
Крейг,
1
Да, API и библиотеки во многих отношениях намного важнее.
Майкл К
2
Договорились, но вопрос касается языка, а не экосистемы;)
Филипп
1
Я действительно ненавижу голосовать +1 за очень короткие ответы, но вы кое-что здесь. Очень хотелось бы, чтобы вы расширили этот ответ.
Николь
3
Вопрос говорит: «какой язык C # или Java было бы лучше для меня изучать» и «где он будет стоять через 5 лет», оба эти аспекта больше зависят от экосистемы, чем от языка.
Шамит Верма
16

Я бы сказал да, пока Oracle не вошел в картину. Что печально, потому что я действительно наслаждался скачком в функциях, которые были в Java и C # в течение последних шести лет или около того.

Джесси С. Слайсер
источник
2
Как вы думаете, почему Oracle будет саботировать Java?
2
Я просто не думаю, что корпоративная культура там обладает той же ловкостью, что и у Sun при внедрении функций.
Джесси С. Слайсер
8
@Glenn, судебный процесс Oracle против Google показывает мне, что они не «получают» открытый исходный код, и это означает, что крупные компании с меньшей вероятностью выберут Java для будущего развития. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena
Oracle может точно не "винт Java", но JVM. Сейчас у них есть проект по объединению двух реализаций JVM, которые они приобрели у BEA и JRockit для HotSpot для Sun. Пока они занимаются этим, они полностью исключили проект Da Vinci Machine.
vartec
2
Я замешан на Oracle. Костюм Android является своего рода выключением, но они вносят свой вклад в ядро ​​Linux и являются основными разработчиками файловой системы Btrfs. Похоже, Oracle «получает» открытый исходный код лучше, чем Microsoft, но это мало что говорит.
Jonescb
6

Как язык, я не расширяю Java, чтобы добавлять инновации со значительной скоростью, прежде всего потому, что те в сообществе открытого исходного кода, которые находятся на переднем крае, с большей вероятностью сосредоточатся на более новых языках JVM, таких как Scala, Clojure, Groovy, JRuby и JPython.

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

Эрик Уилсон
источник
5

Большой знак вопроса здесь - Oracle. За последние пол десятилетия Sun действительно замедлила работу Java. Многие в сообществе Java надеялись, что Sun раскрутит Java или продаст его кому-то, кто вложит много ресурсов и усилий. Хотя Oracle, безусловно, мог бы сделать это, это крупная компания с большим количеством групп со своими собственными интересами. Я думаю, и это только то, что Oracle позволит Java стагнировать и использовать его в основном как инструмент для патентных исков.

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

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

Джейсон
источник
1
Существуют сторонние библиотеки для преодоления проблем с датой и временем.
Майкл К
1
Oracle использовал Java вместе с PL / SQL в качестве языка для программ, которые жили в базе данных, по крайней мере, с 10g. Oracle интенсивно использует Java. Означает ли это, что они будут использовать Java в нужном мне направлении, сомнительно, но они не собираются его убивать.
Дэвид Торнли
4

Нечего догонять, поэтому вопрос не имеет смысла.

Тот факт, что Java точно не копирует C #, не означает, что он каким-то образом «уступает», он просто другой. Можно также спросить, когда C # «догонит» Cobol.

jwenting
источник
23
Я не согласна C # и Java во многом похожи, гораздо больше, чем C # и COBOL. Я помню, как однажды прочитал, что «C # - это то, чем должна была быть Java». Подводя итог, я считаю, что C # и Java напрямую конкурируют, и, работая с обоими, я должен сказать, что у меня много возможностей C # в Java, но не наоборот ...
Филипп
Нашли ли вы ситуации, когда вы могли бы использовать C # или Java? Т.е. ситуации, когда разработчик мог сделать выбор. Обычно магазин уже имеет предпочтения / предубеждения / предвзятость, и выбор между языками в одной экосистеме будет. Например, между Java и Scala или между C # и F #
Shamit Verma
2
Я не согласен со всеми проектными решениями, принятыми C #, но, как и Java, они сознательно приступили к замене C ++, и на примере Java перед ними они намеренно добавили некоторые критические функции, которые Java не учитывает. Так что, если вы считаете, что эти функции хороши, тогда Java должна «догнать» C # В частности, возможность создавать встроенные объекты, чтобы все объектно-ориентированное не было раздутым, и я думаю, что const. Делегаты - это новая функция, которую они встроили, а не то, что они не могут быть построены как структура данных библиотеки. Я бы сказал, что они оба должны догнать C ++!
Дов
@Philippe, не увлекайся его встречным примером. Он мог бы так же легко сказать «Когда C # догонит Java?». Его точка зрения по-прежнему заключается в том, что нет объективной причины, по которой Java стоит за C #; это все личные предпочтения.
Jonescb
Никто не говорит о репликации, но в C # есть некоторые важные функции, которые Java только рассматривает для реализации NOW (например, лямбда-выражения, которые эмулируются с помощью уродливой реализации объекта).
ЮрийАльбукерке
4

Вопрос о том, стоит ли C # или Java впереди другого, остается спорным, но вместо того, чтобы сосредоточиться на языковых особенностях того или другого, я бы предпочел сосредоточиться на том, что связано с развитием языка. Единственный факт, с которым, я думаю, никто не поспорит: Java старше C #.

Проблемы с изменением работы языка:

  1. Если вы нарушаете обратную совместимость, вы бесите много разработчиков
  2. Если вы злитесь на своих разработчиков, они переходят на другой язык, который поддерживает их лучше. Следовательно, нет причин продолжать работать с языком.
  3. Ява приняла некоторые дизайнерские решения на раннем этапе, когда требовалось вывести язык на рынок. Надежда состояла в том, чтобы вернуться и заполнить некоторые пробелы. Эти решения все еще преследуют язык, потому что сопровождающие не хотят нарушать первый пункт.
  4. Ява открыла множество новых территорий и раз и навсегда доказала, что язык, на котором собирается мусор, можно воспринимать всерьез - и достаточно хорошо для большинства людей.
  5. C # появился позже и усвоил много уроков, на которые наткнулся Java, - поэтому они смогли избежать некоторых технических ограничений, которые Java имеет из-за пункта 3.
  6. Новые возможности языка должны решить реальную проблему разумным способом. Не каждая языковая функция имеет смысл в контексте языка, к которому вы пытаетесь добавить ее. Вот почему, несмотря на их сходство, Java и C # по-прежнему будут разными языками.

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

Одна из особенностей Java, возможность написать программу для Windows и развернуть ее на Unix или Mac, никогда не будет реализована напрямую при поддержке Microsoft. Почему ты спрашиваешь? Это не потому, что Microsoft зла (правда это или нет, мне все равно). Это потому, что они усвоили урок, которого Sun никогда не делала: пишите один раз, где бы вы ни работали, коммодифицируя операционные системы и оборудование. Если вы заботитесь о том, чтобы заработать на продажах вашей операционной системы, вы не хотите делать простой замену и при этом работать с приложением. Если вы это сделали, вы не сможете получить прибыль от операционной системы, потому что всегда есть более дешевые варианты.

Берин Лорич
источник
Почему важно, что Mono не управляется MS? Моно работает очень хорошо. Не стоит недооценивать это.
Кугель
Это не исследование Mono, но не все .NET API поддерживаются напрямую. Хотя они добились больших успехов и прошли довольно долгий путь, существуют ограничения, особенно в настольных приложениях. Не уверен, насколько близко подошел Mono или может ли он легально реализовать Winforms или WPF. Однако для работы исключительно на стороне сервера я уверен, что она совместима. Недавно не смотрел на это.
Берин Лорич
Я думаю, что «возможность написания программы для Windows и ее развертывания на Unix или Mac никогда не произойдет напрямую при поддержке Microsoft» теперь опровергнута
JoelFan
В то время, когда я написал ответ, это не так. Итак, на C # Microsoft написала среду выполнения и библиотеки, которые работают на Mac и Unix? Mono не напрямую от Microsoft, хотя над ней могут работать некоторые разработчики Microsoft. У меня все еще есть сомнения по поводу настольного приложения, созданного на WPF, для Linux. Только на стороне сервера может быть в порядке.
Берин Лорич
1

Java действительно не нуждается в новых «функциях» больше, чем C или C ++. Это хорошо разработанный язык для объектно-ориентированной разработки. Дополнения могут быть сделаны в создании библиотек для выполнения широкого спектра задач. То же самое относится и к C # - большинство функций добавляются, чтобы заставить язык делать больше вещей. Лично я думаю, что большинство из этих функций не являются необходимыми - указатели в ОО на самом деле слишком бесполезны, если вы не работаете на аппаратном уровне (в этот момент, вероятно, лучше использовать что-то вроде C). Кроме того, работа на виртуальной машине должна затруднить прямой доступ к оборудованию, если не сделать невозможным.

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

Майкл К
источник
7
Язык без правильной лямбды не годен для использования. Если бы эта функция была добавлена ​​в Java, я бы согласился с остальными вашими аргументами. Без этого Java вообще не расширяема, она практически не используется.
SK-logic
2
@Craige Лично (мнение) Мне не нравится иметь синтаксические особенности. Я хочу, чтобы язык был вне моего пути - очень минимальный.
Майкл К
1
@Michael - мне не удается нарисовать связь между языком, имеющим синтаксические особенности, и языком, который вам мешает. То, что в языке есть функции, не означает, что вы должны их использовать. Возьмите, например, методы получения и установки C #. 90% времени, это сэкономит вам написание сотен строк избыточного кода. Вы все еще можете написать свой собственный, если хотите.
Крейг,
1
@Craige, если у языка есть особенности, ваши инструменты должны знать о них, по крайней мере. И сила экосистемы Java заключается, прежде всего, в ее инструментах, которые полностью возможны из-за минималистической простоты языка.
SK-logic
1
@SK, я не понимаю, как можно сказать, что язык с лямбдой непригоден для использования. В C нет лямбд, и C ++ получает их в C ++ 0x, и люди используют эти языки десятилетиями. Просто потому, что вы предпочитаете функциональное программирование, которое не делает недействительным программирование.
Jonescb
1

Нет ничего плохого во многих функциях, которые добавляет C #, но, учитывая скорость, с которой они меняют язык, они сознательно затрудняют, если не делают невозможным, чтобы Mono не отставал. Если так, то я говорю, что мы ожидаем, что C # догонит Java с точки зрения диапазона систем, на которые он может быть развернут. Недостаточно просто запустить на Windows.

Дов
источник
0

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

Что касается ответа на ваш вопрос: Java и C # - это разные языки, поэтому вы не можете сравнить их только по их возможностям. То, что вы можете делать в Java, вы можете не делать в C # и наоборот.

Итак, наконец, это похоже на начало темы Windows против Linux.

Адам Арольд
источник