LINUX.ORG.RU

Попробовал Scala. Больше не хочу.

 ,


3

7

Решил задачу на Scala невероятно красивым способом? Расскажи об этом своему clojure-коллеге. Только окажется, что он ушел три часа назад, оставив тебе записку «Используй Map». — Daniel Worthington-Bodart

Мне кажется, это «бесчеловечный» язык. Удивительно, что он сделан вроде бы человеком и вроде бы для людей. — Clinton Begin

Впервые я познакомился со Scala шесть лет назад. Тогда мне пришлось иметь дело с самодельной build-системой, написанной на Scala и использовавшей Scala в качестве языка для build-скриптов. Scala мне сразу не понравилась:

1. Build-скрипт компилировался по три минуты после внесения правок, и это еще до начала непосредственно сборки,
2. Синтаксис скриптов был совершенно бессистемный. Где-то было def где-то var. Где-то знак =, где-то фигурные скобки. Такое впечатление, будто кто-то шатался по скриптам, разбрасывая случайным образом знаки пунктуации.

Правда, я был готов признать, что это просто неправильное использование хорошего языка. Build-скрипты — это в некотором роде одноразовая задача, и это не самый лучший способ освоить сложный язык. Ну и идея вывода типов мне всегда была симпатична, начиная с моего опыта с Haskell.

Но вот в последние две недели мне пришлось разрабатывать простое RESTful API для большого и сложного набора данных. Я к Scala больше не притронусь!

Scala мы выбрали потому, что весь проект сделан на Java и XSL, с большим количеством обработки XML. Вроде как Scala — очевидный способ повысить продуктивность, особенно принимая во внимание встроенную в язык поддержку XML.

Но не тут-то было!

(Compile Times, Libraries and the Community, Magic Syntax, Everything is a Type, ‘Local’ Type Inference...)

Много о чем еще можно было бы написать. Неразбериха в инструментах сборки. Полная безнадега в поддержке Scala в IDE. Мешанина из «типов типов». Вечная копипаста с case class'ами. Но сказанного достаточно: всего этого хватило, чтобы затормозить разработку как минимум на две недели. Хватило, чтобы расхотелось когда-либо иметь дело со Scala.

Если вы дочитали до конца, то наверняка выделили лейтмотив моего текста. Он заключается в том, что Scala — неюзабельный язык. Я полагаю, изначально это был некий полигон для языковых экспериментов, который почему-то превратился в довольно распространенный язык. Не вижу ни одной убедительной причины в пользу Scala; есть много других языков, чтобв поэкспериментировать с ФП; если уж не терпится испытать сильные системы типов (а вам должно хотеться!) — попробуйте Haskell. Я допускаю, что, может быть — может быть! — вам удастся что-то такое проделать со Scala.

Но, ради всего святого, не пытайтесь использовать ее в продакшене.

Scala — неюзабельный язык.

чтобы это познать мне хватил пары статей про нее.

Это ж надо вляпаться в продакшен проект на не поддерживаемом языке.

Deleted
()

Дисциплина может спасти. Побыстрее комп для компиляции. Scala нужна когда в асинхронной логике можно рехнуться, будет простой код на Scala vs uberhell на Java

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Scala нужна когда

скала допустима когда есть люди с культурой написания кода, а не хакиры-переростки, которые рады все уместить в одну строку

Deleted
()

О господи, зачем это говно какого-то анонимного идиота переводить и тащить на лор? Как оценил эту блогозапись Одерский, «it's by someone who from reading his post seems to have written Scala all of two weeks after coming form Javascript.»

trycatch ★★★
()
Последнее исправление: trycatch (всего исправлений: 1)
Ответ на: комментарий от vertexua

Побыстрее комп для компиляции.

Кластер штоле? :)

будет простой код на Scala vs uberhell на Java

За счет чего? Обоснуй, пожалуйста (с примерами)

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

ну ты какбы не знаешь что код должен быть читабельным, и понятным, а также желательно так написанным чтобы вылетевшее NPE однозначно локализовалось, а не

get().get().get().get().get().get()// <- NPE at this line

Deleted
()
Ответ на: комментарий от Deleted

код должен быть читабельным, и понятным

Любой код читабелен и понятен при должном уровне владения языком.

чтобы вылетевшее NPE однозначно локализовалось

В этом поможет отладчик.

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

Любой код читабелен и понятен при должном уровне владения языком.

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

Хотя учитывая что ты таки вляпался в скалу, оно и неудивительно.

В этом поможет отладчик.

Видимо сложно сразу написать так чтобы по стектрейсу можно было протелепать и тест и накидать багфикс 8) Обязательно нужно к удаленному серверу подцепить отладчик чтобы поймать ошибку случающуюся например раз в неделю.

Deleted
()
Ответ на: комментарий от Deleted

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

Это их проблемы. Я никогда ничего подобного не испытывал.

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

Если в принципе такая ошибка происходит, то это ошибка в ДНК. При прямых руках и при использовании нормальных языков/инструментов подобная ситуация не возникнет в принципе.

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

Это их проблемы. Я никогда ничего подобного не испытывал.

Это элементарно, ты не пригоден для работы в команде, это раз, два тебя нельзя допускать к руководству, т.к. твой код подчиненные не смогут разобрать, и три, твой код никто кроме тебя не сможет поддерживать. Грамотный работодатель поостережется тебе поручать важные проекты (т.е. любые не write only).

При прямых руках и при использовании нормальных языков/инструментов подобная ситуация не возникнет в принципе.

Судя по этому бреду, ты используешь только русский язык и только инструменты браузера.

Deleted
()

Мне кажется, что ситуация со Scala все больше напоминает ситуацию с C++. Сложные языки, нормальные возможности и ... негодующие неосиляторы.

forCe
()
Ответ на: комментарий от Deleted

Это элементарно, ты не пригоден для работы в команде

В команде непрофессионалов — да, непригоден.

твой код подчиненные не смогут разобрать

Профессионалы — смогут.

твой код никто кроме тебя не сможет поддерживать

Профессионалы — смогут.

3:0

Vuvuzela
() автор топика
Ответ на: комментарий от Deleted

Разумеется, команда быдло-monkey-кодеров не разберется ни в чем сложнее абстрактной фабрики синглетонов.

Но я с быдло-monkey-кодерами не имею дела.

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

В команде непрофессионалов — да, непригоден.

Ты себя чтоли к профессионалам отнес? Сертификат сеньйора не покажешь?

Профессионалы — смогут. x2

Рекомендую поискать, судя по твоим соплям от скалы, ты прямо таки бесишься от чужого кривого кода, а отчегото веришь что остальные нечто рожденное твоими отростками ягодиц будут терпеть.

Deleted
()
Ответ на: комментарий от Deleted

Сертификат сеньйора не покажешь?

Так называемые «сертификаты» — это бумажки, которыми можно подтереться. Если мне на собеседовании попадается чувак, обвешанный сертификатами, я сразу гоню его ссаными тряпками. Ибо не придумаешь лучшего свидетельства, что перед тобой раздолбай и бездельник, выучивший сотню-другую баззвордов.

А у тебя, дай догадаюсь, такой сертификат есть? Правда ведь?

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

Так называемые «сертификаты» — это бумажки, которыми можно подтереться. Если мне на собеседовании попадается чувак, обвешанный сертификатами, я сразу гоню его ссаными тряпками.

Заклинание «призыв понтующегося неофита» как всегда сработало 8)

Deleted
()
Ответ на: комментарий от Deleted

Это все, что ты можешь сказать по теме? Докажи, что существует связь между цветастой бумажкой и профессионализмом предъявителя.

Vuvuzela
() автор топика

У чувака бомбануло в личном блоге, а на ЛОРе опять будет тред в 100500 комментариев

anonymous
()

years of serious JavaScript development

ну и чего ты это нам притащил?

RedPossum ★★★★★
()

Что только люди не сделают, лишь бы нормальную Java не учить. Не надоел кактус?

anonymous
()
Ответ на: комментарий от Vuvuzela

Кто они, эти твои профессианалы? Сможешь назвать хотябы троих? Или они у тебя сферические в вакууме?

anonymous
()
Ответ на: комментарий от Vuvuzela

Профессионалы — смогут.

Смочь-то, может и смогут, только станут ли, а если и станут, то как быстро тебя пошлют?

anonymous
()
Ответ на: комментарий от anonymous

Кто они, эти твои профессианалы? Сможешь назвать хотябы троих? Или они у тебя сферические в вакууме?

Нет, не сферические. Работают в моем hi-tech стартапе. Но их имена ничего не скажут тебе.

Vuvuzela
() автор топика
Ответ на: комментарий от anonymous

Смочь-то, может и смогут, только станут ли, а если и станут, то как быстро тебя пошлют?

Вот ведь незадача, мы работаем вместе не первый день, и, знаешь, почему-то никто никого не посылает. ЧЯДНТ?

Vuvuzela
() автор топика
Ответ на: комментарий от BattleCoder

На haskell сложновато (точнее, невозможно) писать императивный код.

Но ведь это ложь.

Иногда нужно. =)

Что не так с монадами в Haskell?

Vuvuzela
() автор топика
Ответ на: комментарий от BattleCoder

На haskell сложновато (точнее, невозможно) писать императивный код. Иногда нужно. =)

Ты с дуба рухнул?

Miguel ★★★★★
()

Нить попаболи ниасиляторов скалки, иди!

anonymous
()
Ответ на: комментарий от Vuvuzela

Любой код читабелен и понятен при должном уровне владения языком.

Все господа, расходимся, юный гений в треде заткнет всех нас за пояс.

trex6 ★★★★★
()
Ответ на: комментарий от Vuvuzela

Уважаемый специались ведь сможет представить нам примеры своего хитроумного кода, в которых не сможет разобраться code-monkey, но сообщество профессионалов с легкостью поймет и оценит высокий уровень специалиста?

trex6 ★★★★★
()
Ответ на: комментарий от Vuvuzela

Работают в моем hi-tech стартапе
моем
hi-tech

И тут Остапа понесло? Мы конечно понимаем, что стартап пока еще секретный и у него нет ни названия, ни публичной информации. Мы так же понимаем, что идея стартапа настолько уникальна и перспективна, что озвучить ее просто не предаставляется возможным.

Но вы ведь сможете поделится с нами информацией хотя бы о том, в какой области работает ваш стартап?

trex6 ★★★★★
()
Последнее исправление: trex6 (всего исправлений: 1)
Ответ на: комментарий от Vuvuzela

Что же ты наделал, зараза?! Я от смеха не могу уснуть.

anonymous
()

Неразбериха в инструментах сборки. Полная безнадега в поддержке Scala в IDE. Мешанина из «типов типов». Вечная копипаста с case class'ами.

Вы, кажется, использовали не тот подход. На Скале нельзя как, например, на питоне - просто взять и начать писать после любого другого языка. Её нужно основательно изучать, чтобы использовать эфективно. Как C++.
На работе пишу на Scala - вполне OK язык. Хотя это не совсем то, как я представляю свой 'идеальный' язык.

Не вижу ни одной убедительной причины в пользу Scala; есть много других языков, чтобв поэкспериментировать с ФП

Для нас главным аргументов являлось то, что оно на JVM, ибо вся инфраструктура уже на нём. На Джаве очень не хотелось писать.

Но, ради всего святого, не пытайтесь использовать ее в продакшене.

Плохой совет.

Осиливайте!

Debasher ★★★★★
()

Можно было написать короче: не осилил. Ну и man «парадокс Блаба».

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от BattleCoder

На haskell сложновато (точнее, невозможно) писать императивный код. Иногда нужно. =)

В некоторых учебниках такую фигню могут написать, и где-то я такое даже вроде бы видел. На деле проблем не заметил. Когда нужны были эффективные heap-based priority queue и простой вектор в стиле С++ с возможность двоичного поиска, то я без проблем использовал монаду IO. Чуть многословнее из-за IORef и массивов, но это было единственной проблемой. По скорости код не уступал аналогичному коду на F# и Scala, а, вероятно, даже превосходил, который в свою очередь был очень близок к коду на C# и Java соответственно (примерно зная как первые транслируются во вторые).

Более того, не так просто отделить, где функциональный код, где императивный, а где декларативный. Это всего лишь ярлыки. Хаскель интересен тем, что там все это можно использовать вместе. Впрочем, в Common Lisp - тоже при должном умении. Скажу по секрету, даже в C# иногда.

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)

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

Скала так называется потому, что это язык с масштабируемым применением. На ней можно писать как на яве с сильно очищенным синтаксисом (одно удовольствие), а можно городить моноиды в категориях эндофункторов и дсл на дсле дслем погоняет. Короче, все как с С++, только без плюсовой калечности.

ovk48 ★★★
()
Ответ на: комментарий от ovk48

а можно городить моноиды в категориях эндофункторов

Тем не менее, flow из akka и стандартный плагин продолжений Scala - примерно оно и есть. Другое дело, что могло бы быть сделано намного лучше, например, как в F#. Впрочем, эта тема непонятна многим. Пока они с нею не столкнутся сами - ни черта не поймут. Да и бог с ними.

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)

унылого бреда написал, начиная от системы сборки до поддержки в иде, иди пиши на жабке за миску риса по количеству строк

anonymous
()

Scala мне понравилась. Язык хороший, структурированный. Можно писать не заморачиваясь монадами эндофункторов, а просто используя как жаву с кучей ништяков. Хорошая замена жаве в команде людей, которые любят и умеют программировать. Совместимость с жава-экосистемой на высшем уровне.

SBT я, честно говоря, не осилил. Раза 3 пытался. Слишком он сложный. Система сборки должна быть простая как два рубля. Вот Makefile для любого проекта делается с абсолютно минимальными знаниями. Это хорошая система. Можно там и всякие универсальные правила воротить с трекингом зависимостей, но это уже излишества. Maven тоже хорошая система. Простой pom копипастится легко, в нём всё понятно и он работает. По мере усложнения проекта конфигурация усложняется, но обычно всё понятно. А этот SBT - для него надо походу весь мануал прочитать, чтобы хоть как-то использовать. Но в принципе maven мой проект на скале компилировал нормально, зачем мне этот SBT, я так и не понял.

Поддержка в IDE мне понавилась (Idea 3 года назад). Что мне надо - работало как надо. В паре мест подсвечивалось красным, но это абсолютно не критично было. Есть куда развиваться, но в целом продуктивно работать эта поддержка позволяла. Сейчас скорее всего всё ещё лучше.

Вот стандартная библиотека коллекций в скале это ад и израиль. Просто нереально сложная. При том, что она используется всеми везде и её исходники должны быть читабельны любым новичком. Впрочем может это только у меня такой подход - если чего не понятно, не изучать книжки, а лезть и читать исходный код. Исходный код этих коллекций я нифига не осилил. Там нереально высокий входной барьер. Если переходить на скалу всерьёз, всё, конечно, осиливается потихоньку, но я в итоге в скале использовал java.util-овские коллекции, с ними мне, по крайней мере, всё было понятно, что и как реализовано и работает.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

SBT я, честно говоря, не осилил. Раза 3 пытался. Слишком он сложный.

На самом деле там всё элементарно :)

anonymous
()
Ответ на: комментарий от anonymous

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

Legioner ★★★★★
()
Ответ на: комментарий от BattleCoder

Там могут быть трудности с представлением глобальных изменяемых переменных - тогда необходимо пересмотреть архитектуру. Остальных сложностей пока не заметил. Только по моим оценкам, liftIO в раз 5-6 медленнее, чем прямое IO. Видимо, дополнительный уровень косвенности привносит заметное замедление. Поэтому особенно увлекаться монадными трансформерами с IO не стоит там, где критична скорость.

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.