LINUX.ORG.RU

Кто-нибудь пробовал clojure?

 


0

4

Кто-нибудь пробовал clojure?

Посмотрел что там есть статическая типизация как в haskell, каналы и корутины как в go, унификация как в prolog, макросы как в racket!

И можно писать под android, браузер, сервер и gui!

Вроде всё круто, но хочется услышать вашего мнения.

★

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

Кложура хороша из-за хорошой работы с потоками и stm. А остальное все вторично(«ненужно»).

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

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

unlog1c ★★★
()

хочется услышать вашего мнения

Ну мне кложура нравится, я всё на ней пишу, если искать что-то лучше, то найдёшь может быть какой-нибудь хаскелл только.
Сначала правда подходил к ней очень критично, думал что она сильно жавой будет пахнуть, а оказалось что всё нормально.

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

а скобок везде много.

Да ну? с ML-подобными языками сравните. =)

В лиспах скобок не просто много, а очень много. Это — плата за отсутствие синтаксиса (зато очень простой транслятор и «бесплатный» reflection в придачу). Спорные преимущества для кложи: сложность транслятора ей побоку, а система типов JVM и так торчит наружу, т.е. reflection имеется «из коробки» для любого jvm-языка.

Если уж приходится писать на кложе, текстовый редактор с подсветкой вложенных скобок в помощь (типа LightTable). Писать на лиспе в голом vi без подсветки это адЪ!

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

Да ну? с ML-подобными языками сравните. =)

Ну да, там их почти нет.

В лиспах скобок не просто много, а очень много.

В clojure, по сравнению с cl, racket и schema, скобок почти нет.

И на простеньком коде у меня скобок выходит примерно как на js.

holuiitipun ★
() автор топика

Ещё нашёл, что можно игры на unity писать на clojure.

holuiitipun ★
() автор топика

Здравствуйте. Меня зовут Вячеслав, мне 22 года и я Clojure программист. Я сижу на Clojure с 18 лет. Первый раз я попробовал Clojure с партнёром по бизнесу. Мы сидели в элитном клубе в Париже, и тут он сказал, что недавно пробовал Clojure...

anonymous
()

статическая типизация как в haskell

Из коробки нет.

Вообще, все зависит от того, чего ты хочешь. Если ты хочешь математической строгости, стройности языка и формализации во все поля, ты пришел не туда, тебе в хаскель, а лучше в Standard ML.

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

А еще вопрос к знатокам: clj-файл можно скомпилировать в *.class и запускать отдельно? Как сделано в Kawa, к примеру.

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

А еще вопрос к знатокам: clj-файл можно скомпилировать в *.class и запускать отдельно? Как сделано в Kawa, к примеру.

Можно

anonymous
()

Посмотрел что там есть статическая типизация как в haskell, каналы и корутины как в go, унификация как в prolog, макросы как в racket!

Это чересчур толсто.

anonymous
()

Не пробовал. но вот этот чувак его очень расхваливает. Был на его семинаре. Можешь его блог глянуть.

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

reflection имеется «из коробки» для любого jvm-языка

Херня. Порефлексируй давай скалу с помощью обычной Java-интроспекции, я на тебя посмотрю. Спорим, в процессе тебе придётся реверсинжинирить половину скала-компилятора?

Чем более язык далёк от джавы, тем меньше пользы от встроенной интроспекции.

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

Отвратительные экзепшены

То же, что и в Java. От этого никуда не деться же.

Блевотный дебаггер

А он кому-то сильно нужен в Clojure? И да, можно же дебагер из IDEA юзать.

Ужасная поддержка в IDE

Чего конкретно то не хватает в LightTable, Emacs и Edea?

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

дебаггер

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

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

То же, что и в Java. От этого никуда не деться же.

в Java экзепшены семантичные. А в clojure c java-интеропом (а нафига он нужен без джавы?) вместо экзепшена вылезает нечитаемая портянка на N экранов, в которой ошибка произошла не обязательно в самом низу портянки (обычно во второй трети -), не обязательно у сущности имеющей внятное имя в которую можно ткнуть пальцем, не обязательно в участке кода куда удобно тыкать пальцем. Короче, «где-то произошло что-то, и это плохо». Теперь попробуй найди. Особенно если ошибку сделал не ты, а кто-то из тех двадцати человек, которые вместе с тобой пилят проект и закоммитали свой код одновременно с тобой.

А он кому-то сильно нужен в Clojure?

ну представь, тебе приходит десять мегабайт кода Ъ-ынтерпрайза, написанного архитипичными индусами за пять лет. Классически - код не запускается, а разработчики так раздосадованы этим проектом что отказываются объяснять что либо (архитектуру тем более). Расскажи как в этой ситуации ты будешь разбираться, что вообще происходит, без хорошего отладчика, профилировщика, построителя диаграмм кода, итп?

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

И да, можно же дебагер из IDEA юзать.

что случится если не будет Идеи лучше даже не задумываться :)

Чего конкретно то не хватает в LightTable, Emacs и Edea?

ответ на это надо осмыслить и потыкать, а щаз времени нету. Грубо говоря, работать в Идее с Кложурой намного более неудобно, чем в той же Идее с Java/Scala/PHP.

не понимаю, как можно кодить в Emacs или LightTable. А вот Эклипс нужно тоже осмыслить, что же в нем не так.

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

в Java экзепшены семантичные. А в clojure c java-интеропом (а нафига он нужен без джавы?) вместо экзепшена вылезает нечитаемая портянка на N экранов

Там реально нужны строчек 5. В них есть указания на файл и строку + описание Java exception. Очень быстро привыкаешь к этому, хотя да, немного неудобно, согласен. Вот в ClojureScript действительно ад с эксепшенами в рантайме.

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

Представил. И даже видел: https://github.com/clojure/core.typed (хорошим кодом я это не считаю, т.к. смесь из кучи математики + кучи кода + одного разработчика + кучи лет разработки и когда я смотрел на него последний раз, то там были хаки для обхода циклических зависимостей + макросы по 100 с лишним строк).

Патчи именно в этот проект не писал, но разбирался с его внутренней структурой так:

1) Понять что там лежит в основе. (о чём код)

2) Разобраться с зависимостями файлов друг от друга.

3) Найти точки входа (вариант тут не один, но и не бесконечность).

4) Найти где и что падает.

5) Запустить REPL и в нём прогнать случаи с интересующим кодом руками, чтобы понять где и в чём проблема. В этот момент мы чётко увидим, от каких данных зависит та или иная функция (атомы, биндинги).

6) Знаю что, где и почему падает - пофиксить это.

Тулзы для трейсинга имеются: https://github.com/clojure/tools.trace https://github.com/clojure/tools.analyzer.jvm https://github.com/clojure/tools.analyzer

Ясен чёрт, что это требует времени. Ну а разбор какого кода времени не требует?

Профилировщик можно брать стандартный JVM'овский.

ответ на это надо осмыслить и потыкать, а щаз времени нету.

Прежде чем что-то осуждать следует разобрать что и как.

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

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

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

Ясен чёрт, что это требует времени. Ну а разбор какого кода времени не требует?

разбор с помощью дебаггера :-) Читаешь стектрейс, видишь где падает. Или смотришь на неправильные данные и стараешься уловить, когда они стали неправильными. Ищешь это место в коде и фигачишь брейкпоинт. Жмешь F8 пока приложение не упадет (не остановится на брейкпоинте с условием). В месте где падает - ошибка. Дальше придумываешь костыль, как бы этой ошибки избежать. Код можно почти не читать (только тот контекст, где ошибка), и как работает - не понимать. Быстро, вкусно - съел и порядок.

Прежде чем что-то осуждать следует разобрать что и как.

что и как выглядит просто - мне неудобно. При переезде Java->Scala всё удобно. А Java->Clojure неудобно.

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

Сразу вспоминается доклад Александра Соловьева ::)

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

Код можно почти не читать (только тот контекст, где ошибка), и как работает - не понимать.

В Clojure так же. Ищешь где (по стектрейсу либо точно известно, либо примерно), а потом в REPL гоняешь данные и ищешь решение. Я так же делал с новым Clojure кодом для себя. Никаких особо серьёзных проблем нет, если точно знаешь, что нужно сделать\пофиксисть. Единственное отличие - REPL вместо дебаггера для интерактивного изучения кода.

При переезде Java->Scala всё удобно.

Ну блин, ты пишешь на той же Java получается, только чуть другой синтаксис. Мне вот Scala совсем не понравилась в таком ключе. Kotlin, как эдакая новая Java, мне гораздо больше понравился.

что и как выглядит просто - мне неудобно.

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

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

Вот ты узнал, что функция у тебя не работает. Как ты без дебаггера узнаешь, на каких входных данных (и при каком состоянии системы/shared state) она не работает? Отладочные принты для всех 100500 переменных? :)

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

Ну если тебе прямо так нужен дебаггер - юзай, в чем проблема? В той же Idea он прекрасно раюотает

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

Вот ты узнал, что функция у тебя не работает. Как ты без дебаггера узнаешь, на каких входных данных (и при каком состоянии системы/shared state) она не работает? Отладочные принты для всех 100500 переменных? :)

try-catch тела функции в котором мы ловим текущее состояние системы при падении. Там же мы его и засейвить можем для будущих тестов. Это самое первое, что в голову приходит.

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

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

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

как мы его ловим? не понял

В смысле как? Смотришь от чего зависит код функции (входные параметры, внешние значения (def'ы + bind'ы)) и сейвишь их куда тебе надо (или просто печатаешь). Это тоже самое, что и делает твой дебаггер. Только дебаггер просто показывает тебе какой у тебя сейчас стейт.

Norgat ★★★★★
()

Пробовал.

Пока читаешь книгу - норм. Когда пишешь Hello World - норм. Когда начинаешь пользоваться либами, написаными какими-то нетрезвыми матросами, то они просто валятся с ошибками внутри и ненайдеными функциями хрен знает где

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

Ужасная поддержка в IDE

Это фича. Динамически типизируемая фича

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

Порефлексируй давай скалу с помощью обычной Java-интроспекции

Done. Можно считать что Achievement unlocked?

Btw, вроде в Scala таки родной reflection запилили. А в Clojure оно как в остальных лиспах

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

что вообще происходит, без хорошего отладчика, профилировщика, построителя диаграмм кода

Не благодари

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

не понравилась

понравился

Вот как выбирают ЯП в 21ом веке. А причиной тому есть их переизбыток

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

Что не так в ексепшнах в Java?

С ними всё ок, кроме того, что зачастую они выводят слишком много информации, которую нужно отбросить, чтобы до сути добраться. Т.е. в 90+% случаев достаточно чего-то вроде NullPointException in some/path/SomeClass.class on XX line.

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

Приведите пожалуйста пример ситуации где дебагер нужен.

Вряд ли будет такой пример.

Тем не менее, в сторонние либы логирование не воткнёшь, а подебажить можно. Ну и бывает, что логирования недостаточно. Да, можно добавить, перезапустить и т.д. А можно подебажить. Вероятно, для (долго)компилирующихся языков это более актуально.

Вообще я замечал, что некоторым людям логи удобнее, другим дебагер. Ещё часто тут начинаются различные спекулирования профессиональностью. Типа опытному человеку логов достаточно и т.д.

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

Kotlin, как эдакая новая Java, мне гораздо больше понравился.

А какие у него киллерфичи? Бегло поглядел офсайт, сложилось впечатление, что это такая упрощённая Scala.

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

это такая упрощённая Scala.

Для меня именно это и является фичей. Т.к. я считаю систему типов в Scala переусложнённой и несколько неудобной в использовании.

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

Приведите пожалуйста пример ситуации где дебагер нужен

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

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

Это не упрощенная Scala, это Java + ненужные фичи + фичи, которых не было до Java 8 == Kotlin == RIP

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.