?

Log in

No account? Create an account
усы2

Стой под стрелой

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

Previous Entry Поделиться Next Entry
Дуэйн Scala Джонсон
усы2
tonsky
Побывал на Scala-митапе сегодня. Все супер, все довольны, вроде бы. По высшему разряду, как я и ожидал: в Скале свои обертки над всем: BigInt, Future, всё свое-родное, доклад был про обертки над обертками, было коллективное 10-минутное тупление аудитории над типами «Подождите, а почему так? А, понял! А, нет. А! Нет, все-таки нет», чтобы достать параметр из HttpRequest надо создать и вызвать сервис, который вернет реализованный Future, всё в таком духе. Проект над 5 kloc компилируется 2 минуты (даже в аудитории не все поняли, выдавалось это за достоинство или за проблему).

Для меня это был необычный опыт. Я успешно валидировал свои сомнения по поводу «а не ошибаюсь ли я в выдающихся достоинствах Clojure»? Не ошибаюсь.

И это навело на размышления: откуда берется такая (относительно) бешеная популярность? Интуитивно кажется, что люди должны тянуться к простому (а Скала тут хуже Хаскеля), или легкому в изучении, или стройному и красивому. Окей, не красивому, ну хотя бы что-то должно цеплять. Центральная идея Скалы — боль, боль во всем — выглядит как-то странно, не могут же все на нее вестись?

У меня самого родилось две теории.

Первая — подсознательная тяга к прокрастинации. Можно днями напролет писать интерфейсы, потом писать код, склеивающий свои интерфейсы, потом адаптеры делать из чужих интерфейсов в свои, думать, какой тип поставить: +Req или -Req, сочинять flatMap для собственной реализации Future. Это активность, которую трудно зафейлить — по крайней мере, провал будет виден далеко не сразу, и вообще психологически легко от него дистанцироваться, найдя проблему в чем-нибудь другом.

Вторую проще всего показать на диаграмме:



Несмотря на все изящество и компактность Clojure, площадь соприкосновения с Java в абсолютном выражении сильно меньше. Концепции-то хорошие — да вот беда, привыкли мы к другим. Соответственно, хуже не сама Clojure, просто страшнее мигрировать. Надо дополнительные шестеренки в голове провернуть, поселить туда идею (я без сарказма сейчас говорю, это правда нетривиальное действие). А Scala или очень похожа на Java поначалу, или успешно притворяется таковой (да, у нас свои списки/числа/фьючеры, но они называются как в Java и вообще очень похожи. И классы у нас есть, конечно, очень похоже, приходите!).

Такие гипотезы. А у вас какие мысли?

(Анонимно)
Какие скалисты такой и митап

Все правильно – скала очень джавная (имена классов похожие, да и в целом ООПшненько), поэтому переход будет намного органичнее. Плюс всякие хайповые вещи типа Akka (а мы теперь можем почти так же, как в эрланге!)

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

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

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

(Удалённый комментарий)
без темы (Анонимно) Развернуть
Скала хороша тем, что на ней можно писать как на джаве, но bullshit free.
(то есть никаких public static final foo, выучил val и var и вперед.
В итоге код матерых джавистов становится понятен не только им, а всем.
ну и sloc меньше.

Если бы причина была в этом, выстреливал бы какой-нибудь Fantom/XTend/Ceylon/Kotlin. Чего, как мы видим, не происходит.

(Удалённый комментарий)
(Удалённый комментарий)
+1 к типизации

Но вообще да, Scala она такая.. обманчивая :)

-1 к скобочкам: при правильно настроенном редакторе скобочки не видны :)

Я через 2 недели работы с кложей перестал замечать скобочки, даже не настраивая редактор.

Интуитивно кажется, что люди должны тянуться к простому (а Скала тут хуже Хаскеля), или легкому в изучении
Скалой интересуются, в основном, джава-программисты. Основные задачи, которые решаются на джаве - это веб или бизнес приложения. По сути они сводятся к тому, что бы сделать SQL запрос к базе и сунуть данные в HTML, или наоборот, достать данные из HTML запроса и сунуть в базу. Для решения таких задач от языка требуется совсем немного - поддержка простых структур данных - списков, хэшей, возможность объявлять процедуры. Я думаю, что идеальный баланс простоты и функциональности для веба достигался в каком-нибудь PHP4 (до введения классов), что и обеспечило ему чудовищную популярность.
Но программистам требуется какая-то иллюзия профессионального развития - например, что доставая параметры из HTTP-запроса не с помощью $_GET['username'] а с помощью ридера монад, они делаю что-то сложное и полезное.

>Для решения таких задач от языка требуется совсем немного - поддержка простых структур данных - списков, хэшей, возможность объявлять процедуры.

еще метапрограммирование желательно, чтобы хоть как-то обобщить операцию "пишем 100501-й CRUD-отчет-журнал-регистр" :)

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

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


(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
без темы (Анонимно) Развернуть
У мну, например:

1) рантайм джавовский, потому не Хаскель.
2) Скобки не пугают абсолютно, я писал на лиспах. Кложа, кстати, лучший из. 3) Однако лиспы хороши для генерации, для бизнес-логики нужны (мне) гарантии, которые может дать только статическая типизация (пусть будет пунктик).
4) про прокрастинацию: на динамических языках у меня пишется быстрее, поддерживается тяжелее по сравнению со статическими (субъективно, может миф, а может я так криво пишу)

Потому Скала. Кложу, опять же, хотел прикрутить для кодогенерации. Однако сейчас есть макросы, так что необходимость отпала.

Если рантайм не JRE, то зависит от. Может быть Haskell, а может и Си. У меня в основном проекты на разных языках написаны (т.е. один и тот же из кусков сшитый). Но у меня в основном энтерпрайз. Я не представляю, как бы я это всё на кложе херачил.

Ах да! Извиняюсь, что не про популярность отвечал, а за себя. Но я это к тому, что не всё может объясняться прокрастинацией и скобочками.

Скала более популярна, думаю, потому что тупо проще перепрыгнуть с явы на более "сахарную" яву. Вряд ли среди перешедших с явы на скалу больше приверженцев ФП, чем императивщиков...
На мой взгляд, основной недостаток как кложи так и скалы в разной силы, но всё-таки привязке к jvm. Вот если бы кложа могла вообще обходиться без jvm и других чужих платформ, перестала бы "паразитировать" на ней, думаю, доверия и интереса к ней было бы больше. Хотя, я пока не большой знаток clojure и тем более, scala. Возможно, уже есть варианты clojure без jvm?

Есть ClojureScript c целевой платформой JavaScript. Но переносимость между ними кажись не 100%.

Динамическая типизация в энтерпрайз-аутсурс плохо заходит. Того же питона почти нет, Ruby тока для веба. Там культура grep-oneliner или реформатилку лога в которой от силы строк 20 питона писать на джаве в 300+ строк. Жопо-часы продают, а не продукты. Скала вроде и секси и бизнес не убьёт.

Если смотреть на мир шире, то вроде кложа и не отстаёт. Вакансий я вот побольше вижу чем для скалы.

Насчёт простоты Хаскеля... Вот вам понятно зачем IO и сочетания списков делаются через одно место? Что в них существенно общего что надо вместо runWithResult для первого и flatMap для второго везде писать >>=? Как-то не похоже на простоту по Ричу =)

Точно, прокрастинация же еще в аутсорсе хорошо продается! Тогда вопросов, кажется, уже не остается

Мне сдается, дело во втором: шажок от джавы к скале кажется не таким большим. Disclaimer: я ее совсем не знаю.

Под дот-нэтом есть замечательный язык F#, "аналог" Scala. Нечто среднее между Питоном и Haskel. Это наверное самый декларативный ЯП из существующих, и точно один из самых простых. рано или поздно он появится и под JVM. Там нет всей этой ненужной вымораживающей ерунды и усложнений Scala

Edited at 2014-08-29 18:09 (UTC)

(Анонимно)
Вообще-то F# это OCaml но для .NET, но никак не Haskell.

По наблюдениям в интернетах, некоторые люди просто хотят писать на хаскеле или чем-то подобном, но от них требуют JVM, вот и пишут на Скале, насаживая там монаду на монаде поверх не подходящей по устройству ВМ, в итоге получаются монстры.

Мне кажется такие люди и на хаскеле бы не блистали чистотой идеи. Дело-то не в языке. Можно на Кложе писать как на Хаскеле, можно на Хаскеле как на Кложе.

И это навело на размышления: откуда берется такая (относительно) бешеная популярность? Интуитивно кажется, что люди должны тянуться к простому (а Скала тут хуже Хаскеля), или легкому в изучении, или стройному и красивому. Окей, не красивому, ну хотя бы что-то должно цеплять. Центральная идея Скалы — боль, боль во всем — выглядит как-то странно, не могут же все на нее вестись?
Очень живо напомнило одну популярную DVCS.

Гит я еще могу оправдать — ему альтернатив-то нет

Я, в общем-то, понимаю, почему любители дампов AST компилятора испытывают боль в нижней части спины, когда встречают нормальный (т.е. типизированный и с сахарком) язык программирования. Непонятны только попытки как-то рационализировать свои ощущения - вместо того, чтобы смириться и принять мир таким, как он есть.

Когда очередной невежда в очередной раз заводит пластинку про "в лиспе нет синтаксиса" в мире умирает один невинный котёнок. Задумайся об этом.

без темы (Анонимно) Развернуть