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.

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

Ответ на: комментарий от dave

могут быть трудности с представлением глобальных изменяемых переменных

А в чём трудности? Есть возможность напрямую сделать

myGlobalVar :: IORef Int
myGlobalVar = unsafePerformIO $ newIORef 0
{-# NOINLINE myGlobalVar #-}

без всяких трансформеров, в данном случае unsafePerformIO нормален, так как единожды даёт чистый адрес (глобальной переменной), тот сохраняется, а при использовании код всё равно опускается в IO.

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

Ты исходники stl или glibc давно открывал?

Исходники JDK открываю практически каждый день. На С/С++ пишу мало, поэтому не могу комментировать по STL или glibc.

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

Я тоже maven использовал в итоге. Просто пытался SBT использовать, вроде как каноничный инструмент для Scala, разумно же его использовать.

Legioner ★★★★★
()

В общем-то известно, что Scala создавалась как язык, на котором можно писать в любом стиле, а подмножества использовать как DSL. Из чего следует, что людям, которые не могут поддерживать стиль, лучше на ней не писать.

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

Профессионалы — смогут. Но зачем?!

Бро, я твой код не видел и догадок никаких строить не хочу. Но вот твой подход «профессионалы — смогут» считаю в корне некорректным. Объясню почему.

Я по долгу работы очень часто занимаюсь поддержкой чужого кода. Починить-доработать-задокументировать, такого рода фигня. Я - профессионал и действительно мне не попадалось такого кода, чтобы я не смог разобрать или поддерживать. А зачастую встречается лапша, на которую даже автор уже смотреть не хотел: хороший код крайне редко попадается. Но хочется, блин, в руки автору насрать за это убожество, которое он намалевал. И с вертухи в щщи. Плохой код профессионал, безусловно, разберёт, но это больше времени на анализ и переработку.

В общем, перефразирую известное высказывание: Любой дурак может написать код, понятный профессионалу. Хорошие программисты пишут код, понятный даже джуниору.

shadow_of_shadow
()

Вувузелы мамкиного борща... Охщи...

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

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

Примеров не будет, еще чего кодить ради идиотов на форуме бесплатно. Ответ будет.

Акторы, Future (которые монады и умеют композицию), async/await

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

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

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

+1. Для старта хватит файлика из 3 строчек и sbt update.

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

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

Писать на жабе для себя?

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

Future (которые монады и умеют композицию), async/await

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

Ты же, ЕМНИП, курсы у одерского проходишь по реактивному программированию проходишь. Так вот, помнишь там было List[Future[T]]->Future[List[T]] ? И сколько копий пришлось об него поломать, потому что на async/await ограничения наложены, а для for не все монады, оказывается, равны.

В этом вся скала, необходимо некоторое упорство чтобы стало удобно было писать на ней используя новые для себя фичи.

RedPossum ★★★★★
()

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

Согласен, писал на ней когда-то простенький компилятор с простейшими частичными вычислениями, вырвал все волосы.

не терпится испытать сильные системы типов (а вам должно хотеться!)

Не хочется

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

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

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

Интересно, как соотносится множество неосиляторов скалы и С++. Это люди примерно одного склада ума?

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

Но их имена ничего не скажут тебе.

Ни у них, ни у их друзей, знакомых нет профиля ни в одной соц сети, они не участвовали ни в одной сетевой дискуссии (на формумах, в списках рассылки и прочее) под идентифицирующими их именами? Ты собрал команду анонимов?

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

не первый день

А который день вы работаете вместе?

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

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

Кстати, для SBT много клёвых плагинов. Например есть sbt-native-packager, который собирает проект в deb/rpm/etc. Для maven'a я такого не нашёл (возможно плохо искал).
Ну и да, он простой.

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

ЧЯДНТ?

Не делаете или делеаете нерегулярно code review?

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

моем hi-tech стартапе

<vanga-mode>Который развалится в течении двух лет</vanga-mode>

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

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

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

anonymous
()

Так парень скорее всего сломался на нынешнем корсеровском курсе «Реактивного программирования» — там две недели Эрик Майер всех своим косноязычием, акцентом из дурных фильмов про фашистов и (если совсем честно) говнокодом мучил, вот нервы и не выдержали.

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

Думаю, достаточно раз взглянуть, чтобы понять, что ошибки не в скале, а в ДНК.

А че такого-то? Ну, подумаешь, еврей.

Или это и есть «ошибка в ДНК»? :-)

anonymous
()

Фигня какая-то, смешано все в кучу. 1) Качество инструментария а) общеизвестно, б) объяснимо (там же выходцы из мирка ява, где планка установлена ниже плинтуса) и в) потихоньку повышается. 2) Скала не для артистов во всем белом, которые могут себе позволить писать нулёвый код на хаскеле, а для говночистов по уши в яве. Это компромиссный язык, и он дает шанс выбраться из болота людям, проектам и организациям. 3) Кто еще не разобрался, чем def отличается от var, и не понимает, что «=» не исключает фигурных скобочек, надо идти в детский сад, подготовительную группу и учиться, а не выеживаться и не позориться публично. Это в пределах первой сотни страниц любого учебника рассказывается.

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

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

О, а вот и Илита пожаловала.

Как вам там живется на айтишном Олимпе? Метациркулярные вычислители метациркулируют? Пандорические захваты пандорически захватывают? Зигоморфизмы фалломорфируют? Борщок не остывает?

Ты должен быть благодарен «говночистам» и «болоту» за то, что у тебя есть борщ, тепло в доме, вода и электричество. Продукты в магазине, из которых мамка всегда может сварить тебе вкусный наваристый борщок. Энторнет, в который ты всегда можешь прийти потроллить, поизображать илитку и побугуртить, когда тебя разоблачат. Наконец, если ты раз в год решишь вылезти из свой берлоги на улицу — тебя там не зарежут бородатые моджахеды с криком «Аллаху акбар!»

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

anonymous
()

Я к ней в фоновом режиме присматривался из-за Play Framework. Потом как-то пощупал sbt. И решил с этим больше не связываться :)

KRoN73 ★★★★★
()

В свое время отказался от Scala в пользу Clojure. Как будто скинул с плеч большой лишний груз.

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

Для каких целей применяешь Clojure?

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

Я так и делал, но unsafePerformIO делает код unsafe, если не ошибаюсь. Там можно поправить как trustworthy, но как говорится, осадок остается)

dave ★★★★★
()
Ответ на: Профессионалы — смогут. Но зачем?! от shadow_of_shadow

В общем, перефразирую известное высказывание: Любой дурак может написать код, понятный профессионалу. Хорошие программисты пишут код, понятный даже джуниору.

+1. По-моему очень верная мысль.

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

Кстати, вот физиономия автора этого ранта: http://overwatering.org/img/gga.jpg

Думаю, достаточно раз взглянуть, чтобы понять, что ошибки не в скале, а в ДНК.

По-моему у него умные и счастливые глаза. В чем проблема?

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