Vasiliy
у меня, к счастью, всё довольно просто
Vasiliy
а если и упадёт - не жалко
Alexander
у нас был интересный случай мы в cloud-haskell в одной функции раза 4 concurrency баги ловили
Alexander
2 человека которые в этом деле разбираются и построчно проверяли пытаясь прогонять всякие ситуации
Vasiliy
:D
Alexander
в итоге потом использовали специальный quickcheck-like шедулер
Alexander
в итоге все работает
Alexander
шудулер только для CH не обобщенный
Alexander
для обобщенного нужно dejavu брать
Евгений
Вы меня разочаровали, в общем, уйду в идрис. Модно, молодёжно
Alexander
я думаю в идрисе тоже что-то такое есть, но через зад
Alexander
=)
Alexander
как и половина вещей там
Alexander
он конечно клёвый, но блин..
Vasiliy
я вот, кстати, вообще не в курсе, как там конкурентность рантаймом разруливается
Vasiliy
там треды идриса 1-к-1 к тредам ОС?
Vasiliy
я про сишный бэкенд, само собой
Alexander
не в курсе если честно
Alexander
я не дошёл до concurrency тами
Vasiliy
я книгу уже 3 месяца читаю, да всё никак ниасилю
Vasiliy
знание сабжа с одной стороны помогает, а с другой мешает - сейчас вот про State читаю, сил нет уже
Евгений
Ну просто я очень понимаю, правда, если наши исходные концепции не выдерживают критики потребностями, то нужно так и признаться: сорян, чуваки, идея строить язык вокруг чистой лямбды зафейлилась, расходимся. Дальше у нас будет просто нагромождение костылей, которые позволят жить тем, кто успел пихнуть это в продакшон
Alexander
я не очень понимаю аргумента..
Dmitry
Почему зафейлилось-то? Развитие-то продолжается
Anonymous
лол
Anonymous
Если бы я делал язык программирования с нуля, каким бы он был? Пофантазирую вслух.
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. Все доступные инструменты сборки чудовищно гибкие. Модель требует переосмысления, и начинать его надо со сбора требований, при этом важно избежать ловушки, когда нам кажется, что требования и так выявлены (что там непонятного, это же очевидный сборщик).
Мне кажется, уже на этом можно не одну голову сломать, но труд этот будет вознагражден.
Andrey
Хорошо, что я в телеграме только в трех чатах. В двух уже это копипастили :)
Vladislav
Если бы я делал язык программирования с нуля, каким бы он был? Пофантазирую вслух.
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. Все доступные инструменты сборки чудовищно гибкие. Модель требует переосмысления, и начинать его надо со сбора требований, при этом важно избежать ловушки, когда нам кажется, что требования и так выявлены (что там непонятного, это же очевидный сборщик).
Мне кажется, уже на этом можно не одну голову сломать, но труд этот будет вознагражден.
очень толсто
Евгений
Почему зафейлилось-то? Развитие-то продолжается
Я не хочу срачи устраивать. Просто я глубоко сомневаюсь, что можно эти ваши асинхронные исключения подогнать под чистую лямбду. В статье выше в качестве семантики используют трансляцию в pi-calculus. Белый гуглинг не дал мне ни трансляции, сохраняющей операционной семантику, пи-исчисления в лямбду, ни лямбда-обоснования для асинхронных исключений.
Dmitry
Я имел ввиду, что под выражением "идея зафейлилась" подразумевается какой-то окончательный вывод. Теорема "нельзя сделать асинхронные исключения на хаскеле". Ну это ж не так, может, в будущем чего-то придумают
Alexander
я вижу описание операционной семантики, от pi-calculus там только возможность отправки сообщения
Oleg
Я не хочу срачи устраивать. Просто я глубоко сомневаюсь, что можно эти ваши асинхронные исключения подогнать под чистую лямбду. В статье выше в качестве семантики используют трансляцию в pi-calculus. Белый гуглинг не дал мне ни трансляции, сохраняющей операционной семантику, пи-исчисления в лямбду, ни лямбда-обоснования для асинхронных исключений.
Я очень плохо в курсе, но вообще не припомню, чтобы в подходах с грязными лямбдами межпотоковый обмен эксепшнами как-то лучше решался. Во всяких ерлангоакковских актор моделях проблема по сути игнорируется.
Но если посмотреть мотивацию в той статье - то само желание потока убить своё дитя рождается, как правило, от осознания, что он ему больше не нужен. А нежелание умирать, как сказал Александр, от осознания, что есть неосвобождённые ресурсы.
Поэтому чисто из интуиции из соседнего чата проблема как-то должна решаться линейными типами или типа того, которые вполне вяжутся с чистыми лямбдами.
Т.е. если широко посмотреть - ручное управление асинхронностью так же плохо вяжется с чистотой, как и ручное управление памятью.
Alexander
@mkrentovskiy а как тебе nanomsg по сравнению с zeromq?
Alexander
вопрос ко всем присутсвующим
Max
А вот его я не трогал. Но у них один и тот же автор.
Max
Льва Валкина можно поспрошать, он вроде высказывался.
Alexander
да, я знаю там автор любит между пакетами переходить
Max
Помнится еще был гневный блогпост, где у кого-то забили принимать патчи в апстрим nanomsg, и он обиделся.
Alexander
он поидее проще, без ада с роутингом, си (без плюсовых исключений), и более вменяемые типы сокетов есть (мне не важно)
Max
Ну вот да, это немного подкупает.
Max
С другой стороны, я сейчас скажу чернь - а чобы ни HTTP?
Alexander
вообще http2 вполне себе вариант
Alexander
мне не очень нравится, что в целом протокол сложный
Alexander
т.е. у меня очень тупой паттерн
Max
У тебя бинарные потоки?
Alexander
но с другой стороны там решены проблемы
Alexander
нет
Alexander
в данный момент
Max
Ну тогда можно и не 2.
Alexander
сейчас json, но вообще ничего не мешает перейти на бинарные (кроме питона)
Alexander
т.к. сейчас store везде вместо сериализации и его в питоне надо правильно переизобретать
Alexander
а про nanomsg, в основном вопрос шило на мыло замена это или нормальная по сравнению с zeromq
Max
А стор - это шмат памяти?
Alexander
не настолько все плохо, применение Storable и что-то типа формата там есть
Alexander
но без спецификации
Сергей
Читал историю nanomsg - похоже какие-то человеческие факторы - проблемы заставили его форкнуть zmq, ему не нравилась демократия в разработке, в итоге пилил всё в одну каску, правок от других не принимал, и в итоге выдохся, по истории комитов видно что происходило.
Сергей
Есть пост на тему http://sealedabstract.com/rants/nanomsg-postmortem-and-other-stories/
Alexander
ну он любит "заканчивать" проекты
Alexander
типа все - готово
Сергей
В том то и дело, код накодил из любви к прекрасному, а про комьюнити - не интересно
Сергей
В zmqguide Хейнджекс рассказывает что это отдельное дело, и специальный подход, и намеренный труд выполнен чтобы всё так организовать в истории zmq
Alexander
при это zmq ломается на каждом шаге
Alexander
а ещё на самом деле надо его с czmq использовать
Alexander
а иначе задолбаешься все протоколы реализовывать
Евгений
Я очень плохо в курсе, но вообще не припомню, чтобы в подходах с грязными лямбдами межпотоковый обмен эксепшнами как-то лучше решался. Во всяких ерлангоакковских актор моделях проблема по сути игнорируется.
Но если посмотреть мотивацию в той статье - то само желание потока убить своё дитя рождается, как правило, от осознания, что он ему больше не нужен. А нежелание умирать, как сказал Александр, от осознания, что есть неосвобождённые ресурсы.
Поэтому чисто из интуиции из соседнего чата проблема как-то должна решаться линейными типами или типа того, которые вполне вяжутся с чистыми лямбдами.
Т.е. если широко посмотреть - ручное управление асинхронностью так же плохо вяжется с чистотой, как и ручное управление памятью.
Вообще я тут поразмышлял: на самом деле можно попробовать реализовать асинхронные эксепшоны и маск/анмаск с помощью хитрой стратегии редукции.
Попробую подумать ещё и формализовать
Anonymous
https://github.com/lexi-lambda/hackett
вбрасывали уже?
Dmitry
andrei
Anonymous
Чем им Typed Racked не понравился?
Anonymous
Недостаточно наворочен?
Max
может не работает?
Anonymous
Ну вполне работал, когда я его пробовал.
Dmitrii
На Reddit автор объясняет, почему не typed-racket
https://www.reddit.com/r/haskell/comments/6dqf1n/realizing_hackett_a_metaprogrammable_haskell/di4n8cy/
Зигохистоморфный
https://elixirforum.com/t/a-freer-monad-implemented-in-elixir/399 :D
Anonymous
зачем нужны монады в энергичных динамических языках?
ㅤ
Alexander
для инкапсуляции эффектов
Vasiliy
затем же, зачем нужны, скажем, моноиды