Обработка исключений в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 13.08.15 15:01
Оценка: 2 (1)
У меня какая-то давняя страсть к LISP-подобным языкам, нравятся хоть ты тресни. И вот, мне понадобился небольшой бот. В принципе, его можно быстро написать на Python, но получить мало фана, либо долго, но на Clojure, попутно получив море удовольствия
Обработка исключений в Clojure оказалась неожиданно многогранной и, как мне кажется, интересной темой. Копировать сюда родившийся в процессе текст удовольствие долгое, так что просто линка: http://sysdev.me/clojure-exceptions/
Дополнения/комментарии приветствуются
clojure exceptions jvm
Re: Обработка исключений в Clojure
От: Turtle.BAZON.Group  
Дата: 14.08.15 15:07
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>У меня какая-то давняя страсть к LISP-подобным языкам, нравятся хоть ты тресни. И вот, мне понадобился небольшой бот. В принципе, его можно быстро написать на Python, но получить мало фана, либо долго, но на Clojure, попутно получив море удовольствия

KP>Обработка исключений в Clojure оказалась неожиданно многогранной и, как мне кажется, интересной темой. Копировать сюда родившийся в процессе текст удовольствие долгое, так что просто линка: http://sysdev.me/clojure-exceptions/
KP>Дополнения/комментарии приветствуются

Так обычный try/catch же без рестартов. Ну хэшмапчик с инфой ещё, но это и в яве можно сделать.
Re[2]: Обработка исключений в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 14.08.15 16:05
Оценка:
Здравствуйте, Turtle.BAZON.Group, Вы писали:

TBG>Так обычный try/catch же без рестартов. Ну хэшмапчик с инфой ещё, но это и в яве можно сделать.


Ну вообще-то все не совсем так, как ты говоришь. Да, рестартов нет, но есть сопоставление с образцом в исключениях и сторонние функции обработчики в Erlang-стиле. Вот об этом по линке выше и написано
Re: Обработка исключений в Clojure
От: m.aksenov Россия http://maksenov.info/
Дата: 21.08.15 04:40
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>У меня какая-то давняя страсть к LISP-подобным языкам, нравятся хоть ты тресни. И вот, мне понадобился небольшой бот. В принципе, его можно быстро написать на Python, но получить мало фана, либо долго, но на Clojure, попутно получив море удовольствия

KP>Обработка исключений в Clojure оказалась неожиданно многогранной и, как мне кажется, интересной темой. Копировать сюда родившийся в процессе текст удовольствие долгое, так что просто линка: http://sysdev.me/clojure-exceptions/
KP>Дополнения/комментарии приветствуются

В качестве упражнения, ошибки можно складывать в core.async/chan и обрабатывать централизованно (да, руками, но можно и своей макрой). Если честно, чаще всего хватает обыкновенного try/catch,
потому что очень много интеропа, а в самом кложекоде исключений минимальное количество. Но это, видимо из-за специфики моего кложекода — скрипты для обработки больших массивов данных.
Re[2]: Обработка исключений в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 21.08.15 05:15
Оценка:
Здравствуйте, m.aksenov, Вы писали:

MA>В качестве упражнения, ошибки можно складывать в core.async/chan и обрабатывать централизованно (да, руками, но можно и своей макрой).


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

MA>Если честно, чаще всего хватает обыкновенного try/catch,

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

Мне кажется, Clojure как и любой другой лиспоподобный язык особо не приветствует исключения. Кстати, а почему такой выбор для обработки больших массивов данных? Из-за Incanter-а?
Re[3]: Обработка исключений в Clojure
От: m.aksenov Россия http://maksenov.info/
Дата: 21.08.15 05:30
Оценка: 8 (1)
Здравствуйте, 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 любят все, потому что она прикольная
Re[3]: Обработка исключений в Clojure
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.08.15 16:09
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Ну вообще-то все не совсем так, как ты говоришь. Да, рестартов нет, но есть сопоставление с образцом в исключениях и сторонние функции обработчики в Erlang-стиле. Вот об этом по линке выше и написано


В языке с маросами можно что угодно сделать. В Немерле ПМ в обработчиках был всегда. Прикрутить подключение функций можно через макросы.

В прочем, народу должно быть интересно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Обработка исключений в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 01.09.15 00:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В языке с маросами можно что угодно сделать. В Немерле ПМ в обработчиках был всегда. Прикрутить подключение функций можно через макросы.


Как я понимаю (в кишки не лазил), наиболее понравившийся мне dire обходится без макросов. А вот slingshot – да, чистые макросы.

VD>В прочем, народу должно быть интересно.


Ну, судя по реакции не шибко
Re[3]: Обработка исключений в Clojure
От: Turtle.BAZON.Group  
Дата: 29.01.16 21:06
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, Turtle.BAZON.Group, Вы писали:


TBG>>Так обычный try/catch же без рестартов. Ну хэшмапчик с инфой ещё, но это и в яве можно сделать.


KP>Ну вообще-то все не совсем так, как ты говоришь. Да, рестартов нет, но есть сопоставление с образцом в исключениях и сторонние функции обработчики в Erlang-стиле. Вот об этом по линке выше и написано


Да нет. Как раз таки как я говорю. Чуть более интересные исключения, чем в яве, не делают их интересными и многогранными.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.