[Cold holy war] C# vs. Java

ray144

Народ! Давайте выведем на чистую воду оба этих языка (+ то, что стоит за ними, разумеется)! То, что они лучше C++ (для некритичных по скорости программ) давайте здесь обсуждать не будем.
Мои дилетантские аргументы:
- За Java: лучше распространена (Linux, JSP, мобильные устройства)
- За C#: .NET Studio круче Eclipse
В целом же это одного сорта ягоды.
Буду рад услышать ваши уточнения.

bastii

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

ray144

Да, я коряво выразился. Хотел увидеть сравнение самих языков и то, как недостатки самих языков покрываются другими их свойствами, например распространённостью.
Например, я понимаю, что C# круче. Но мне пришлось перейти с него на Java, потому что именно на нём написан целый ряд нужных мне вещей.

bastii

Ну и мне приходится писать на Java. Сегодня C# это история только под винду. Хорошо если Migel de Icaaza и компания изменят ситуацию.

sergei1969

- За C#: .NET Studio круче Eclipse
Eclipse - не самая крутая IDE для Java, так что это не аргумент вообще

bastii

Ага, в IDEA поддержка Java лучше, чем в Resharper (продукт той же конторы) поддержка C#. Но это только потому, что C# немного сложнее и Resharper более молодой продукт.

ray144

Согласен. Ну можно тогда сравнить .NET Studio с JBuilder или IDEA или на чём там пишут всякие отцы-монстры.

6yrop

Ага, в IDEA поддержка Java лучше, чем в Resharper (продукт той же конторы) поддержка C#.
опиши чем, насколько лучше?

rosali

Я голосую за Яву Именно из-за
без сомнительных установок типа, что нах вводить новые конструкции, если можно обойтись имеющимися
Простота Явы и сомоочвидность необходимости ее конструкций подкупают. Когда она появилась почти сразу же было написано несколько open source JVM, а вот славный mono до сих пор никакой. Так что распространенность Явы не случайность а неизбежность.

Marinavo_0507

>. Когда она появилась почти сразу же было написано несколько open source JVM
Я знаю только kaffe, и он до сих пор именно никакой.

ray144

Оффтоп.
Теперь понятно, что значит Java3D - , , .

bastii

Да все на уровне мелочей, но в это и фишка. Короче все субъективно.

bastii

Вот это больше всего в Джава и не нравится. Все чем руководствовались архитекторы языка основывалось на позиции "Простота Явы и сомоочвидность необходимости ее конструкций подкупают". Не видно в этом прагматического расчета. Так уж Джава стала более кривой с 5й версии? А что мешало не пи-ть и сделать это еще 5 лет назад? Так что хорош пи-ть, пора работать, .NET наступает на пятки

voronetskaya

чуве, это как Интел и АМД. Да будь ваш С# хоть на порядок круче джавы - он все равно никогда уже ее не догонит по распостраненности.

voronetskaya

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

ray144

Не видно прагматического расчёта?!
Больше не надо выуживать глюки delete/free есть поддежка многозадачности, большая определённость с множественным наследованием, та же кроссплатформенность, javadoc-и...

Dasar

Зачем они на этом остановились? И перестали двигаться дальше?

bastii

Ок. Штука в том, что очень долго кричали, что Джава просто идеальная. И платформа, и язык. Но это очевидно не правда. Хотя бы потому, что 5я версия заметно лучше. Вот я говорю, что если бы не кричали, а работали над Джавой, то мы бы увидели 5ю версиию на пять лет раньше.
Джава - это еще и платформа. На ней пытаются много чего делать, а язык один. Т.е. он предендует на универсальность. Не тянет. В .NET такой проблемы не существует. Если C# не годится для определенной задачи, можно найти что-то другое. И VB.NET не замечать тоже нельзя.
Теперь про C#. Его основная задача, как и задача .NET -- это сделать майкрософтскую платформу привлекательней. Что вообщем-то получается. Уже сегодня очевидно, что когда речь идет исключительно о винде, то предпочтение отдается .NET (как в случает десктопных приложений, так и в случае серверных). Я конечно слабо представляю gtk, хотя знаком с qt, но думаю для C# есть хорошая ниша в десктопных приложениях под линухи. Очевидно, что до сих пор Джава не справилась ее занять. Т.о. в перспективе C# может очень неплохо потеснить Java не только под виндой. Причем раньше чем можно себе представить

ray144

Перестали - в смысле, в прошлом?
Сейчас уже есть Java 5, а скоро будет Java 6 - только не знаю, что там будет нового.

Dasar

> Перестали - в смысле, в прошлом?
Что было нового в Java 2?
Java 3?
Java 4?

ray144

В Java 2, насколько я понимаю, исправляли позорный Java 1. UI двухнедельного производства, плохо спроектированную библиотеку классов.
Про Java 3-4 (1.3-1.4) не знаю.

bastii

В Java 2, насколько я понимаю, исправляли позорный Java 1. UI двухнедельного производства, плохо спроектированную библиотеку классов.
Про Java 3-4 (1.3-1.4) не знаю.
А язык? Почему не развивают язык? Не хотят трогать ВМ, ок. Но развивайте язык. Не хотите. Сделайте еще один, назовите Java++ и развивайте.

Dasar

> UI двухнедельного производства, плохо спроектированную библиотеку классов.
Были ли измененения в Java-е, как языке?
Были ли изменения в Java-к, как фреймоворке?
Можно ли считать, что изменение только библиотек - это задача, достойная разработчика основ Java-ы?
а иначе получается, что Sun другим не дал менять язык и фреймворк, и сам менять не хочет.

ray144

Чтобы развивать такой язык, нужна веская причина. Это же всё-таки не науку двигать - неважно куда, лишь бы двигать. Сам посуди: сколько существует C++ и сколько фич в единицу времени там появляется?

ray144

Ну не знаю я, что конкретно там меняли. Только не забудьте, что Java 5 - это Java 1.5, т. е. не слишком большое изменение.

Dasar

> сколько существует C++ и сколько фич в единицу времени там появляется
У С++ проблема в том, что стандарт С++ получился очень сложный, и до сих пор нет промышленного компилятора, который поддерживал бы все навороты C++.
Если же говорить про компиляторы C++, то с каждым годом они все ближе и ближе приближаются к стандарту

Dasar

> что Java 5 - это Java 1.5,
Какая разница? Главное - это сколько времени прошло...

bastii

Чтобы развивать такой язык, нужна веская причина.
Вот и похоже, что Sun родила Джава, как никак считается одной из самых технологичных компаний. Вот только не знает, что с ней делать. А что будет через пару лет, когда от Джава до C# 3.0 будут световые годы.

voronetskaya

когда от Джава до C# 3.0 будут световые годы
и совецкие космические корабли будут бороздить большой театр. гы, сынок, лол.

bastii


Хотя, если серьезно. Видел C Omega. Не верю конечно, что они осмелятся сотворить такое с C#. Но Хельжберг говорит, что это основное направление, в котором он работает.
Кто-то еще обещался, что можно будет сделать возможность наследоваться от параметра дженерика.А Крис Брумми (архитектор CLR) говорит, что с managed code, VM и т.д. много чего интересного сделать можно, просто руки пока не доходят. Мол надежность CLR еще не на должном уровне.

koly

Когда, наконец, создадут терпимую (я не говрю "достойную") IDE для С#, тогда и перейду на него:) А пока даже ReSharper не способен должным образом приподнять VS.NET над ноутпадом

bastii

Кроме Resharper еще и другие примочки существуют. Потом VS берет не только редактором кода.
Ты VS 2005 видел? Ну и какая среда дотянет до нее по отладчику, дизайнерам форм и веб форм, ...

RTYuPZ78


А язык? Почему не развивают язык? Не хотят трогать ВМ, ок. Но развивайте язык. Не хотите. Сделайте еще один, назовите Java++ и развивайте.
Язык сам по себе нафик не нужен. Нужна платформа.
Java -java community - > 200 компаний (IBM, Sun , и др.) - разрабатывают стандарты (спецификации). Множество серверов приложений - для систем разных масштабов.
Множество хороших, внешних проектов (один Jackarta чего стоит) .
C# - на 90% скопирован с Java. Стандарты? - неа, в основном реализация, причем сильно влияют маркетинговые соображения. В IDE - недавно появился рефакторинг - в джавовских IDE он был уже лет 3-5
Вообщем, жестокая проприетарщина.
Кто использует J2EE ?
Например, SAP (в курсе надеюсь Дойч Банк, Oracle (встроено в OEBS)
Кто использует .NET - ?
не знаю.
( Интересно, кто захочет зависеть от микрософта? )
----
У нас в стране любят попсу. И подавляющая часть прогеров кинется изучать именно .NET
В итоге уже сейчас имеем +$500 к зарплате у джава людей, по сравнению с .Net - людьми

evgen5555

Все равно джаверы - отсосы.

bastii

Про язык это гон, никто не мешает иметь мощный фреймворк и развитый язык в придачу, а лучше несколько. Потом все это не мешает сравнивать между собой чисто языки.
Понятно, что Java уже больше 10 лет, и что очень много наработок, и всякие там Oracle под Java заточены. Но ситуация меняется, причем не только у нас, везде, в Штатах, а в UK слышал, что еще активней.
Это просто гон, что .NET содрана с Java. Так обычно думают Java прогеры.
Стандарты это конечно хорошо, но скорее является следствием того, что Sun сама ничего нормально сделать не может. В этом подходе есть моменты, которые тормозят развитие платформы. Плюс есть и другие очевидные отрицательные моменты.
У MS и Sun есть очень серьезные различия в идеологии при разработке платформы. У MS - это scenario based подход к разработке фреймворка. Суть в том, что нужно конечно уметь делать все, но определенные вещи должны делаться особенно легко и быстро. У Sun более основательный подход. Поэтому чем меньше проект, тем больше преимуществ у .NET. Верно и обратное, но уже в пользу Java. Хотя понятно, что и Sun, и MS движутся во встречном направлении сегодня.
Про зарплаты, я тут конечно не силен. Но думаю, что в первую очередь зарплата отображает общий уровень прогера и его опыт. Понятно, что опытных чистых .NET прогеров вообще почти нет. Остальные либо бывшие С++ники, либо Javaвисты. Еще наверно в силу того, что проекты на .NET обычно меньше, и выполнят такие проекты на .NET проще, то поэтому можно привлекать больше менее опытных прогеров. Хотя почти уверен, что нормальных прогеров не хватает как среди Java прогеров, там и среди .NET прогеров. Последних, возможно, не хватает в большей степени.
Конечно, Java прогерам бояться нечего, пока .NET не вылазит за Windows платформу. Хотя MS очень метит в тот сектор, где сегодня рулит Java. Нужно также заметить, MS платформа начинает в целом выглядеть все привлекательнее и привлекательнее. Одно видно уже сегодня, под виндой для Java места не осталось (ну или почти не осталось).

voronetskaya

Такие маркетолохические простыни забесплатно выписывать - это просто лол. Мож тебе род занятий сменить?

Marinavo_0507

> Такие маркетолохические простыни забесплатно выписывать - это просто лол.
Читай, пока денег не просит.

bastii

bastii

Хотите еще "маркетолохические простыни"?
Как проще всего MS обернуть многолетнее преимущество Java в области корпаративных приложений в ничто. Протолкнуть идею, что веб приложения -- это не самое лучшее, что можно придумають. Угадайте, что они сегодня и проталкивают? Smart Clients. А что, у Java на эту тему есть очень мало что предложить. А при равных стартовых условиях никому с MS не тягаться. Потом они уже и не равные. Еще убедить бы всех, что веб сервисы, это иделальных механизм для подключения этих smart клиентов в серверам. Тут на помощь приходят вся эта истерия с безопасностью. Так что с веб сервисами проблем не будет. Теперь понятно становится, почему официальные лица MS всегда на первое место ставят веб сервисы, когда говорят про .NET. Причем это они делают с 2000го, хотя и сегодня их пргеров мало к эти веб сервисы пишет.
Все стало ясно со стратегией MS. Теперь можно лучше осмыслить все дела вокруг WinFX и т.д. Ну и кто не верит, что в итоге у MS все получится.
Мне вот радует другое, что за всеми этими маркетинговыми делами стоят вполне приличные технические решения, причем посление опережают маркетинг. Слышали про Indigo. Посмотрите, тогда станет понятно почему Don Box чувствует себя так уверено, что песни поет А вот у Sun всегда за маркетингом ничего не стояло.
Угу. Вообщем это все конечно гон, но что-то в этом есть Смешно, конечно, когда люди говорят, что еще 5-ть лет и MS не продержится.

sergey_m

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

bastii

кинулся бы покупать акции M$
А для того, чтобы инвестировать свое время в MS технологии, не убедительно?

voronetskaya

маза вырезать его посты в отдельный тред

sergey_m

> А для того, чтобы инвестировать свое время в MS технологии, не убедительно?
Нет.

Ivan826

Господа, я не понимаю.
Непонимаю многого.
О чём разговор идёт? О языках или о фреймворках? Вроде как о языках начинали....
По поводу платформ - Java в отличие .NET небесплатна
А по поводу языков в .NET воообщето есть много интересныых языков, хочешь - пиши на C#, хочешь - на С++, на VB, даже F# есть. И что самое удивительное есть J# Да, в джаве нету такой острой проблемы с областью видимости переменных, но там и язык один

voronetskaya

По поводу платформ - Java в отличие .NET небесплатна
ты с какой луны свалился?

Ivan826

В этом вопросе я могу и облажатся (неуверен но где-то слышал что бесплатная только джава машина а код компилятора - только за бабки

RTYuPZ78



все бесплатно
к тому же есть реализации от разных производителей

RTYuPZ78


веб-приложения? - это мелкий довесок у апп-серверов. Насчет веб-сервисов не понял - им язык ведь, вообщем-то, не важен.
Лично работал с веб-сервисами на джава:
Многообразие реализаций - выбираешь самую удобную - от генерации веб-сервиса на основе сессион-бина (и даже на основе MessageDrivenBean до генерации на основе WSDL описания.

voronetskaya

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

bastii

Ну ведь сказали
Язык сам по себе нафик не нужен. Нужна платформа
Потом слово Java не только язык означает, но и платформу. Аналогично иногда и с C# ассоциируют .NET.
Еще сегодня проявляется тенденция, что язык рассматривается в тесной связи с фреймфорком и даже IDE. Так в C# 2.0 фича partial classes -- это фича для IDE. В Java 5.0 тоже, аннотации в первую очередь для того, чтобы код генерировать при размещении на сервер приложений.

bastii

веб-приложения? - это мелкий довесок у апп-серверов
Мне всегда казалось, что этот "довесок" во всех (в большинстве) приложений составляет немалую часть.
от генерации веб-сервиса на основе сессион-бина (и даже на основе MessageDrivenBean до генерации на основе WSDL описания
Да, в этом вся Java. Без сервера приложений и кодогенерации никак.

Ivan826

Хм.... А как же mono?
Да, вообще то .NET заточен под win сервера. И что? Ты хочешь сказать что Java работает с одинаковой скоростью на win и *nix серверах?
to :
Только вот какая пакость вышла
Java платформа ассоциируется только с языком Java
А .NET ассоциируется не только с C#! Ещё раз подчёркиваю что есть такой язык как J#!
И на всех этих языках совершенно равноправно можно писать приложения. Суть .NET в этом!

Marinavo_0507

> Хм.... А как же mono?
А никак.
> Да, вообще то .NET заточен под win сервера. И что? Ты хочешь сказать что Java работает с одинаковой скоростью на win и *nix серверах?
Одно дело - скорость, а другое - функциональность.
> Java платформа ассоциируется только с языком Java
Тут вон предлагают кодогенераторы.
Кодогенератор - это компилятор некоторого другого языка.
Вывод: ассоциируется у тебя неправильно.
> А .NET ассоциируется не только с C#! Ещё раз подчёркиваю что есть такой язык как J#!
Какая между ними принципиальная разница?

voronetskaya

ты вообще откуда информацию берешь обо всем что пишешь? очень похоже на службу ОБС

bastii

Только вот какая пакость вышла
Java платформа ассоциируется только с языком Java
А .NET ассоциируется не только с C#! Ещё раз подчёркиваю что есть такой язык как J#!
И на всех этих языках совершенно равноправно можно писать приложения. Суть .NET в этом!
Это все правильно. Но еще часто эти слова ассоциируются как я сказал. Обрати внимание, ты найдешь это среди постов уже в этом форуме.

Ivan826

ОЙ!
А какая принципиальная разница между VB и C#? А между C# и F#?
Кстати всем кто утверждал что C# это клон Java: потрудитесь почитать msdn перед тем как писать
Клон Java это J#!
И разьясни пожалуйста что такое функциональность?

voronetskaya

ты открыл для себя кнопки "!" "?" и "#", поздравляю! попробуй еще с капслоком, тебе должно понравиться

RTYuPZ78

а, в этом вся Java. Без сервера приложений и кодогенерации никак.
Сервер приложений - необходимое звено multi-tier архитектур (современный подход). Можно и без него обойтись - писать граф-редакторы
Кодогенерация - это правильно. Или 10 высокоуровневых строчек или 10000 строчек на асме - выбор за Вами. Только вот IT - отрасль выбирает первый вариант. Задача программиста - архитектура и бизнес-логика. Задача платформы - всякий кал типа низкоуровневых действий.

Ivan826

Маладец!
Пашутил!

RTYuPZ78

Насчет множества языков в .NET
Господа, в .NET нет языка , например, perl. Нету!
Есть perl# - к чему клоню ясно?
У перла один недостаток - он придуман ен микрософтом, поэтому Вы будете учить новый язык - perl#.
(понятно что речь идет об особенностях)
(подставим вместо perl еще куча НОВЫХ языков )
Вам ненадоело, что Микрософт Вас постоянно кидает?
Где теперь знания о DCOM? - нигде. Микрософт кинуло разработчиков DCOM - хотя ОБЕЩАЛО его поддерживать и развивать. Теперь вот опять новые языки учить.

Dasar

> Теперь вот опять новые языки учить.
Я правильно понял, что у тебя трудности с обучением?
Поэтому ты согласен всю жизнь считать на счетах?
ps
Король умер - да здравствует король.

psm-home

Где теперь знания о DCOM? - нигде.
Ну не нужно так преувеличивать. Если ты не пользуешься DCOM, это не значит, что им никто не пользуется. Даже кобольщики до сих пор работу имеют, а ты говоришь.

bastii

А как же новомодное течение в Java с легкими контейнерами и т.д. Не все нравится EJB в том виде в котором оно сейчас.
В отношении кодогенерации мне нравится такой подход. Использовать кодогенерацию, как средство решения проблем с плохим API -- это плохо. Проблемы API нужно решать на уровне API. А так не вопрос, пусть будет кодогенереция там, где она кажется уместной. Не так уж это хорошо, когда 10 моих строчек заменят 10000 сгенерированных. В них же придется разбираться при отладке. Да и вообще иногда очень хочется понимать, что творит твой код. Короче не везде эта кодогенерация уместна. Так конечно, генерировать прокси по WSDL кажется нормальным, можно немножко и абстрагироваться.

bastii

Где теперь знания о DCOM? - нигде. Микрософт кинуло разработчиков DCOM - хотя ОБЕЩАЛО его поддерживать и развивать.
Просто Don Box говорит: "COM is done". А поддержка проявляется в том виде, что CLR очень здорово в COM умеет общаться. Потом, когда ты говоришь про сервера приложений, то нужно говорит о СОМ+. Последний и сегодня с появлением .NET никуда не делся. Просто сегодня компоненты можно писать не .NET, от чего только выигрывают программисты.

sergey_m

> Ты хочешь сказать что Java работает с одинаковой скоростью на win и *nix серверах?
Ссылки на сравнительные тесты плс.

sergey_m

У перла один недостаток - он придуман не микрософтом
Кстати TCP/IP тоже страдает этим недостатком. В конце прошлого века Билли даже пытался предложить замену.

bastii

А что TCP/IP такой идеальный? Я не знаю, я спрашиваю

sergey_m

Очень старый протокол (c) Kirya

RTYuPZ78

Теперь вот опять новые языки учить.
Я правильно понял, что у тебя трудности с обучением?
Поэтому ты согласен всю жизнь считать на счетах?
я тут непричем. С моим исчезновением мир много не потеряет. Но вот возьмем какую-нибудь контору с оборотом
миллиардик-другой. Программеры в ней все время переучиваются, причем переучиваются, а не изучают новое (выяснить детали нового perl# - это не новые знания, а мартышкин труд). Ну и какова эффективность использования технологий от микрософт в таком случае?

bastii

Вот и я слышал, что там проблемы с броадкастинком и с управление трафиком (типа чтобы VerTV не тормозил, когда пол сети дружно что-то скачают ).

bastii

Разница в том, что пересев с MFC на .NET (язык это не важно, тут ты прав) ты будешь на порядок продуктивнее, а когда начнешь пользоваться WinFX может и на два. Да, .NET это новое, но Java тоже когда-то учить приходилось, а многие и сейчас учат. Потом .NET это надолго. И еще простись уже 2005, десять лет прошло. Javaсты тоже все время учатся, то на Far под AWT писали аплеты, то теперь в IDEA под Swing. Раньше Entity Beans вояли, а теперь Hibernate используете. Я думаю ты лучше меня сможешь продолжить этот ряд.

RTYuPZ78


согласись, освоить принципиально новый по архитектуре фрэймворк (Hibernate после EJB) - это все-такие развитие. А наколоться на новых особенностях perl# - это больше мартышкин труд.

ava3443

> Разница в том, что пересев с MFC на .NET (язык это не важно, тут ты прав) ты будешь на порядок продуктивнее, а когда начнешь пользоваться WinFX может и на два.
Ты не путай. Пересев с Perl на perl# или с Java на J# ты не только не станешь продуктивнее, но стопудово потратишь охренительно много времени на борьбу с новыми багами и кривизной, внесёнными Микрософтом.

Marinavo_0507

> А какая принципиальная разница между VB и C#? А между C# и F#?
AFAIK, никакой.
Если знаешь - скажи.

bleyman

Ты не путай. Пересев с Perl на perl# или с Java на J# ты не только не станешь продуктивнее, но стопудово потратишь охренительно много времени на борьбу с новыми багами и кривизной, внесёнными Микрософтом.
Дык не пересаживайся, хуле. Тебя кто-то заставляет? Или ты хочешь чтобы фишки, интегрируемость и вообще - с точно таким же синтаксисом и либами? Это ты как вообще себе представляешь?
ЗЫ: перлшарп ни разу не видел, равно как и J#. Я далёк от них.

Ivan826

Ну как тебе сказать? Даже и не знаю если чесно. Наверное такая же как между С и Basic

Marinavo_0507

> Наверное такая же как между С и Basic
А я вот думаю, что гораздо меньшая (если брать те бейсики, которые я видел; можно и более C-подобные придумать).

Ivan826

Ну блин, в этом то и решение проблемы - ты думаешь, а я пишу кажный день. И разница там простите!
У меня настольная книга - namespase'ы в .NET

Dasar

> Ну и какова эффективность использования технологий от микрософт в таком случае?
Да, все плохо.
Ты что предлагаешь?
Использовать постоянно устаревшие технологии, пусть даже не удобные?
MS предлагает более менее последовательный подход:
сформировать на основе новых "знаний" новую технологии - для устаревших технологий, если получается, то написать адаптеры, которые свяжут старое и новое.
ps
Я видел противоположный подход: тянуть все старое за собой без модернизации - например, тот же C++.
Очень и очень страшная фишка получается.

RTYuPZ78

не нуна каждый раз впадать в крайности

bastii

А причем тут perl# или J#? Я про них ничего не говорил. Я говорил про MFC->.NET, VS98->VS.NET. На них переходить так же разумно как будет наверно EJB2->EJB3.
И не надо, с переходами у MS дела обстоят по лучше чем у многих. Взять хотя бы MFC->.NET. Ну писал ты на MFC, потом начинаешь компилировать в параметром /CLR, и добавляй в прогу формочки .NET. Не хочешь C# учить, ок, к VC++ 2005 очень даже неплохо .NET приживили.

ifani

Можно и мне присоединиться:о)
Сразу предупреждаю: на шарпе не прогал, так что писать буду скорее в пользу Явы, нежели против шарпа%
Прежде всего пару слов о самом языке.
Самое главное его преимущество, на мой взгляд - простота и наглядность, что в свою очередь повышает надёжность и поддерживаемость (в смысле облегчения внесения модификаций) создаваемых программных продуктов.
Я много писал на плюсах, и, когда перешёл на Яву, поначалу мне казалось странным отсутствие следующих вещей:
1. Перегрузка операторов
2. Множественное наследование
3. Шаблоны
4. Свойства (этого, конечно, и в плюсах не было, но всё же....)
Однако, если посмотреть повнимательнее, то можно заметить, что именно все эти вещи (за исключением, быть может, шаблонов) очень часто становятся причинами неоднозначной интерпретации кода программы.
Например, складываются два вектора - казалось бы, просто поэлементное сложение. Но даже тут программист, написавший класс Вектор, мог реализовать суммирование с сатурацией, а мог и с заворачиванием. Оформление суммирования в виде вызова метода в данном случае более наглядно отражает тот факт, что за таким "простым" действием лежит некий алгоритм. И даже в неинтеллектуальном редакторе (типа, ноутпэд) вызов метода наводит на размышления (в интеллектуальной среде тут, конечно, могла бы быть какая-нить подсветка.
Аналогично со свойствами - необходимо отдавать себе отчёт, когда ты просто меняешь значение переменной, а когда за изменением таится вызов функции, которая, быть может, поменяет состояние ещё десяти тысяч объектов.
В тоже время совсем несложно всё это реализовать просто вызовом методов.
Про множественное наследование реализации уже писалось - там вообще можно до запуска и не угадать, какая из реализаций метода вызовется.
Шаблоны, на мой взгляд - гениальное решение с точки зрения совмещения статической проверки типов с идеей абстрагирования при написании алгоритмов. Они, вроде бы, хорошо укладываются в концепцию Явы. И пожалуйста, если кто-то думает, что шаблоны появились только с пятой Явы, то они сильно заблуждаются - шаблоны в Яве есть уже несколько лет. Они реализованы на уровне препроцессинга при компиляции, причём сановским же компилятором (только его надо было скачивать отдельно и, хрен знает, почему он не входил до сих пор в дждк.
Понимаю, что нечитаемую программу можно создать на любом языке, но Ява это максимально затрудняет.
Так чего же такого не хватает языку, что его непреммено нужно развивать (практически, синоним "усложнять")? Чего нельзя реализовать имеющимися в нём средствами?
Кстати, тут же и сам могу чуток опустить Яву%
Всё-таки хотя бы минимальный препроцессинг (на уровне if'ов) могли бы и реализовать
Но это уже не языку относится, и вполне решается использованием связки ант+парочка тасков+собственно javac.
Дальше - развитие Явы, как фреймфорка.
Всё-таки не зря Яву называют технологией. Это не просто Язык+ВМ+Библиотеки. Это ещё и идеология программирования. И с этой точки зрения можно смотреть на развитие Явы, как фреймворка. Это и переход от AWT к Swingу, это, практически, полный пересмотр Collection Framework, дальнейшее развитие библиотеки ввода/вывода (я был восхищён, когда увидел, как в Яве идёт работы с файлами и т.д) до NIO с её каналами и т.д. Так что, как фреймворк, Ява на месте не стоит - она постоянно развивается, при этом не только появляются новые вещи, но и пересматриваются старые.
Насчёт того, что Сан чего-то там себе возомнила - очень странное утверждение, если учесть, каким количеством фирм/корпораций пересматриваются/отклоняются/утверждаются спецификации Явы (достаточно поискать в гугле JCP) - вот уж аргумент, который целиком и полностью нужно отнести к политике MS в плане разработок спецификаций.
Кроме того, можно наблюдать за развитием не только SE, но и EE и ME - и здесь постоянно появляются новые концепции.
Относительно, многоязычности .Net'a - тут уже довольно резонно заметили, что, как таковой, .Net не поддерживает, практически, ни один язык (даже плюсы выродились в довольно странное существо) - лишь вариации на тему от МS.
И если это приводит к тому, что программист "тратит охренительно много времени на борьбу с новыми багами и кривизной, внесёнными Микрософтом", а совет ему "Дык не пересаживайся, хуле. Тебя кто-то заставляет?", то какой же это довод в пользу .Net'a?
Давайте называть вещи своими именами - да, языков много, но языков всё-таки новых.
Конечно, идея того, что один модуль может быть написан на одном языке, а другой - на другом - красива, не спорю. Но должен же быть человек, который всё это будет обозревать вцелом, будут же обсуждения между прогерами разных модулей - и всем им будет гораздо проще, если они будет общаться на одном языке.
Опять-таки, тут мне больше симпатизирует Ява - вчера писал на SE, а сегодня уже пишу для мобильных устройств - при этом процесс перехода труда не составляет именно из-за простоты языка.
Кстати, дотнет и для мобильных устройств тоже позиционируется - почему же я до сих пор не встречал мобил с его поддержкой?
Это не обвинение, а живой интерес - он более требовательный к железу, что ли? Или просто настолько молодой?
З.Ы.:
Лично у меня бы и мысли не возникло о том, что .Net слямзили с Явы, если бы, когда я был на презентации MS, их представитель не повторял бы через каждые несколько минут, что ".Net - это не Ява" %
З.З.Ы.:
Кстати, тут один человек веско заметил, что .exe тоже MS придумал, так значит винда изначально поддерживает все те языки, которые получают .exe на выходе%

voronetskaya

ппкс! спасибо тебе большое что нашел стока времени все это написать

bastii

Шаблоны, на мой взгляд - гениальное решение с точки зрения совмещения статической проверки типов с идеей абстрагирования при написании алгоритмов. Они, вроде бы, хорошо укладываются в концепцию Явы. И пожалуйста, если кто-то думает, что шаблоны появились только с пятой Явы, то они сильно заблуждаются - шаблоны в Яве есть уже несколько лет. Они реализованы на уровне препроцессинга при компиляции, причём сановским же компилятором (только его надо было скачивать отдельно и, хрен знает, почему он не входил до сих пор в дждк.
Шаблонов в Java нет, нет и полноценных дженериков (относительного того, что они представляют собой в CLR). Хотя то, что есть, тоже очень полезная штука.

bastii

Кстати, тут один человек веско заметил, что .exe тоже MS придумал, так значит винда изначально поддерживает все те языки, которые получают .exe на выходе%
Смешно конечно, но в .NET ты можешь написать класс в C#, потом наследовать в VB.NET и перегрузить какой-нибудь метод.
Про то, что другие языки за бортом - так это все гон тех, кто про .NET ничего не знает. Про Common Language Specification слышали? И про то, что для того, чтобы дизайнер VS сериализовал компонент в твой язык, необходимо предоставить реализацию нескольких склассов из CodeDom. Никто не мешает тебе интегрировать свой язык в VS лучше чем MS интегрирует VB.NET.

bastii

Так чего же такого не хватает языку, что его непреммено нужно развивать (практически, синоним "усложнять")? Чего нельзя реализовать имеющимися в нём средствами?
А что ты думаешь про Java 5.0, про static import, а про for( : ).
Вот если бы ты знал про C#, было бы интересно узнать твое мнение о using. Тем более что, если ты прогаешь SE, то постоянно что-то открываешь и закрываешь.
А что читабельнее o1.X += o2.Width или o1.setX(o1.getX + o2.getWidth?

bastii

Насчёт того, что Сан чего-то там себе возомнила - очень странное утверждение, если учесть, каким количеством фирм/корпораций пересматриваются/отклоняются/утверждаются спецификации Явы (достаточно поискать в гугле JCP) - вот уж аргумент, который целиком и полностью нужно отнести к политике MS в плане разработок спецификаций.
Так же это все может замедлять развитие платформы.

bastii

Опять-таки, тут мне больше симпатизирует Ява - вчера писал на SE, а сегодня уже пишу для мобильных устройств - при этом процесс перехода труда не составляет именно из-за простоты языка.
Сравни дизайнер форм в JB2005 и в VS2005. Я тут на днях смотрел bean contrainers в Java, даже протащился немного. Ну и где это на практике? Где потрясающее дизайн-тайм поведение контролов? В для VS можно купить готовый контрол, который не только будет хорошо выглядить и обладать богатой функциональностью, но еще позволят очень удобно с ним работать в дизайнере форм.

ifani

Шаблонов в Java нет, нет и полноценных дженериков (относительного того, что они представляют собой в CLR). Хотя то, что есть, тоже очень полезная штука.
Насчёт шаблонов ещё раз посмотрю-поищу%
Точно помню, что, как минимум, видел код с шаблонами датирующийся 2002 годом....
Буду очень благодарен, если мне дадут линк на краткое описание того, что же такое дженерики - каюсь, до сих пор толком этого не понимаю...

bastii

Синтаксически они все похожи, но вот семантика и реализация различная.
Такая шкала:
(на уровне компилятора) шаблоны С++ -- дженерики Java -- дженерики CLR (на уровне VM)

ifani

про static import думаю так же, как и написано в ДжаваДоках к нему%:

So when should you use static import? Very sparingly!
If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from.
про for( : )
Не вижу разницы, честно говоря% Особо-то короче от этого ничего не стало:о)
Можно так же продолжить и про инбоксинг и аутбоксинг - опять-таки прогер может взять и засунуть такую хрень в цикл И с перегрузкой затырки наблюдаются:(
И опять-таки доки рекомендуют поосторожней юзать такие вещи.
А что читабельнее o1.X += o2.Width или o1.setX(o1.getX + o2.getWidth?
Имхо, самое читабельное: o1.addX( o2.getWidth )
Если нет такой возможности, то лучше второй вариант (хоть он, действительно, менее читабельный) - причины я уже описывал выше.
Вот если бы ты знал про C#, было бы интересно узнать твое мнение о using.
Если это тоже, что и в Паскале "with", то, наверное, было бы не плохо (но опять-таки в меру, а то кто-нить обьявит такой мегаблок и засунет туда кучу классов, и разбирайся потом, что откуда взялось но совсем необязательно.
З.Ы.: вообще, конечно, интересно познакомиться с шарпом поближе - с точки зрения идей, реализованных в нём....

ifani

Так же это все может замедлять развитие платформы
Согласен - может. А может и не замедлять.
Но зато каждый шаг сделанный таким образом будет согласованным и обоснованным реальными надобностями разработчиков/производителей, а не результатом политикой одной компании.

ifani

Сравни дизайнер форм в JB2005 и в VS2005. Я тут на днях смотрел bean contrainers в Java, даже протащился немного. Ну и где это на практике? Где потрясающее дизайн-тайм поведение контролов? В для VS можно купить готовый контрол, который не только будет хорошо выглядить и обладать богатой функциональностью, но еще позволят очень удобно с ним работать в дизайнере форм.
В силу специфики работы пока ничего на этот счёт ответить не могу
Кроме того я юзаю Идею и предпочитаю сравнивать все остальные Идешки с ней
Кстати, на подходе очередной её релиз - вот его и сравню:о)

bastii

Не вижу последовательности в твоих утверждениях. То ты говоришь, что static import никому не мешает, так как им можно не пользоваться, то ты говоришь, что улучшать язык плохо, так как это его усложняет.
Нет, using не то же самое, что with. К with разработчики C# относятся отрицательно. Так что не стал бы я ставит Java в пример C#. Последний разрабатывают в условиях четких установок, поэтому все решения относительно фишек языка принимаются взвешенно.
И вообще, я правильно понял, что ты последним постом утверждаешь, что не против развития языка? Вот я утверждаю, что не обязательно код на убогом языке читается лучше чем на более богатом.

bastii

Тоже и про IDEA. Сам недавно баловался в ее редактором интерфейса.

ifani

Кстати, вот что, действительно, радует в пятой Яве, так это такой пакетик, как util.concurent :о)

ifani

Не вижу последовательности в твоих утверждениях. То ты говоришь, что static import никому не мешает, так как им можно не пользоваться, то ты говоришь, что улучшать язык плохо, так как это его усложняет
Не, я как раз-таки имел ввиду то, что даже сами разработчики советуют это использовать как можно осторожней!
То есть это - потенциальный источник ошибок, то есть удобства это введение принесло мало, а возможности напортачить много:(
Вообще, что касается изменений в пятой яве именно в языке, то мне они кажутся лишними и только увеличивающими возможность совершить ошибку или написать неэффективный код.
Я не против развития языка, но развития обоснованного, а я пока что всё ещё не вижу, что можно добавить в Яву, чтобы это было полезно и не вносило неоднозначностей при чтении кода (а это, имхо, ооооочень важно).

koly

Исследования языков показали, что нужно провести дополнительные исследования:)
А вот со средами разработки, я думаю, всё гораздо проще.
Так что на днях ждите объективный сравнительный анализ
The most intelligent Java IDE Idea и The best .NET environment VS.NET 2005

bastii

Вообще, что касается изменений в пятой яве именно в языке, то мне они кажутся лишними и только увеличивающими возможность совершить ошибку или написать неэффективный код.
Видимо ты мало имеешь дело с коллекциями, иначе оценил и дженерики, и for(:) в Java 5.0.

koly

Видимо ты мало имеешь дело с коллекциями
ггг:)

bleyman

В жаве нет перегрузки операторов? Гаавноооо!
А ещё кто-то говорил, что там нет unsigned int? Вообще говнооо!

ifani

Видимо ты мало имеешь дело с коллекциями, иначе оценил и дженерики, и for(:) в Java 5.0.
C коллекциями я уже несколько лет "имею дело" %
И итераторы очень даже удобные штуки, так что всё ещё не понимаю глубинного смысла for(:) %)
Кстати, насчёт шаблонов нашёл ссылку - это, действительно, дженерики (в чём же конкретно они от шаблонов-то отличаются? но появились они, как я уже писал, ещё в 2001 году (jsr-14).
З.Ы.:
Вообще складывается ощущения, что нововведения появились именно для того, чтобы в таком споре можно было сказать: "о, как круто, вот, что ещё есть в Яве...."
Но реально в Яве и так всё есть - это уже лишнее.
К дженерикам это не относится% Но они и не нововведение.

ifani

В жаве нет перегрузки операторов? Гаавноооо!
Интересно, из моего поста ты прочитал про отсутствие перегрузки, но совершенно проигнорировал аргументацию, почему это плохо.
А ещё кто-то говорил, что там нет unsigned int? Вообще говнооо!
Действительно, нет - и что?
В тех очень редких исключениях, когда мне не хватаета инта, юзаю лонг :о)

voronetskaya

нововведения появились именно для того, чтобы в таком споре можно было сказать: "о, как круто, вот, что ещё есть в Яве...."

enochka1145

"Generics are not templates" - недвусмысленно утверждают в Sun. Пора бы это понять.
Шаблоны нужны, чтобы один и тот же алгоритм по десять раз не переписывать для разных типов. Пускай компилятор этим занимается.
Дженерики нужны, чтобы компилятор (и читающий текст программы!) знал, что за типы хранятся в контейнере и чтобы не нужно было дурацких downcast-ов.
Цели разные, понимаете?

bleyman

1) Аргументация неубедительна имхо. Я ни разу не видел кода, написанного вменяемым человеком, в котором перегрузка была необоснованной и непонятной (к тому же xml-comments в шарпе никто не отменял). А вот пользы от перегрузки дофига. Вектора надо складывать оператором +. Точка.
А перегрузка операторов тайпкаста там есть хотя бы?

bastii

Дженерики рулят когда ты пишешь на IDEA, реально спасает от многих ошибок. Что, не разу не случалось, что пихаешь не те объекты не туда? Чем IDEA тебе поможет когда у тебя везде Object?
Оставить комментарий
Имя или ник:
Комментарий: