У меня какая-то давняя страсть к LISP-подобным языкам, нравятся хоть ты тресни. И вот, мне понадобился небольшой бот. В принципе, его можно быстро написать на Python, но получить мало фана, либо долго, но на Clojure, попутно получив море удовольствия
Обработка исключений в Clojure оказалась неожиданно многогранной и, как мне кажется, интересной темой. Копировать сюда родившийся в процессе текст удовольствие долгое, так что просто линка: http://sysdev.me/clojure-exceptions/
Дополнения/комментарии приветствуются
Здравствуйте, kaa.python, Вы писали:
KP>У меня какая-то давняя страсть к LISP-подобным языкам, нравятся хоть ты тресни. И вот, мне понадобился небольшой бот. В принципе, его можно быстро написать на Python, но получить мало фана, либо долго, но на Clojure, попутно получив море удовольствия KP>Обработка исключений в Clojure оказалась неожиданно многогранной и, как мне кажется, интересной темой. Копировать сюда родившийся в процессе текст удовольствие долгое, так что просто линка: http://sysdev.me/clojure-exceptions/ KP>Дополнения/комментарии приветствуются
Так обычный try/catch же без рестартов. Ну хэшмапчик с инфой ещё, но это и в яве можно сделать.
Здравствуйте, Turtle.BAZON.Group, Вы писали:
TBG>Так обычный try/catch же без рестартов. Ну хэшмапчик с инфой ещё, но это и в яве можно сделать.
Ну вообще-то все не совсем так, как ты говоришь. Да, рестартов нет, но есть сопоставление с образцом в исключениях и сторонние функции обработчики в Erlang-стиле. Вот об этом по линке выше и написано
Здравствуйте, kaa.python, Вы писали:
KP>У меня какая-то давняя страсть к LISP-подобным языкам, нравятся хоть ты тресни. И вот, мне понадобился небольшой бот. В принципе, его можно быстро написать на Python, но получить мало фана, либо долго, но на Clojure, попутно получив море удовольствия KP>Обработка исключений в Clojure оказалась неожиданно многогранной и, как мне кажется, интересной темой. Копировать сюда родившийся в процессе текст удовольствие долгое, так что просто линка: http://sysdev.me/clojure-exceptions/ KP>Дополнения/комментарии приветствуются
В качестве упражнения, ошибки можно складывать в core.async/chan и обрабатывать централизованно (да, руками, но можно и своей макрой). Если честно, чаще всего хватает обыкновенного try/catch,
потому что очень много интеропа, а в самом кложекоде исключений минимальное количество. Но это, видимо из-за специфики моего кложекода — скрипты для обработки больших массивов данных.
Здравствуйте, m.aksenov, Вы писали:
MA>В качестве упражнения, ошибки можно складывать в core.async/chan и обрабатывать централизованно (да, руками, но можно и своей макрой).
Всмысле перехватить и положить в очередь? Ну, да, это вроде в любом языке где есть исключения можно... а зачем? Я не уловил идеи, похоже.
MA>Если честно, чаще всего хватает обыкновенного try/catch, MA>потому что очень много интеропа, а в самом кложекоде исключений минимальное количество. Но это, видимо из-за специфики моего кложекода — скрипты для обработки больших массивов данных.
Мне кажется, Clojure как и любой другой лиспоподобный язык особо не приветствует исключения. Кстати, а почему такой выбор для обработки больших массивов данных? Из-за Incanter-а?
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, m.aksenov, Вы писали:
KP>Всмысле перехватить и положить в очередь? Ну, да, это вроде в любом языке где есть исключения можно... а зачем? Я не уловил идеи, похоже.
Допустим у нас есть хитрое приложение с UI на Clojurescipt. По сути исключения в таких приложениях являются вполне штатной ситуацией, и хорошо
бы обработать как еще одно сообщение в системе.
Я часто делаю то же самое для логгирования, потому что так можно четко отслеживать порядок возникновения ошибок в многопоточных приложениях.
KP>Мне кажется, Clojure как и любой другой лиспоподобный язык особо не приветствует исключения. Кстати, а почему такой выбор для обработки больших массивов данных? Из-за Incanter-а?
Не только. У кложи есть ряд хороших свойств:
1) Краткость и выразительность.
2) Квалифицированное и дружелюбное коммьюнити (например, на http://clojurians.slack.com/).
3) Честный и прозрачный интероп с платформой, что дает мне легко использовать вагон адекватно работающих джавных библиотек для
обработки данных — сейсмики, картографии. Я до сих пор с ужасом вспоминаю день, когда пробовал работать с шейпами
на Python. Пусть проблема была в кривой open-source библиотеке, так как ArcGIS под руками не было, но осадочек остался.
4) Производительность как труда, так и самого кода. Кложа не слишком сильно отстает от чистой джавы по скорости (в среднем
процентов на 10), но при этом дает хороший прирост в производительности труда и уменьшении количества ошибок из-за краткости.
Ну и очень субъективный фактор — в нашей команде clojure любят все, потому что она прикольная
Здравствуйте, kaa.python, Вы писали:
KP>Ну вообще-то все не совсем так, как ты говоришь. Да, рестартов нет, но есть сопоставление с образцом в исключениях и сторонние функции обработчики в Erlang-стиле. Вот об этом по линке выше и написано
В языке с маросами можно что угодно сделать. В Немерле ПМ в обработчиках был всегда. Прикрутить подключение функций можно через макросы.
В прочем, народу должно быть интересно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>В языке с маросами можно что угодно сделать. В Немерле ПМ в обработчиках был всегда. Прикрутить подключение функций можно через макросы.
Как я понимаю (в кишки не лазил), наиболее понравившийся мне dire обходится без макросов. А вот slingshot – да, чистые макросы.
VD>В прочем, народу должно быть интересно.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, Turtle.BAZON.Group, Вы писали:
TBG>>Так обычный try/catch же без рестартов. Ну хэшмапчик с инфой ещё, но это и в яве можно сделать.
KP>Ну вообще-то все не совсем так, как ты говоришь. Да, рестартов нет, но есть сопоставление с образцом в исключениях и сторонние функции обработчики в Erlang-стиле. Вот об этом по линке выше и написано
Да нет. Как раз таки как я говорю. Чуть более интересные исключения, чем в яве, не делают их интересными и многогранными.