NC
с песочницей, чтобы сегфолты не делали
NC
мапа static pointer на функции, как я понял
Alexander
да просто мапа функций
Alexander
идеально чтобы язык поддерживал call with CC
NC
это накладывает ограничение, что на всём кластере должен быть один бинарь?
Alexander
т.е. чтобы я мог вызвать внешний код и он бы вернул продолжение
Alexander
на самом деле нет
Alexander
старое решение без static pointer - не накладывает
NC
там строки были?
Alexander
но безопаснее с одним
Alexander
да
Alexander
сейчас там кстати выбор можно строка, можно поинтер
NC
Мне это сильно напоминает soap или просто сервант уже
Alexander
ну когда это делали выбора не было
Alexander
но смысл в том, что так можно хранить и сериализовать вещи
Alexander
в любом языке
Alexander
free monad тоже можно заделать, но в других языках как-то tagless подход выглядит проще
Alexander
а для сериализации переводить tagless в tagged
Alexander
@VividDesires с другой стороны я не думаю, что я когда-нибудь вернусь к тому проекту
Alexander
:/
NC
А ведь хаскелл идеально подходит для скриптования, так как есть проверка на чистоту
NC
Но адекватных средств интеграции так и нет
Alexander
меня искренне бесит какй интерфейс там заделали
Alexander
там интерфейс для стейтмашинок, и их внутренность и переходы торчат наружу
NC
А как по-другому? Компилить скрипт в стейтмашинки?
Alexander
да
NC
увы, пока даже не представляю как такой скрипт бы выглядел
Alexander
как обычная программа на Haskell
Alexander
Я делал доклад на fprog spb. Там был язык для стейт-машин в виде скриптов
Alexander
(По факту)
Alexander
там было так же плохо как у нас
Alexander
(или хуже)
NC
Есть ссылочка?
Alexander
(или лучше)
Alexander
но не принципиально
Alexander
я после этого думал сделать доклад про то, как у нас сделано
Alexander
Сделай
Alexander
Есть ссылочка?
Есть: https://www.youtube.com/watch?v=DhG00dyAN9g Код здесь: https://github.com/graninas/transition-graph/blob/d29535f72eda7f1e54c6083fe809ce2ab814b72c/test/TransitionGraphSpec.hs#L28 Но конкретно у этой штуки очень узкая специализация.
Alexander
Если бы я хотел составлять eDSL для стейт-машины, я бы по-другому сделал.
Alexander
наш DSL сейчас IP другой фирмы, к сожалению
NC
Минусы аутсорса :c
A64m
слайд из презентации СПЖ по состоянию гхц ————————————— GHC 8.8 линейные типы изменения в ллвм бекенде мутабельные объекты ————————————— ну да, нуда
A64m
видимо хотят какую-то еще фичу раскрутить чтоб ждали следующие пять лет в каждой версии "потому что сказали же, что будет", а то рекорды после того как пять раз обманули уже не ждут
A64m
> A PhD candidate asked me yesterday, innocently "so when we have conferences, it is to present & talk about the work we are researching. I don't understand...what is it that they talk about at developer conferences?" про то, как типы не натягиваются на кровь адама и ноосферу
Апач
Вещи о которых девы разговаривают, в прочем то понятны и концептуально нового вклада в науку теоретическую не несут. При всём, это не отменяет их полезности
Апач
Есть: https://www.youtube.com/watch?v=DhG00dyAN9g Код здесь: https://github.com/graninas/transition-graph/blob/d29535f72eda7f1e54c6083fe809ce2ab814b72c/test/TransitionGraphSpec.hs#L28 Но конкретно у этой штуки очень узкая специализация.
Апач
Вот был бы ты раньшн
Alexander
Я был раньше :(
Big Bux Chungus
Я был раньше :(
33 минуты, Exists какой-то очень стрёмный. data Exists f where Exists :: f a -> Exists f mkExists :: forall f a. f a -> Exists f mkExists = Exists runExists :: forall f r. (forall a. f a -> r) -> (Exists f -> r) runExists f (Exists x) = f x
кана
foreign import data Exists :: (Type -> Type) -> Type mkExists :: forall f a. f a -> Exists f mkExists = unsafeCoerce runExists :: forall f r. (forall a. f a -> r) -> Exists f -> r runExists = unsafeCoerce вот такой еще можно
Big Bux Chungus
а зачем unsafeCoerce?
Алексей
Тут нельзя unsafeCoerce
кана
там по моему была пурса
Big Bux Chungus
а в пурсе зачем?
кана
в пурсе не описать data Exist выше
кана
только unsafe
Big Bux Chungus
там нет GADTs?
кана
нет
Big Bux Chungus
TIL
Big Bux Chungus
data Exists f = Exists (forall z. (forall r. f r -> z) -> z) mkExists :: forall f a. f a -> Exists f mkExists x = Exists (\f -> f x) runExists :: forall f r. (forall a. f a -> r) -> (Exists f -> r) runExists f (Exists x) = x f так работает
Alexander
А так, это копи-паст из PureScript
Anonymous
@emilmirza будет жить. Поприветствуем!
Emil
@emilmirza будет жить. Поприветствуем!
Я даже почти испугался. Привет всем
Andrew
Хай!
кана
Ты как-то смержил тип на хаскеле и функции с пурсы
Alexander
Не копипаста
https://github.com/graninas/transition-graph/blob/d1d5126bfc475e8e2b795f12140258ff726e1f00/src/Data/Exists.hs https://github.com/purescript/purescript-exists/blob/master/src/Data/Exists.purs Найди десять отличий.
кана
Тип с хаскеля
Алексей
Но ведь unsafeCoerce там небезопасен
Alexander
Обсуждайте, если хотите, но я на этом остановлюсь
Алексей
*Data.Exists Data.Typeable> case mkExists Proxy of Exists Proxy -> () Ошибка сегментирования
Alexander
Но ведь unsafeCoerce там небезопасен
не мешай людям сегфолты ловить