Чи буде Java наздогнати C #? [зачинено]


17

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

Тож все моє запитання до вас - чи буде Java знову наздогнати C #? І якби ви здогадалися, де б це стояло через 5 років. Чи було б у ньому все те, чого, можливо, зараз не вистачає? Як щодо Java 7?


7
-1, презумпційний та гіпотетичний. Буде змінено на +1, якщо заголовок зміниться на "Чи Java за C #, і якщо так, то як це наздогнати?"
Ніколь

2
Чи дотягнуть Java та C # до схеми? Повідомте мене, коли ви отримаєте анонімні функції першого класу, закриття та продовження.
дієтабудда

5
@dietbuddha: Я вважаю за краще не засмічувати свій код за допомогою )'s', дуже дякую.
Джош К

1
@JoshK ти б краще заповнив його; і}, правда? LISP, здається, використовує багато дужок, тому що кожна функція використовує їх, і ви вкладаєте в неї багато функцій.
ЮрійАльбукерке

Відповіді:


32

Мовні особливості є дуже малою частиною того, що робить Java та C # галочками. Зрештою, це частини більшої екосистеми J2EE та .NET.

Обидва мають свої сильні сторони і повинні зрости в наступні 5 років.


19
+1 для "Мовні функції - це дуже мала частина того, що робить Java та C # галочкою"
Craige

1
Так, API та бібліотеки багато в чому набагато важливіші.
Майкл К

2
Домовились, але питання стосуються мови, а не екосистеми;)
Філіп

1
Я дуже ненавиджу голосування +1 за дуже короткі відповіді, але ви тут на щось. Будемо раді бачити цю відповідь.
Ніколь

3
Питання говорять: "яку мову C # або Java краще мені вивчити" і "де вона стоятиме через 5 років", обидва ці аспекти більше покладаються на екосистему, ніж на мову.
Шаміт Верма

16

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


2
Як ви думаєте, чому Oracle буде саботажувати Java?

2
Я просто не думаю, що корпоративна культура там має таку саму спритність, яку не мала у включенні особливостей.
Jesse C. Slicer

8
@Glenn, позов Oracle проти Google показує мені, що вони не «отримують» відкритий код, і що це означає, що великі компанії рідше вибирають Java для подальшого розвитку. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena

Oracle може не зовсім "накрутити Java", а JVM. Зараз у них є проект об'єднати дві реалізації JVM, які вони придбали JRockit від BEA та 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 дозволить Яві застоюватися і використовуватиме її в основному як інструмент для патентних позовів.

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

Зі свого боку, навіть без вдосконалень, Java - це гарна мова і навколо неї приємна екосистема. Хоча я особисто віддаю перевагу C # та світу .net, Java все ще є чудовим вибором. Ідучи вперед, час покаже, але на сьогоднішній день Java зовсім не погана. (Бібліотеки дати та часу виключаються ... ух, чи завжди такі потворні та брудні)


1
Зараз існують сторонні бібліотеки для подолання проблем з датою / часом.
Майкл К

1
Oracle використовував Java разом з PL / SQL як мову для програм, які мешкали всередині бази даних, принаймні 10 г. Oracle активно використовує Java. Чи означає це, що вони візьмуть Яву в напрямку, який мені подобається, сумнівно, але вони не збираються її вбивати.
Девід Торнлі

4

Нічого наздогнати, тому питання не має сенсу.

Тільки тому, що Java не точно реплікує C #, не означає, що він "поступається" певним чином, він просто інший. Можна також запитати, коли C # "наздожене" Кобола.


23
Я не згоден. C # і Java багато в чому схожі, набагато більше, ніж C # і COBOL. Я пам’ятаю одного дня, коли читав, що «C # - це те, якою повинна була бути Java». Підводячи підсумок, я вважаю, що C # і Java безпосередньо конкурують, і, працюючи з обома, я повинен сказати, що в Java я дуже багато функцій C #, але не навпаки ...
Philippe

Чи знайшли ви ситуації, коли ви могли використовувати або 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 просто розглядає як реалізувати ЗАРАЗ (наприклад, лямбда, які імітуються некрасивою реалізацією об'єкта).
ЮрійАльбукерке

4

Питання про те, чи випереджає C # або Java перед іншим, для обговорення, але замість того, щоб зосередитись на мовних особливостях тієї чи іншої, я б скоріше зосередився на тому, що пов'язане з розвитком мови. Один факт, з яким я не думаю, що ніхто буде сперечатися: Java старша за C #.

Проблеми із зміною способу роботи мови:

  1. Якщо ви порушите зворотну сумісність, ви змусите багатьох розробників
  2. Якщо ви змусите своїх розробників, вони переходять на іншу мову, яка їх краще підтримує. Отже, немає причин продовжувати працювати з мовою.
  3. Java прийняла деякі дизайнерські рішення на початку тиску, щоб домогтися виходу мови на ринок. Надія полягала в тому, щоб повернутися і заповнити деякі заготовки. Ці рішення все ще набридають мовою, оскільки керівники не хочуть порушувати перший пункт.
  4. Java засмітила багато нової території, і доводила раз і назавжди, що до мови, що збирається зі сміттям, можна сприймати серйозно - і працювати досить добре для більшості людей.
  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, ніколи не відбудеться безпосередньо завдяки підтримці Майкрософт", зараз
спростується

На той момент, коли я писав відповідь, це не було. Отже, на C # Microsoft написав час виконання та бібліотеки, які працюють на Mac та Unix? Mono не є безпосередньо від Microsoft, хоча над ним можуть працювати деякі розробники Microsoft. У мене все ще є сумніви щодо настільного додатку, побудованого на WPF, який працює для Linux. Можливо, лише на стороні сервера.
Берін Лорич

1

Java справді не потребує нових "функцій" більше, ніж C або C ++. Це добре розроблена мова для об'єктно-орієнтованого розвитку. Доповнення, які можуть бути внесені, полягають у створенні бібліотек для виконання широкого кола завдань. Те ж саме стосується C # - більшість функцій додаються, щоб змусити мову робити більше справ. Особисто я вважаю, що більшість цих функцій не потрібні - покажчики в OO насправді так багато пуху, якщо ви не працюєте на апаратному рівні (тоді, мабуть, краще використовувати щось на зразок C). Крім того, запуск у VM повинен ускладнити, якщо не неможливо, безпосередньо отримати доступ до обладнання.

Unix розпочав тренд створення модулів, які дуже добре роблять одне . Я думаю, що і Java, і C # трохи виходять з ладу на повзучість функцій. Краще створити легко розширюване ядро, ніж гігантську багатоцільову "мову", яка більше нагадує рамки. Для мене Java відповідає цій вимозі краще, ніж C #.


7
Мова без належної лямбда - не корисна мова. Якщо ця одна функція буде додана до Java, я погоджуюся з рештою ваших аргументів. Без цього Java зовсім не розширюється, вона ледве корисна.
SK-логіка

2
@Craige Особисто (думка) Мені не подобається мати ситактичні риси. Я хочу, щоб мова не вийшла з мене - дуже мінімальною.
Майкл К

1
@Michael - мені не вдається встановити зв’язок між мовою aa, що має синтаксичні особливості, і мовою, яка перешкоджає тобі. Тільки тому, що мова має функції, це не означає, що ви повинні їх використовувати. Візьмемо, наприклад, методи зіставлення та налаштування C #. 90% часу, це заощадить вам написання сотень рядків зайвого коду. Ви все одно можете написати своє власне бажання.
Craige

1
@Craige, якщо мова має функції, принаймні ваші інструменти повинні знати про них. А сила екосистеми Java полягає насамперед у її інструментах, які можливі цілком завдяки мінімалістичній простоті мови.
SK-логіка

1
@SK, я не розумію, як можна сказати, що мова з лямбда є непридатною. У C немає лямбда, і C ++ отримує їх у C ++ 0x, і люди використовують ці мови десятиліттями. Просто тому, що ви віддаєте перевагу функціональному програмуванню, яке не призначає недійсного програмування.
jonescb

1

У багатьох функціях, які додає C #, немає нічого поганого, але, враховуючи швидкість, з якою вони змінюють мову, вони свідомо ускладнюють, якщо не неможливо, щоб Mono не відставав. Якщо так, то я кажу, що ми чекаємо, коли C # наздожене Java з точки зору діапазону систем, до яких вона може розгортатися. Недостатньо просто запустити в Windows.


0

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

Що стосується відповіді на ваше запитання: Java та C # - це різні мови, тому ви не можете порівнювати їх лише за своїми особливостями. Що ви можете зробити на Java, ви можете не в C # і vica навпаки.

Отже, нарешті, це як почати тему Windows проти Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.