
The mirror
26.09.2018
07:40:29
Ну, если там сугубо Haskell, то сложнее, конечно. Нас спасало то, что PureScript - это, на самом деле, JavaScript, только в обертке. Чтобы персистить сам текст программы и потом запускать его на node.js использовался простой, но все же трюк из мира JS
Да, мне вот интересно насколько это применимо к другим рантаймам (более конкретно, JVM)

Alexander
26.09.2018
07:40:44
класть структурированные данные в namespace странно
вообще namespace и environment по функциональности пересекаются там

Google

Alexander
26.09.2018
07:41:20

Pineapple
26.09.2018
07:41:34
Там очень просты данные. Типа какая подсистема

Alexander
26.09.2018
07:41:38
в общем-то это tagged dsl
в namespace - да подсистемы
ещё мне нужно теги, типа user, workbook, session, transactionid

Александр
26.09.2018
07:42:29
Да, мне вот интересно насколько это применимо к другим рантаймам (более конкретно, JVM)
Для Clojure, думаю, проблем не будет, она динамическая. Для других языков можно, в принципе, хранить текст на исходном языке, а потом, наверное, его компилировать перед запуском. Или даже хранить байт-код

Alexander
26.09.2018
07:42:31
чтобы можно было искать по логам в разных программах и разные срезы

Anton
26.09.2018
07:42:55
Для llvm бекендов нет проблем с байткодом
Хаскелль через ghc api тоже можно в байткод прогнать

Alexander
26.09.2018
07:43:24
> lua
/me triggered
нужен простой (для случайного программиста) встраиваемый, интерпретируемый язык, с возможностью динамического обновления

Anton
26.09.2018
07:43:31
Меня всегда останавливало, что непонятно какие вообще там оптимизации остаются

Alexander
26.09.2018
07:43:36
для записи не очень больших скриптов
есть что получше?

Google

Anton
26.09.2018
07:43:51
есть ещё angel script, он поприятнее

Alexander
26.09.2018
07:43:59
для людей которые знают питон и си

Anton
26.09.2018
07:44:08
есть наноси

Alexander
26.09.2018
07:44:27

Anton
26.09.2018
07:44:33
с песочницей, чтобы сегфолты не делали

Александр
26.09.2018
07:45:05

Anton
26.09.2018
07:45:31
мапа static pointer на функции, как я понял

Alexander
26.09.2018
07:46:01
да просто мапа функций
идеально чтобы язык поддерживал call with CC

Anton
26.09.2018
07:46:28
это накладывает ограничение, что на всём кластере должен быть один бинарь?

Alexander
26.09.2018
07:46:40
т.е. чтобы я мог вызвать внешний код и он бы вернул продолжение
на самом деле нет
старое решение без static pointer - не накладывает

Anton
26.09.2018
07:47:15
там строки были?

Alexander
26.09.2018
07:47:15
но безопаснее с одним
да
сейчас там кстати выбор можно строка, можно поинтер

Anton
26.09.2018
07:48:08
Мне это сильно напоминает soap или просто сервант уже

Alexander
26.09.2018
07:48:32
ну когда это делали выбора не было

Google

Alexander
26.09.2018
07:48:45
но смысл в том, что так можно хранить и сериализовать вещи
в любом языке
free monad тоже можно заделать, но в других языках как-то tagless подход выглядит проще
а для сериализации переводить tagless в tagged
@VividDesires с другой стороны я не думаю, что я когда-нибудь вернусь к тому проекту
:/

Anton
26.09.2018
07:52:09
А ведь хаскелл идеально подходит для скриптования, так как есть проверка на чистоту
Но адекватных средств интеграции так и нет

Alexander
26.09.2018
07:52:50
меня искренне бесит какй интерфейс там заделали
там интерфейс для стейтмашинок, и их внутренность и переходы торчат наружу

Anton
26.09.2018
07:53:57
А как по-другому? Компилить скрипт в стейтмашинки?

Alexander
26.09.2018
07:54:31
да

Anton
26.09.2018
07:56:51
увы, пока даже не представляю как такой скрипт бы выглядел

Alexander
26.09.2018
07:57:12
как обычная программа на Haskell

Александр
26.09.2018
07:57:26
Я делал доклад на fprog spb. Там был язык для стейт-машин в виде скриптов
(По факту)

Alexander
26.09.2018
07:57:41
там было так же плохо как у нас
(или хуже)

Anton
26.09.2018
07:57:45
Есть ссылочка?

Alexander
26.09.2018
07:57:50
(или лучше)

Google

Alexander
26.09.2018
07:57:54
но не принципиально
я после этого думал сделать доклад про то, как у нас сделано

Александр
26.09.2018
07:58:33
Сделай
Есть ссылочка?
Есть: https://www.youtube.com/watch?v=DhG00dyAN9g
Код здесь: https://github.com/graninas/transition-graph/blob/d29535f72eda7f1e54c6083fe809ce2ab814b72c/test/TransitionGraphSpec.hs#L28
Но конкретно у этой штуки очень узкая специализация.
Если бы я хотел составлять eDSL для стейт-машины, я бы по-другому сделал.

Alexander
26.09.2018
08:06:44
наш DSL сейчас IP другой фирмы, к сожалению

Anton
26.09.2018
08:08:51
Минусы аутсорса :c

A64m
26.09.2018
08:37:14
слайд из презентации СПЖ по состоянию гхц
—————————————
GHC 8.8
линейные типы
изменения в ллвм бекенде
мутабельные объекты
—————————————
ну да, нуда

Admin
ERROR: S client not available

A64m
26.09.2018
08:38:27
видимо хотят какую-то еще фичу раскрутить чтоб ждали следующие пять лет в каждой версии "потому что сказали же, что будет", а то рекорды после того как пять раз обманули уже не ждут
> 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?"
про то, как типы не натягиваются на кровь адама и ноосферу

Iva
26.09.2018
09:04:45
Вещи о которых девы разговаривают, в прочем то понятны и концептуально нового вклада в науку теоретическую не несут. При всём, это не отменяет их полезности
Есть: https://www.youtube.com/watch?v=DhG00dyAN9g
Код здесь: https://github.com/graninas/transition-graph/blob/d29535f72eda7f1e54c6083fe809ce2ab814b72c/test/TransitionGraphSpec.hs#L28
Но конкретно у этой штуки очень узкая специализация.
Вот был бы ты раньшн

Александр
26.09.2018
09:10:28
Я был раньше :(

alexknvl
26.09.2018
10:02:34
Я был раньше :(
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

kana
26.09.2018
10:05:55
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
вот такой еще можно

alexknvl
26.09.2018
10:06:55
а зачем unsafeCoerce?

Pineapple
26.09.2018
10:07:50
Тут нельзя unsafeCoerce

Google

kana
26.09.2018
10:07:55
там по моему была пурса

alexknvl
26.09.2018
10:08:07
а в пурсе зачем?

kana
26.09.2018
10:08:09
в пурсе не описать data Exist выше
только unsafe

alexknvl
26.09.2018
10:08:23
там нет GADTs?

kana
26.09.2018
10:09:06
нет

alexknvl
26.09.2018
10:11:00
TIL
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
так работает

Александр
26.09.2018
11:02:42
А так, это копи-паст из PureScript

Terminator
26.09.2018
11:56:30
@emilmirza будет жить. Поприветствуем!

Emil
26.09.2018
12:01:26

Anton
26.09.2018
12:02:18

Andrew
26.09.2018
12:02:20
Хай!

kana
26.09.2018
12:10:55
Ты как-то смержил тип на хаскеле и функции с пурсы

Александр
26.09.2018
12:16:28
Не копипаста
https://github.com/graninas/transition-graph/blob/d1d5126bfc475e8e2b795f12140258ff726e1f00/src/Data/Exists.hs
https://github.com/purescript/purescript-exists/blob/master/src/Data/Exists.purs
Найди десять отличий.

kana
26.09.2018
12:17:31
Тип с хаскеля

Pineapple
26.09.2018
12:17:58
Но ведь unsafeCoerce там небезопасен

Александр
26.09.2018
12:18:51
Обсуждайте, если хотите, но я на этом остановлюсь