@haskellru

Страница 297 из 1551
Anatolii
12.06.2017
19:35:02
Ну через костыли какие-то только

Alexander
12.06.2017
19:35:21
глобальную переменную как в си которую тред должен поллить?

Anatolii
12.06.2017
19:35:24
Это не та вещь которая нужна каждый день

Vasiliy
12.06.2017
19:35:30
вот тут это всё очень годно расписано http://chimera.labs.oreilly.com/books/1230000000929

Google
Anatolii
12.06.2017
19:35:41
Но когда ты будешь рад

Vasiliy
12.06.2017
19:35:45
Parallel and Concurrent Programming in Haskell By Simon Marlow

Alexander
12.06.2017
19:35:47
да, марловская книга прекрасна

Alexander
12.06.2017
19:35:58
да даже документации в Control.Exception хватит

MonadMask соотвественно обобщает mask на разные монадки

Vasiliy
12.06.2017
19:36:41
у него и мотивация, и сравнение с другими подходами описаны

Alexander
12.06.2017
19:36:50
@elemir90 https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/asynch-exns.pdf

но практика показывает что марловской книги людям не всегда достаточно :(

@anpryl я думаю даже в вашей кодобазе это используется часто :)

Anatolii
12.06.2017
19:38:09
Я такого не видел!

?

Евгений
12.06.2017
19:38:23
Ладн, почитаю. Хотя так просто не могу придумать никакого пьюр-обоснования

Google
Alexander
12.06.2017
19:38:44
@anpryl все таймауты например

Vasiliy
12.06.2017
19:38:50
я, честно говоря, её по-диагонали прочитал, но мне хватило, чтоб понять, что надо иметь в виду асинхронные исключения и использовать bracket

Alexander
12.06.2017
19:39:00
сейчас часто за async прячется

типа race a b и все счастливы, а то что там MVar и асинхронные исключения, ну кому это важно?

@elemir90 в статье только старый API

block/unblock

вместо mask

это все естественно для базовых монадок типа ST/STM/IO

Vasiliy
12.06.2017
19:41:26
а кроме IO исключения возникнуть нигде и не могут же

а, есть же seq

Anatolii
12.06.2017
19:43:40
Сегодня получился хороший поучительный вечер ?

Alexander
12.06.2017
19:43:52
ну асинхронное исключение может прилететь когда угодно

т.е. ты прав, но как бы это сказать

если сделать case somethingPure of ... то вот пока у нас матчится somethingPure там может прилететь исключение, если есть аллокации

@elemir90 посмотрел примеры зачем это может надо быть? там во вступлении

Евгений
12.06.2017
19:46:27
@elemir90 https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/asynch-exns.pdf
Ну такое, они семантику через пи-калкулус строят

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

Vasiliy
12.06.2017
19:50:17
если сделать case somethingPure of ... то вот пока у нас матчится somethingPure там может прилететь исключение, если есть аллокации
ну да, это всегда надо учитывать, я лично всё либо в bracket заворачиваю, либо в resourcet, если много всего

Alexander
12.06.2017
19:50:45
ну жизнь же сложнее, особенно если всякая сеть/MVar/STM вокруг

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

Google
Vasiliy
12.06.2017
19:51:28
у меня, к счастью, всё довольно просто

а если и упадёт - не жалко

Alexander
12.06.2017
19:52:01
у нас был интересный случай мы в cloud-haskell в одной функции раза 4 concurrency баги ловили

Евгений
12.06.2017
19:52:07
а если и упадёт - не жалко
Эрланг-программист в чате

Alexander
12.06.2017
19:52:28
2 человека которые в этом деле разбираются и построчно проверяли пытаясь прогонять всякие ситуации

Vasiliy
12.06.2017
19:52:29
:D

Alexander
12.06.2017
19:52:48
в итоге потом использовали специальный quickcheck-like шедулер

в итоге все работает

шудулер только для CH не обобщенный

для обобщенного нужно dejavu брать

Евгений
12.06.2017
19:53:30
Вы меня разочаровали, в общем, уйду в идрис. Модно, молодёжно

Alexander
12.06.2017
19:53:46
я думаю в идрисе тоже что-то такое есть, но через зад

Alexander
12.06.2017
19:53:47
=)

как и половина вещей там

он конечно клёвый, но блин..

Vasiliy
12.06.2017
19:54:57
я вот, кстати, вообще не в курсе, как там конкурентность рантаймом разруливается

там треды идриса 1-к-1 к тредам ОС?

я про сишный бэкенд, само собой

Alexander
12.06.2017
20:04:09
не в курсе если честно

я не дошёл до concurrency тами

Google
Vasiliy
12.06.2017
20:08:03
я книгу уже 3 месяца читаю, да всё никак ниасилю

знание сабжа с одной стороны помогает, а с другой мешает - сейчас вот про State читаю, сил нет уже

Евгений
12.06.2017
20:39:14
Ну просто я очень понимаю, правда, если наши исходные концепции не выдерживают критики потребностями, то нужно так и признаться: сорян, чуваки, идея строить язык вокруг чистой лямбды зафейлилась, расходимся. Дальше у нас будет просто нагромождение костылей, которые позволят жить тем, кто успел пихнуть это в продакшон

Alexander
12.06.2017
21:52:40
я не очень понимаю аргумента..

Dmitry
12.06.2017
22:38:24
Почему зафейлилось-то? Развитие-то продолжается

Vladimir
12.06.2017
23:06:16
лол

Если бы я делал язык программирования с нуля, каким бы он был? Пофантазирую вслух. 1. Его компилятор (транслятор/интерпретатор) был бы очень рано забутстраплен с его же стандартной библиотеки. Пользу eating your own dog's food невозможно переоценить. 2. Я бы исключил из него математику (всю). Даже a = a+1 нельзя было бы написать. Вообще её наличие в языке уходит корнями в Fortran и другие мастодонты, а у нас немного другие нужды. Есть итераторы, есть ranges, хотите математики - велкам в библиотеки, не устраивайте мне тут mathcad. Заодно и массивы выкинул бы. 3. Уровни доступа переоценены. Достаточно было бы всего 2 -- public и package-protected (доступен только в этом пакете). Сделать public поля нельзя. 4. Пакеты. Само собой. Вложенные пакеты запретить. Вложенные классы - в пакет, в класс, в метод - разрешить. 5. Сделать метод или класс закрытым от наследования нельзя 6. Никаких setter-ов и getter-ов - только функции/методы. Ссылки на объекты и другие сущности должны быть first-class citizens, а не стыдливо вести себя как бесплотные указатели, унаследованые из си. 7. Модули - как класс, но существует в едином экземпляре, как пакет. 8. Типобезопасные макросы в языке иметь хорошо и правильно, но не на уровне syntax tree, а выше. Хотя можно не прятать это в компилятор, а выпустить macros sdk 9. JIT и эффективный GC переоценнены, а вот repl и хороший анализ ошибок - их, наоборот, не хватает 10. Все доступные инструменты сборки чудовищно гибкие. Модель требует переосмысления, и начинать его надо со сбора требований, при этом важно избежать ловушки, когда нам кажется, что требования и так выявлены (что там непонятного, это же очевидный сборщик). Мне кажется, уже на этом можно не одну голову сломать, но труд этот будет вознагражден.

Андрей
12.06.2017
23:11:55
Хорошо, что я в телеграме только в трех чатах. В двух уже это копипастили :)

Vladislav
12.06.2017
23:12:16
Если бы я делал язык программирования с нуля, каким бы он был? Пофантазирую вслух. 1. Его компилятор (транслятор/интерпретатор) был бы очень рано забутстраплен с его же стандартной библиотеки. Пользу eating your own dog's food невозможно переоценить. 2. Я бы исключил из него математику (всю). Даже a = a+1 нельзя было бы написать. Вообще её наличие в языке уходит корнями в Fortran и другие мастодонты, а у нас немного другие нужды. Есть итераторы, есть ranges, хотите математики - велкам в библиотеки, не устраивайте мне тут mathcad. Заодно и массивы выкинул бы. 3. Уровни доступа переоценены. Достаточно было бы всего 2 -- public и package-protected (доступен только в этом пакете). Сделать public поля нельзя. 4. Пакеты. Само собой. Вложенные пакеты запретить. Вложенные классы - в пакет, в класс, в метод - разрешить. 5. Сделать метод или класс закрытым от наследования нельзя 6. Никаких setter-ов и getter-ов - только функции/методы. Ссылки на объекты и другие сущности должны быть first-class citizens, а не стыдливо вести себя как бесплотные указатели, унаследованые из си. 7. Модули - как класс, но существует в едином экземпляре, как пакет. 8. Типобезопасные макросы в языке иметь хорошо и правильно, но не на уровне syntax tree, а выше. Хотя можно не прятать это в компилятор, а выпустить macros sdk 9. JIT и эффективный GC переоценнены, а вот repl и хороший анализ ошибок - их, наоборот, не хватает 10. Все доступные инструменты сборки чудовищно гибкие. Модель требует переосмысления, и начинать его надо со сбора требований, при этом важно избежать ловушки, когда нам кажется, что требования и так выявлены (что там непонятного, это же очевидный сборщик). Мне кажется, уже на этом можно не одну голову сломать, но труд этот будет вознагражден.
очень толсто

Евгений
13.06.2017
06:49:53
Почему зафейлилось-то? Развитие-то продолжается
Я не хочу срачи устраивать. Просто я глубоко сомневаюсь, что можно эти ваши асинхронные исключения подогнать под чистую лямбду. В статье выше в качестве семантики используют трансляцию в pi-calculus. Белый гуглинг не дал мне ни трансляции, сохраняющей операционной семантику, пи-исчисления в лямбду, ни лямбда-обоснования для асинхронных исключений.

Admin
ERROR: S client not available

Dmitry
13.06.2017
07:03:42
Я имел ввиду, что под выражением "идея зафейлилась" подразумевается какой-то окончательный вывод. Теорема "нельзя сделать асинхронные исключения на хаскеле". Ну это ж не так, может, в будущем чего-то придумают

Alexander
13.06.2017
07:30:19
я вижу описание операционной семантики, от pi-calculus там только возможность отправки сообщения

Oleg
13.06.2017
07:35:44
Я не хочу срачи устраивать. Просто я глубоко сомневаюсь, что можно эти ваши асинхронные исключения подогнать под чистую лямбду. В статье выше в качестве семантики используют трансляцию в pi-calculus. Белый гуглинг не дал мне ни трансляции, сохраняющей операционной семантику, пи-исчисления в лямбду, ни лямбда-обоснования для асинхронных исключений.
Я очень плохо в курсе, но вообще не припомню, чтобы в подходах с грязными лямбдами межпотоковый обмен эксепшнами как-то лучше решался. Во всяких ерлангоакковских актор моделях проблема по сути игнорируется. Но если посмотреть мотивацию в той статье - то само желание потока убить своё дитя рождается, как правило, от осознания, что он ему больше не нужен. А нежелание умирать, как сказал Александр, от осознания, что есть неосвобождённые ресурсы. Поэтому чисто из интуиции из соседнего чата проблема как-то должна решаться линейными типами или типа того, которые вполне вяжутся с чистыми лямбдами. Т.е. если широко посмотреть - ручное управление асинхронностью так же плохо вяжется с чистотой, как и ручное управление памятью.

Alexander
13.06.2017
09:16:54
@mkrentovskiy а как тебе nanomsg по сравнению с zeromq?

вопрос ко всем присутсвующим

Max
13.06.2017
09:17:29
А вот его я не трогал. Но у них один и тот же автор.

Льва Валкина можно поспрошать, он вроде высказывался.

Alexander
13.06.2017
09:19:16
да, я знаю там автор любит между пакетами переходить

Max
13.06.2017
09:19:43
Помнится еще был гневный блогпост, где у кого-то забили принимать патчи в апстрим nanomsg, и он обиделся.

Google
Alexander
13.06.2017
09:19:47
он поидее проще, без ада с роутингом, си (без плюсовых исключений), и более вменяемые типы сокетов есть (мне не важно)

Max
13.06.2017
09:20:24
Ну вот да, это немного подкупает.

С другой стороны, я сейчас скажу чернь - а чобы ни HTTP?

Alexander
13.06.2017
09:21:24
вообще http2 вполне себе вариант

мне не очень нравится, что в целом протокол сложный

т.е. у меня очень тупой паттерн

Max
13.06.2017
09:22:47
У тебя бинарные потоки?

Alexander
13.06.2017
09:22:49
но с другой стороны там решены проблемы

нет

в данный момент

Max
13.06.2017
09:23:09
Ну тогда можно и не 2.

Alexander
13.06.2017
09:23:17
сейчас json, но вообще ничего не мешает перейти на бинарные (кроме питона)

т.к. сейчас store везде вместо сериализации и его в питоне надо правильно переизобретать

а про nanomsg, в основном вопрос шило на мыло замена это или нормальная по сравнению с zeromq

Max
13.06.2017
09:24:55
А стор - это шмат памяти?

Alexander
13.06.2017
09:28:55
не настолько все плохо, применение Storable и что-то типа формата там есть

но без спецификации

Sergey
13.06.2017
12:02:25
Читал историю nanomsg - похоже какие-то человеческие факторы - проблемы заставили его форкнуть zmq, ему не нравилась демократия в разработке, в итоге пилил всё в одну каску, правок от других не принимал, и в итоге выдохся, по истории комитов видно что происходило.

Есть пост на тему http://sealedabstract.com/rants/nanomsg-postmortem-and-other-stories/

Alexander
13.06.2017
12:09:49
ну он любит "заканчивать" проекты

типа все - готово

Sergey
13.06.2017
12:12:47
В том то и дело, код накодил из любви к прекрасному, а про комьюнити - не интересно

В zmqguide Хейнджекс рассказывает что это отдельное дело, и специальный подход, и намеренный труд выполнен чтобы всё так организовать в истории zmq

Страница 297 из 1551