Почему эти попытки полить Скалу Xtend и Kotlin? [закрыто]

26

Так что теперь Eclipse предлагает Xtend, а JetBrains предлагает Kotlin - обе из которых, похоже, разбавлены версиями Scala. Мой вопрос почему? Я играл с Scala немного , и это не что трудно. Является ли это просто реакцией на присущую сложность перехода от императива к функционалу или здесь что-то еще работает?


РЕДАКТИРОВАТЬ: Извинения. Перечитывая вопрос в том виде, в котором он был изначально опубликован, я вижу, что это звучит как троллинг. То, как я сформулировал вопрос, казалось, было лучшим способом задать вопрос. Я видел сообщения в блоге о том, что «Scala слишком сложен / Scala слишком сложен», а также «Kotlin - это попытка сделать Scala, но проще». Я оставлю фразу, как это было изначально, но я, честно говоря, не пытался троллить.

Онорио Катеначчи
источник
20
Мне кажется довольно фанатичным просто предполагать, что новый язык, который имеет некоторое сходство со Scala, должен быть «разбавленной версией Scala», написанной людьми, для которых Scala слишком сложна. У вас меньше шансов получить продуманные ответы, задав такой вопрос.
Майкл Боргвардт
8
Сборка - это просто разбавленная версия машинного кода, верно?
Бен Брока
6
@BenBrocka: Нет, это изоморфно машинному коду;)
4
Скала великолепна. Что касается меня, я считаю, что люди должны отказаться от некромантии Java и заново изобретать велосипеды (все эти новые языки, упомянутые и не упомянутые) и просто использовать и улучшать Scala. ИМХО.
Иван
2
@MichaelBogwardt справедливая точка зрения. Я основываю утверждение на том, что я видел в блогосфере. «Скала слишком сложна» и «Скала слишком сложна», кажется, довольно распространенные жалобы.
Онорио Катеначчи

Ответы:

39

ИМХО от кого-то, кто программирует на Java последние 7 лет и, будучи моим самым сильным языком, я нахожу Scala довольно чуждым и с трудом привыкаю к ​​нему.

Xtend чувствует себя больше как Java и был в состоянии написать простое приложение с ним гораздо быстрее. Конечно, я не уделял достаточно времени Скале, но я, конечно, понимаю, почему некоторые могут быть отключены этим.

С учетом сказанного люди выберут знакомый ад вместо незнакомого рая.

maple_shaft
источник
19
+1: «люди выберут знакомый ад над незнакомым раем».
Джорджио
18

У JetBrains есть вики-страница, сравнивающая Scala с Kotlin, и, кажется, есть несколько вещей, которые делает Kotlin, а Scala нет:

  • Ноль-накладные ноль-безопасность. Scala имеет Option, который является синтаксической и исполняемой оболочкой
  • Умные броски
  • Статические функции расширения. Вместо упаковки во время выполнения
  • Встроенные функции Котлина облегчают нелокальные скачки
  • Строковые шаблоны. Есть сторонний плагин компилятора для Scala с похожей функциональностью: ScalaEnhancedStrings
  • Первоклассная делегация. Также реализовано с помощью стороннего плагина: Autoproxy Modules

Поэтому называть Котлин водой на Скале - это, вероятно, упрощение. Что касается Xtend, я думаю, что он ориентирован в основном на пользователей Xtext, а не на более широкую аудиторию. Основное отличие от Scala заключается в том, что Xtend компилируется в Java, а не в байт-код.

Еще одним языком «убийцы Java», который вы должны добавить в свой список, является «Цейлон» от Red Hat , хотя я понятия не имею, насколько он отличается от Scala.

Яннис
источник
13
Автоматическое звучание звучит страшно.
Джонас
14
В отрасли происходят эти циклические революции, когда разработчики будут идти от одной крайности и возвращаться снова и снова. Многофункциональные языки мощного кодера были хорошими, тогда идиоты написали плохой код, и мы обнаружили опасность, что люди обратились к воспринимаемой безопасности Java, теперь снова к мощным кодерам. Посмотрите, насколько хороши Javascript и браузер, затем появились апплеты, а RIA с плагинами для браузера были хорошими, а Javascript - плохими, потом появились современные AJAX-фреймворки и плагины были небезопасными и плохими, потом появился Silverlight, и люди сказали, что AJAX мертв, СЕЙЧАС HTML5 это мода и плагины снова плохо! :)
maple_shaft
3
@ Джонас Я даже не знаю, согласен ли я с этим, но это явление я заметил. Конечно, с каждой революцией приходит более сложное решение, но у каждого решения всегда есть Ахиллесова пята. Решение проблемы Heel заставляет некоторых оглядываться назад на предыдущие решения для идей, но со временем люди забывают, почему эти старые решения изначально были заброшены. Однако со временем, с каждой революцией, пятка становится все меньше. Java + XTend, безусловно, может быть не таким сложным, как Scala, однако проблемы меньше, чем инвестиции, чтобы полностью переключиться на новый язык.
maple_shaft
2
@Jonas Что ж, в комментарии можно поместить только чрезмерно упрощенное технологическое развитие. Я согласен с maple_shaft, хотя технологическая эволюция имеет итеративное ощущение .
Яннис
3
@Jonas это приведение не автоматическое, а умное приведение: если вы посмотрите, вы увидите, что это не то же самое: kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m
11

Я использовал Scala в качестве основного языка в течение последнего года (с секундой Java, как в рамках большой унаследованной базы кода Java). Мне все еще приходится искать довольно простые функции, если я не использовал их в в то время как. Конечно, вы можете написать несколько Scala быстро, но это чрезвычайно многофункциональный язык, и его освоение занимает много времени.

Более того, его сложность представляет собой проблему не только для людей, но и для IDE и компиляторов. И Селон, и Котлин компилируются напрямую в довольно чистый JavaScript. Scala может генерировать JavaScript через GWT, хотя добраться до него сложно, а вывод GWT не разборчив и не предназначен для приятного воспроизведения с внешним JavaScript или HTML.

Я определенно более продуктивен в Scala, чем в Java, и код более компактен и разборчив (если вы немного знаете Scala). Но его сложность заставляет меня не решаться рекомендовать его другим. Язык с 20% сложности, но 80% возможностей будет желанной альтернативой.

[Отредактировано, чтобы удалить упоминание о устаревшем коде, см. Комментарий ниже.]

[Приложение 2017 года: Scala теперь поддерживает JavaScript в качестве цели сборки, в то время как Kotlin продолжает добавлять функции, которые имеют смысл для замены Java / Groovy / JavaScript в стиле Scala. Сейчас они более характерные языки, чем когда я впервые написал это.]

Дэвид Леппик
источник
Не могли бы вы подробнее рассказать о «лагированной части»? Например, какие методы вы подразумеваете, что берут списки, а не Seqs?
kiritsuku
Я собираюсь отредактировать это, так как после размышлений стандартная библиотека Scala на самом деле редко делает это. JSONArray принимает List, но большинство конструкторов этого не делают. Несмотря на это, в документации к спискам все еще есть предвзятость, особенно с учетом того, что программирование в Scala, 2-е издание, распространяется только на Scala 2.8, предшествующую Векторам. И его примеры кода, как правило, имеют конструкторы, которые берут List, где Seq будет лучше.
Дэвид Леппик
Да, для 2.10 некоторые вещи лучше ( +:например, экстракторы). Я надеюсь, что программирование в Scala будет обновлено в ближайшее время. Для 2.11 некоторые вещи улучшаются дальше. Stdlib уже освобожден от устареваний и также немного уменьшится. Может быть, scala.util.parsingбудет перемещен за пределы stdlib тоже. Посмотрим ...
kiritsuku
1
Я должен добавить, что моя настоящая проблема со списками и векторами состоит в том, что добавление элементов в список (например, Seq в Scala) является очень простой операцией, и существует слишком много эквивалентных способов сделать это, все с забавными символами, которые трудно помнить. Канонический путь ::, ::=или +:=которые перед именем, но большинство людей хотят , :+=который добавляет, но это не является эффективным для списка.
Дэвид Леппик
10

JetBrains очень четко изложил свои цели для Kotlin :

Мы хотим стать более продуктивными, переключившись на более выразительный язык. В то же время мы не можем согласиться с компромиссами с точки зрения функциональной совместимости с Java (новый язык будет вводиться постепенно и должен беспрепятственно взаимодействовать с существующей кодовой базой) или скорости компиляции (наша кодовая база занимает достаточно много времени для компиляции Javac, и мы не можем позволить себе сделать это медленнее). Следующая вещь также довольно проста: мы ожидаем, что Kotlin будет стимулировать продажи IntelliJ IDEA.

Майкл Боргвардт
источник
8

Я использовал Scala несколько месяцев в Eclipse с Play Framework. Мне нравится язык, но есть вещи, которые мне не нравятся.

Для меня причина перехода с Java на другой язык - быть более продуктивным.

До сих пор я не был более продуктивным со Scala. Одной из причин этого является отсутствие хорошей поддержки Scala в Eclipse, плагин Scala плохой (например, сбой отступа) и еще не имеет многих функций (например, нет «Open Call Hierarchy»). Компилятор Scala также работает медленно, это может не быть проблемой, но я использую Scala с Play Framework, который компилирует код для каждого запроса, и там важна скорость компилятора.

Jonas
источник
2
Возможно, вы недостаточно изучили идиомы Scala. Я использовал Scala для небольших проектов (инструментов), и я гораздо более продуктивен в Scala, чем в Java, хотя у меня гораздо больше опыта в Java (> 10 лет), чем в Scala (<2 года).
Джорджио
4

Не знаю насчет Котлина, но Скала и Xtend - два совершенно разных зверя.

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

Xtend - лучшая Java. Он сохраняет семантику Java и улучшает его синтаксис. Каждая строка кода Xtend может быть напрямую переведена в набор строк кода Java. Там нет дополнительного времени выполнения, ни.

Я думаю, что оба подхода верны, хотя и разные. Мне не нравится Scala (как язык), но я не люблю добавлять фляги Scala в мои проекты. Я не могу правильно использовать Scala в Android (это добавляет проблемы с весом и производительностью). Xtend не так полезен, но для меня это нормально (гораздо лучше использовать его, чем язык Java), и он работает на любой платформе, как если бы я писал непосредственно на Java.

Я считаю, что оба языка занимают разные ниши и могут сосуществовать, не мешая друг другу. ИМХО, Scala просто слишком сложна, ничего нового не добавляя. Если вы хотите работать более функционально и с меньшими затратами времени, просто выберите один из многих более простых функциональных языков, таких как Clojure или JHaskell. Если вы просто хотите Java с лучшим синтаксисом и небольшим количеством функционального программирования, Fantom был бы так же хорош, как Scala (он очень напоминает C #).

Но я нахожу, что Xtend находится в хорошем положении между всеми этими языками. Он добавляет все те синтаксические шаблоны, которые я хотел для Java, сохраняя хорошие части Java (его семантика). Думайте об этом как Coffescript для Java.

И поддержка Eclipse превосходна ...

Иван Эрнандес
источник
... и поддерживается только в Eclipse. Правильно? И Затмение - ад ...
Сержант Борщ
Xtend имеет дополнительное время выполнения. Около 3 МБ последний раз я проверял.
mm2001
@ mm2001 Да, есть зависимости: около 300 Ко для xtend и 2 Мо для гуавы в моем небольшом тестовом проекте ( github.com/pdemanget/examples/tree/master/xtend/message-send ) Но это не среда выполнения, дополнительные классы для таких вещей, как InputOutput, дополнительные аннотации. Это не снимает с меня основной точки зрения, что Scala и Xtend - это 2 очень разных языка, как сказано в этом ответе.
Пдем