Anonymous
Programming in Martin-Lof Type Theory
Dmitrii
Morten Heine B. Sørensen and Pawel Urzyczyn «Lectures on the Curry-Howard Isomorphism»
Alexander
спасибо
Vasiliy
ёптель, несколько часов ломал голову об четырёхстраничную ошибку серванта, который не мог какие-то там типы свести
Vasiliy
оказалось, я смотрю в документацию 0.8.1, а у меня 0.11
Vasiliy
с сообщениями об ошибках серванту явно надо что-то делать
Vasiliy
точнее, не серванту, а ghc
Alexander
нужно чтобы он писал что возможно вы используете не ту версию?
Vasiliy
ошибка была в том, что раньше Handler был алиасом для ExceptT, а теперь он newtype над ExceptT
Vasiliy
но понять это было совершенно невозможно, а не та версия документации плюс старые туториалы только усугубили ситуацию :(
Vasiliy
было бы здорово видеть что-то типа couldn't match type Handler with ExceptT ... , но там было что-то очень жуткое
Alex
спасибо
Alex
мир функционалу
Dmitrii
Так вроде же только вчера вышла библиотека, которая помимо прочих плюшек заодно и немного улучшает сообщения об ошибках серванта https://www.reddit.com/r/haskell/comments/6lvf2k/so_long_and_thanks_for_all_the/
Алдар
https://github.com/haskell-wasm/wasm
Дима
Всё равно скорее всего будет жирновато
Дима
Есть же purescript
Aleksei (astynax)
PureScript и GHC2WAsm, это две большие разницы. PureScript, это hosted язык, не имеющий своего ничего - ни GC, ни вообще рантайма. Haskell всё это имеет, а значит сможет запускаться на wasm, где языку нужно уметь и с памятью работать и с асинхронностью и проч (поэтому, кстати, жирновато будет у всех, кто будет запускаться на wasm - рантайм нужно с собой тащить, т.к. это уже не "compile to JS")
Vasiliy
purescript компилится в js, у которого есть и gc, и рантайм, а у wasm ничего этого нет
Vasiliy
интересный проект, но, мне кажется, преимуществ перед ghcjs у него нет
Aleksei (astynax)
GHCJS компилится в JS, получаем один рантайм поверх другого с инородным GC и прочими прелестями. На wasm Haskell сможет работать со своим родным рантаймом - родным GC тем же. Тут как раз важно, что Haskell умеет всё сам, в отличие от Purs, и поэтому может получать профит от wasm - пропадает ненужная прослойка в виде JS VM
Anonymous
Имхо есть - собстно как минимум отсутствием компиляции в js
Aleksei (astynax)
Имею опыт применения GHCJS "в продакшне". Результат лучше конечным пользователям не показывать - одна только скорость раскочегаривания рантайма сделает кого угодно грустным
Aleksei (astynax)
Для b2b ещё сойдет - кому надо, те потерпят. Но не более
Aleksei (astynax)
Пользы от wasm нынче мало потому, что браузерное API ещё толком не завезли туда и писать по сути можно только ускорятки числодробления, которые вызываться будут из "старого доброго" JS
Aleksei (astynax)
Вот когда API для доступа к DOM и прочим WebGL будет доступен из wasm напрямую - заживём.
melvin
в хаскелле есть библиотека/фреймоври или еще что-нибудь в таком духе в названии которого присутствует "hero"?
andrei
лол
melvin
лол
шшшшшшшшшшшшш
andrei
melvin
.-.
melvin
ложная тревога
melvin
улетаю
melvin
вжук
Влод
Хаскелю не хватает героя
Aleksei (astynax)
Лямбдамэн (Wadler) же! :)
Alexander
Artem
purescript компилится в js, у которого есть и gc, и рантайм, а у wasm ничего этого нет
Для wasm сейчас идёт речь о том, чтобы gc делать (предлагали участвовать)
Aleksei (astynax)
Единый GC для всех - плохая идея.
Bohdan
Единый GC для всех - плохая идея.
Если отключаемый — наоборот
Aleksei (astynax)
Функциональным языкам с персистентными иммутабельными структурами данных нужен GC, хорошо работающий с объектами малого размера и малого времени жизни. Для ООП-языков наоборот - с толстыми долгоживущими объектами
Aleksei (astynax)
Языкам с линейными типами вообще не нужен GC
Aleksei (astynax)
Так что "one GC to collect them all", это утопия и плохая идея
Дима
Gc будет ближе к gc для функциональных языков
Дима
Очевидно, что java в вебе как-то не зашла и ещё раз пытаться наступить на те же грабли смысла нет))
Artem
Я не специалист по gc, но слушал нескольких хороших специалистов (типа William D Clinger). Моё впечатление таково, что это вполне реалистичная идея, так как на практике между языками алгоритмы сборки одни и те же используются
Дима
### Approach * Only basic but general structure: tuples (structs) and arrays. * No heavyweight object model. * Accept minimal amount of dynamic overhead (checked casts) as price for simplicity/universality. * Independent from linear memory. * Pay as you go; in particular, no effect on code not using GC. * Don't introduce dependencies on GC for other features (e.g., using resources through tables). * Avoid generics or other complex type structure _if possible_. * Extend the design iteratively, ship a minimal set of functionality fast.
Aleksei (astynax)
Artem
Ну так настройки, наверное, можно свои для каждого процесса задавать
Дима
Общий подход к внедрению фич в вебе — сначала сделать минимально возможную, максимально опциональную реализацию концепции, чтобы иметь в дальнейшем возможности для манёвров
Aleksei (astynax)
"Настройки" определяют реализацию
Aleksei (astynax)
Ну нету идеального, подходящего всем GC. Не придумали ещё. Вон в JVM их вообще несколько.
Aleksei (astynax)
Опять же, взять Erlang - там несколько одновременно работающих GC из-за локальности данных и это отлично работает, например, Stop the World не бывает - мирков много, все одновременно никогда не останавливаются
Дима
Ну нету идеального, подходящего всем GC. Не придумали ещё. Вон в JVM их вообще несколько.
Вот механизм, благодаря которому в jvm можно использовать различные gc, сейчас и проектируют
Дима
У нас вообще несовершенный мир
Дима
Я просто говорю, что не нужно зацикливаться на узкой трактовке понятия
Дима
Параллельно рассказывая примеры того, что разные gc в рамках одной платформы собственно не то чтобы что-то странное
Aleksei (astynax)
Я могу понять пользу от "GC as a Library" для произвольных LLVM backends - можно быстро накидать рантайм и как-то жить
Aleksei (astynax)
Но языки, уже имеющие свой GC, работающий хорошо для них, не должны пересаживаться на данный свыше
Дима
Хорошо, они могут не пересаживаться
Aleksei (astynax)
Если смогут иметь свой и быть "non managed" с точки зрения wasm, то это будет нормальный вариант.
Aleksei (astynax)
Искоробочный же GC поможет переехать языкам/экосистемам типа Elm/PureScript/ClojureScript
Alexander
ну вообще принципы то тоже весьма отличаются из-за особенностей языка т.к. можно делать много доп предположений
Alexander
типа однонаправленности ссылок для иммутабельных обьектов
Alexander
и сразу переход у О(н) от большего
Alexander
и наличия refenential transparency, которая позволяет при Гц дублировать объекты
Alexander
ну и куча другого incremental/ non incremental,
Alexander
stop the world или нет
Alexander
и для каждого из этого куча общих алгоритмов, у которых разные свойства
Alexander
и серебряной пули и близко нет
Max
Что приводит к мысли, что GC - скорее вред, чем польза.
Дима
Не понимаю, с чего вы вообще взяли, что вам предлагается серебрянная пуля)
Дима
Pay as you go; in particular, no effect on code not using GC
Дима
Это не серебро, это лопата и кирка. Минимальная имплементация означает что все гипотезы выше предстоит реализовывать самостоятельно
Дима
Не суперсет всех gc проектируют, а сабсет
Max
Лопатой и киркой оборотня не завалить, если что :)
Дима
Просто никто никуда не спешит) Пока что это даже не фундамент, а только его чертежи
Дима
Кому интересно, можете ознакомиться тут https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md
Vladislav
Всем привет!