@haskellru

Страница 1432 из 1551
A
02.09.2018
08:08:23
нет)

Alexander
02.09.2018
08:08:35
и в хаскеле бывают циклические ссылки
ммм, я имел ввиду циклы большей длины. Например a = 1:b; b = 2:a

alexknvl
02.09.2018
08:08:44
а зачем тебе IORefы в твоём языке?

A
02.09.2018
08:09:22
ну какое-то подобие переменных впилить

Google
Alexander
02.09.2018
08:10:20
локальные переменные можно на StateT, глобальные не нужны

как то так

Впрочем, без монад глобальные таки нужны :(

alexknvl
02.09.2018
08:11:38
State есть, если функции в языке есть

A
02.09.2018
08:11:45
любой State в интерпретаторе, который меняется при работе = память

alexknvl
02.09.2018
08:11:45
т.е. почти всегда

не, юзай State внутри языка

а не в интерпретаторе

A
02.09.2018
08:12:19
типа если ты туда что-то добавил, то оно там так и будет валяться, если сам не почистишь

гц за тебя это не сделает

Alexander
02.09.2018
08:12:29
проблема в том что в глобальном State внезапно не будет работать gc

с другой стороны, чистить глобальный стейт затея так себе, так что наверно пофигу

alexknvl
02.09.2018
08:12:54
статические переменные тоже не собираются обычно

Google
Alexander
02.09.2018
08:13:07
в руби хорошо реализованно, там локальный стейт это объект первого класса

A
02.09.2018
08:13:40
? началось

alexknvl
02.09.2018
08:13:53
@azzaazaa если в языке есть функции, есть StateT, если есть StateT, то есть переменные

и не нужен экстра GC

A
02.09.2018
08:14:27
внутри твоего трансформера что?

alexknvl
02.09.2018
08:15:29
хочу переменную типа X, пишу код в State X

A
02.09.2018
08:16:05
ок, пробграмма твоя перестала эту переменную использовать, что произошло?

Alexander
02.09.2018
08:17:00
Давайте для начала начнем с того, какого рода язык мы имеем?

если там есть переменные, то наверно он отличается от хаскеля, а если отличается то наверно сильнее чем наличием переменных

возможно там даже грязные функции есть

alexknvl
02.09.2018
08:18:46
как я понимаю, он хочет лямбда исчисление, но зачем-то с переменными. я предлагаю использовать просто лямбда исчисление и реализовать переменные с помощью него

A
02.09.2018
08:19:10
эх, ладно, проехали

alexknvl
02.09.2018
08:19:14
переменные становятся просто абстракцией использующей s -> (s, a)

я вижу только три варианта: 1) юзать IORef и хаскельный GC, 2) юзать Map Int Data и писать свой GC, 3) не давать юзеру newIORef и заставлять использовать State внутри языка

можно ещё юзать IORef с reference counting и запретить создание циклических ссылок

ну и аналогично можно и без IORef тогда обойтись

Alexander
02.09.2018
08:33:10
использовать GC Haskell и делать ref counting /0

Terminator
02.09.2018
09:36:18
@nDanshin будет жить. Поприветствуем!

Oleg
02.09.2018
10:10:18
В обычной просто-типизированой лямбде циклические референсы не выразимы, конечно же

В раннем лиспе референс каунтеры внедрили именно потому что была доп-конструкция Cons

Google
Oleg
02.09.2018
10:12:22
Поэтому в общем случае потребность GC выражается доп. конструкциями

Добавляю свой голос в число тех, кто полагает, что если будут циклические, то ничего лучше хост-GC всё равно не сделаешь

Но даже если добавить в язык какой-то fix, можно всё равно сделать референс-каунтинг, учитывающий эти добавленные ссылки

Смысл это всё имеет только если потеря переменной из скоупа должна иметь какую-то семантику в строящемся языке

A
02.09.2018
10:16:51
так разговор не про циклы, а про грязь

Oleg
02.09.2018
10:17:04
A
02.09.2018
10:17:10
ref

var

Oleg
02.09.2018
10:17:22
А что с ними?

A
02.09.2018
10:17:31
блин, опять

как их реализовать не используя ref - ы самого хаскеля и при этом не менеджить самому эту память

Oleg
02.09.2018
10:18:50
Ну предложили же массив

A
02.09.2018
10:19:07
это и есть память

своя

которую gc хаскеля заберёт только когда весь массив не нужен будет

Oleg
02.09.2018
10:20:03
Да. И, все и я указали, что в зависимости от языка, тебе нужен или не нужен гарбедж коллектор той или иной формы

Слово var само по себе ни о чём не говорит

Какова семантика?

alexknvl
02.09.2018
10:20:33
если вары только локальные, то ГЦ не нужен

A
02.09.2018
10:21:16
функции, логические значения, вары

Google
A
02.09.2018
10:21:38
вары типизируемые

Oleg
02.09.2018
10:21:41
ты опять сказал "вары'

alexknvl
02.09.2018
10:21:43
пример напиши в своём языке

Oleg
02.09.2018
10:21:55
Могут ли вары ссылаться друг на друга

Есть ли в языке индукиивные типы и какой формы

Есть ли уникальность

Гарбейдж коллектор появляется не тогда, когда у тебя есть вары и ссылки. А когда они начинают промоутиться вверх из скоупа опрелеления

С помощью каких-то других определений

A
02.09.2018
10:24:49
а?

промоутить?

Oleg
02.09.2018
10:26:02
Например в чистом call-by-name любой вар или что там у тебя - это ссылка на выражение, она будеи вычисляться каждый раз при необходимости. И тогда не нужно ни программного хипа, ни GC

Поэтому нужно очень много деталей операционной семантики для рассуждений о контроле за памятью

A
02.09.2018
10:27:05
чувсвую сложность излишнюю в твоих речах )

то, что многое зависит от семантики - согласен

Oleg
02.09.2018
10:28:05
Мне, наоборот, кажется, что ты решил погрузиться в детали реализации, не имея хорошо сформулированного плана интерпретации

Звучит, будто решил сделать интерпретатор интуитивно, с наскока

А значит обсуждать тут нечего, делай как подсказывает сердце

A
02.09.2018
10:31:33
var f = (lambda x:Bool. var z = 0 (lambda y:Bool. if x then z = z + 1 else z - 1)) f(true) вот в той реализации, которую я в голове пока могу сложить, во второй строке, выражение var z = 0 мутирует какую-то память интепретатора, StateT, Map, etc - не суть

вот когда f пропадёт из области видимости, память, которую она по сути заалоцировала в этом стейте, должна быть почищена ручками

Google
Oleg
02.09.2018
10:33:22
А потом можно сказать, какой будет GC

A
02.09.2018
10:33:52
f возвращает функцию, которая инкрементирует счётчик z при true параметре и наоборот

Oleg
02.09.2018
10:34:27
Потому что я могу вообразить как минимум пару форм, где GC не нужен

Например, овнершип. Внутренняя лямбда объявляется овнером x, x исчезает вместе с ней. При иниерпретации внутренняя лямбда превращает свой предыдущий завоненный стейт в следующий

KrivdaAllStars
02.09.2018
10:36:18
Call-by-value всегда же будет в ситуации , когда gc не нужен

Ну и запрет на передачу ссылок

Yuriy
02.09.2018
10:39:24
зачем вы разбиваете предложения на реплики? тяжело читать же

Oleg
02.09.2018
10:40:04
предыдущий?
Да. В семантике, где у тебя есть функции с овненным скрытым стейтом, ты имеешь каждый раз в скоупе функцию и последний актуальный стейт для неё.

alexknvl
02.09.2018
10:44:08
f = \_ -> { var z = 1 (\_ -> { z += 1; z }, \_ -> { z -= 1; z }) } f = \_ -> { var z = \_ -> 1 (\_ -> { z 2 }, \f -> { z = f; () }) } (a, b) = f() b(a) если оба примера должны работать в этом гипотетическом языке, то без ГЦ не обойтись

если запретить var f : a -> b (и полиморфные varы, если есть полиморфизм), то можно обойтись reference counting

A
02.09.2018
10:49:01
а интерпретаторы с reference counting вообще существуют? )

alexknvl
02.09.2018
10:49:20
а почему нет

Страница 1432 из 1551