Зигохистоморфный
ачтогдекак?
http://dev.stephendiehl.com/hask/#prelude
Зигохистоморфный
Avoid...
Зигохистоморфный
@A64m_qb0 что за 1ML? https://github.com/1caml/1caml
A64m
емнип 1ML это эмель в котором язык модулей не отдельный язык, а сахар для f-ing энкодинга
A64m
но я отвечаю по памяти, без фактчека, так что
Кабачок
Все верно https://people.mpi-sws.org/~rossberg/1ml/
Alexander
@A64m_qb0 > Recovering linearity requires augmenting ghc with the ability to reason about exceptions. I may try to hack out a proposal / prototype for that this December / winter with a few colleagues. угадаешь автора с 1 попытки?
A64m
я уже прочел этот комментарий, так что шанс угадать Картера Шонвальда упущен
Alexander
: (
Alexander
блин сколько же раз я уже видел этот его комментарий
A64m
удивительно, что в этот раз он начал не с того, что пообещал что-то там когда-нибудь сделать лучше, а что-то уже сделал до начала дискуссии. Но теперь все вернулось на круги своя, Картер Шонвальд опять в своем репертуаре
Alexander
он где-то год назад в твиттерах хвалился что линейные типы где-то запилил
melvin
в haskell'е есть эквивалент жабовского fork join framework?
melvin
:/
melvin
мне необходимо рекурсивно спавнить потоки
melvin
нашел это https://ghcmutterings.wordpress.com/2010/08/20/parallel-programming-in-haskell-with-explicit-futures/
Danila Matveev
fork join executor service это обвязка вокруг пула потоков, которая позволяет простаивающим потокам стилить таски у других хорошо работает для data intensive задач но не понятно как это связано с рекурсивным порождением потоков
melvin
действительно 🤔
Alexander
async
Alexander
а вообще вся RTS Haskell это пул потоков
Alexander
которые берут задачи и выполняют их
Alexander
задача это зелёный тред
Alexander
а потоки это capabilities/HEC
Alexander
runtime system
Leonid 🦇
kek https://github.com/berewt/acme-haskellee/blob/master/src/Acme/HaskellEE/MappableInTwoDifferentWays.hs
Danila Matveev
не считается, отсутствует Bean тайп класс
Alexander
а где почитать как реализован современные вычисления в rts haskell, как там работает стек, что происходит при GC, при вызове следующей операции и т.п.?
Kirill
Alexander ты ещё не прочитал исходники ртс?
Alexander
наскоками
Alexander
т.е. я понимаю отдельные куски но не ситуацию в целом
Kirill
Пейперы хочешь?
Alexander
я думаю этого нет в пейперах
Alexander
блоки зянгов и т.п.
Kirill
Если только про куски
Alexander
мне интересно можно ли для ресурса сделать какую-то адекватное место храниния информации связанной с ним, так, чтобы сам ресурс был ключем
Alexander
желательно zero-cost
Alexander
вот как в растах хранение ресурсов сделано, что в non-exceptional case оно почти бесплатно
Alexander
у меня есть подозрение, что с haskell стеком, rts и GC в произвольном случае это принципиально невозможно
Leonid 🦇
Ну каждый объект имеет ссылку на свой тайпинфо, для Гц.
A64m
так это можно у марлоу спросить, прямо в линейном обсуждении
Alexander
@lonokhov но это никак не поможет?
Alexander
тем более. что объект не на gc хипе жить может
Alexander
@A64m_qb0 у меня и так дурацкое ощущение я прихожу в тред пишу и все замолкают
Alexander
как будто сидит такое сообщество джентельменов чай пьёт, а тут варвар в зал вбьегает и орёт что-то
Leonid 🦇
В хаскеле на стеке ничего не живёт поди, кроме запушенных регистров
Alexander
в итоге варвар в недоумении смотрит на это дело, и все замолкли и смотря на него
Alexander
не понимая, что это за хрень ввалилась
Alexander
я очень не хочу туда лишний раз писать
Alexander
@lonokhov ты про сишный стек? или про стек потоков?
Alexander
т.е. у нас какой calling convention, мы передаем агрументы и куда прыгать дальше
Leonid 🦇
А что у потоков другой стек?
Alexander
выполнятор смотрит, делает все и вызывает продолжение
Alexander
т.е. это такой вечно растущий стек
Alexander
который потом собирается gc когда-то
Leonid 🦇
Мы ещё сетапим указатель на стек
Alexander
насколько я понимаю
Alexander
и для каждого потока он свой
Leonid 🦇
Гц собирает стек вместе с нитью
Alexander
тогда бы это вообще никогда не работало
Alexander
т.е. в отличии от сишки после функции мы не возвращаемся в предыдущий фрейм, а уходим в следующий
Alexander
а для треканья сишного есть свой регистр и он используется для FFI
Leonid 🦇
Данунахрен
Leonid 🦇
А зачем хаскелю стек?
Alexander
я не понимаю твой вопрос
Alexander
-- STG registers | Sp -- Stack ptr; points to last occupied stack location.
Alexander
вот когда ты выполняешь фукнцию то обычно там идёт Sp=Sp+ptrsize; Sp[..] = blabla
Alexander
после выполнения jump(Sp[-x])
Alexander
а jump в unregistered архитектурах
kosc
Может он про stack?
kosc
Типо зачем stack, когда есть cabal?
kosc
Хотя я ворвался с середины с скорее всего неправ.
kosc
Но мне это никогда не мешало 😆
A64m
а описание нынешней ртс в пейпере есть только на тот момент когда ее написали для GHC 4 в 98-ом году, и дальше надо смотреть кучу пейперов в которых описывали зменения, когда теги добавили, на эвал-апплай поменяли, добавили SMP, причем непонятно что из описанного на самом деле имплементировано и как, т.е. некоторые изменения из зарезанного гц с отдельными нулевыми на каждый поток например стеки сегментированные попали в GHC а остальное нет
Alexander
вот да
Alexander
меня больше всего это в статьях бесит
A64m
ну есть еще ghc вики, но все равно очень сложно даже поверхностное представление составить где там что и как
Alexander
возьмешь старую а из неё в продакшн мало что попадёт
Alexander
и потом перепилят 3 раза