2009-03-14 3 views
19

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

В любом случае, я обнаружил, что Java является эквивалентом C# 1.1 или что-то в этом роде. В Java я должен дважды написать код, который был бы на C#. Есть ли такие функции, как инициализаторы объектов, лямбда, свойства ради бога, когда-либо появляющиеся на Java? Я попытался пробраться через материал JSR, но ничего не мог найти.

Является ли Java просто не поддержанным? Или я просто не использую его, как он предназначен?

+2

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

+2

Я, конечно, не просил об этом как о начале религиозной войны. Не знаю, почему он был закрыт. – AngryHacker

ответ

10

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

Люди Java, вероятно, не представили эти новые функции, потому что они, вероятно, предпочитают держать язык как можно более простым и обратно совместимым.

Должен сказать, что я предпочитаю писать C# в эти дни.

8

Я бы сказал, да, Java не справился. Microsoft долго смотрела на Java (и на C++) и выяснила, какие недомогания у них были, и какие функции отсутствовали, и зафиксировал многие из них в последующих выпусках C#.

Кроме того, разработчики Java, похоже, стараются максимально упростить их язык и парсеры, в то время как разработчики C# не боятся синтаксического сахара: все это являются свойствами, делегатами, lambdas и LINQ. И, как вы уже заметили, ложка синтаксического сахара делает язык намного проще.

6

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

Java является одним из самых старых языков. C# является относительно новым и может позволить себе более радикально измениться. Сравните с C и C++, которые не менялись в течение десятилетия.

Если вы действительно хотите новые возможности языка для вашего нового кода, попробуйте другой язык на основе JVM, который взаимодействует с Java (Groovy, Scala, Clojure).

+1

Если старый язык не является VB6! Если у вас есть какие-либо существующие программы VB6, хорошо, что у Microsoft есть хорошие новые языки, чтобы вы могли переписать свои приложения. Возможно, вы закончите до того, как ваша организация обанкротится, а ваши конкуренты внедрили ваши продукты в неуместности. – MarkJ

7

Java, безусловно, отстает, хотя я бы сказал, что он ближе к C# 2.0, чем C# 1.1 - он имеет, например, дженерики, хотя они несколько отличаются от тех, что на C#.

Я был разочарован, узнав, что многие из предлагаемых возможностей языка были сняты для Java 7 (в частности, затворы), а затем Project Coin пришел вместе - так, по крайней мере, мы могли бы некоторых небольших возможностей, чтобы смотреть вперед.

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

(И, конечно же, C# 4.0 тоже в виду ...)

1

И это не для Swing и WPF, которые похожи на мел и икру.

4

Действительно, вы правы. Но я думаю, что улучшение языковых улучшений в значительной степени перешло на новые языки JVM, такие как Groovy и Scala.

И, возможно, это хорошо, поскольку у Java есть значительная пользовательская база, которая, к сожалению, вряд ли может согласиться с тем, какие функции, если они есть, и в какой форме должны быть добавлены к языку. Например, посмотрите на это poll. С другой стороны, Sun обещала усовершенствования JVM, которые будут способствовать разработке и исполнению динамических JVM-языков, таких как invokedynamic инструкция, JSR 292.

Для меня это достойный компромисс.

5

Я думаю, что часть вопроса является экономической. Не случайно, что Java появилась, когда Sun была ведущим игроком на рынке. Их акции находились на рекордно высоком уровне в марте 2000 года, чему способствовали все серверы, которые покупали компании dot-com.

Когда пузырь лопнул, и все эти серверы вышли на рынок, потребовалось много времени, чтобы проглотить работу. Солнце не оправилось от этого. Увеличение мощности товарных серверов подорвало край, который когда-то имели чипы RISC специальности и Solaris. Вы не можете быть великой военной силой, если только вы не являетесь экономической державой; быть новатором в этом масштабе также требует наличных денег.

Они потеряли много талантов (например, Bill Joy), которые использовали для производства топлива.

Солнце, на его дне, является аппаратной компанией. Стратегия с Java, особенно на стороне сервера, заключалась в том, что это помогло бы продавать аппаратные средства.

Я думаю, что темпы изменений для Java пострадали из-за всего этого.

Microsoft продолжает разрабатывать C#, поскольку доходы продолжают вливаться, Anders по-прежнему с ними, и они являются компанией-разработчиком программного обеспечения, которая в конечном итоге зарабатывает деньги на продукте. Вот почему они впереди.

+1

Microsoft разрабатывает свои языки, потому что это все «разработчики разработчиков разработчиков». если вы пытаетесь продать операционные системы, самое главное, чтобы разработчики программного обеспечения хотели разработать программное обеспечение для вашей операционной системы. – MarkJ

+1

Если двойные денежные коровы Microsoft, операционная система и Office будут вытеснены, я буду держать пари, что «разработчики» тоже отправятся на задний план. Делает ли денежные средства стратегию, или наоборот? Вам нужны оба. – duffymo

+0

Насколько я понял, это не доход от C#, который стимулирует его развитие, это доход от денежных коров. Это не совсем понятно мне из формулировки вашего ответа - они делают «деньги из продукта» - какой продукт? +1 в любом случае – MarkJ

Смежные вопросы