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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.