Андрей
сложность в реализации рефов, например
Андрей
типа как написать допустим лисп на хацкеле, в котором будут рефы, но при реализации не использовать рефы самого хаскеля
Андрей
тебе придётся делать какой-то слой похожий на память
Андрей
которой, видимо, придётся самому чистить, то есть свой гц писать
Андрей
рефы, мвары, вары, любая изменяемая фигня приводит в моей голове к этому
Андрей
если писать язык, который только на чистых функция и ничего нигде не меняется, то проблем не вижу
Андрей
но так даже в хаскеле не получается )
A64m
а зачем рефы самого хаскеля не использовать?
Андрей
действительно
Андрей
ну например затем, что не хочу
Ilya
A64m
Ilya
Да, наверное
Андрей
а зачем рефы самого хаскеля не использовать?
во всех книжках про LC и реализации языка всё сводится к тому, что относительно богатый язык можно реализовав рекурсивные функции, а всё остальное строится на их основе, ну и из этого выходит красота и какая-то универсальность LC абстракций
Андрей
типа этот язык можно в любой рантайм малой кровью встроить
Андрей
вот я и не рассматриваю рефы рантайма
A64m
ну вот "относительно богатый язык" можно будет, но для инплейс мутабельности надо будет инплейс мутабельность импользовать
Andrey
писал лиспы на хаскеле, на джаве, на 1С, на питоне и на баяне ) везде использвал гц хоста ) знакомый писал на сишке - использовал ее гц (конечно писал свой)
Andrey
но тут вопрос что считать гц. вот есть у меня связанный символ a, с ним связано значение списка в 100500 элементов (развернутого в памяти). и пока живет это окружение и это имя живет в нем - эти 100500 живут в куче. если окружение не живет (вышли из лямбды) или я перебиндил a на 0 - 100500 элементов почистил гц хоста. можно самому писать свой слой гц для разбиндивания своих же имен конечно
Anonymous
@alexknvl будет жить. Поприветствуем!
Anonymous
@Nivroc будет жить. Поприветствуем!
Igor
Тогда и сможешь реализовать свой гц
Ilya
Ilya
Для С++ понятно зачем, он без ГЦ
Cheese
Cheese
ГЦ — это «Гарбаге Цоллецтор»?
Anonymous
Мусорка
Dmitry
Андрей
хочется же идеального мира
Андрей
типа в котором я могу написать парсер, определить пару функций нормализации термов и всё готово )
Андрей
а ГЦ сам собой появился)
Андрей
Sborshik Musora то есть
Big Bux Chungus
так, а почему нельзя использовать сборщик мусора самого хаскеля?
Big Bux Chungus
data Data = Nil | Cons Data Data | Atom String
Андрей
ну вот что-то мне подсказывало, что его получится использовать только в простейших случаях
Big Bux Chungus
ну неправильно подсказывает
Big Bux Chungus
значит :)
Big Bux Chungus
для лиспа хватит
Андрей
ну читай выше, как ты рефы и мвары сделаешь без своей управляемой памяти
Андрей
не используя рефы и мвары хаскеля
Big Bux Chungus
а почему не используя?
Андрей
😃 было уже
Big Bux Chungus
ну ок, легко
Big Bux Chungus
State (Map Int Data)
Big Bux Chungus
рефы представляем интами
Alexander
при всем уважении к рефам и mvarам хаскеля, в большинстве языков бывают циклические ссылки
Alexander
проблема отчасти решается слабыми ссылками и прочими радостями, но память в той же джаве течет до сих пор
Alexander
не так энергично как в C++ конечно, но все же
Big Bux Chungus
и в хаскеле бывают циклические ссылки
Big Bux Chungus
a = 1 : a
Андрей
как чистить этот стейт будешь после часа работы проги?
Big Bux Chungus
а нельзя data Data = Nil | Cons Data Data | Atom String | Ref (IORef Data) ?
Андрей
нет)
Big Bux Chungus
а зачем тебе IORefы в твоём языке?
Андрей
ну какое-то подобие переменных впилить
Alexander
локальные переменные можно на StateT, глобальные не нужны
Alexander
как то так
Alexander
Впрочем, без монад глобальные таки нужны :(
Big Bux Chungus
State есть, если функции в языке есть
Андрей
любой State в интерпретаторе, который меняется при работе = память
Big Bux Chungus
т.е. почти всегда
Big Bux Chungus
не, юзай State внутри языка
Big Bux Chungus
а не в интерпретаторе
Андрей
типа если ты туда что-то добавил, то оно там так и будет валяться, если сам не почистишь
Андрей
гц за тебя это не сделает
Alexander
проблема в том что в глобальном State внезапно не будет работать gc
Alexander
с другой стороны, чистить глобальный стейт затея так себе, так что наверно пофигу
Big Bux Chungus
статические переменные тоже не собираются обычно
Alexander
в руби хорошо реализованно, там локальный стейт это объект первого класса
Андрей
😀 началось
Big Bux Chungus
@azzaazaa если в языке есть функции, есть StateT, если есть StateT, то есть переменные
Big Bux Chungus
и не нужен экстра GC
Андрей
внутри твоего трансформера что?
Big Bux Chungus
хочу переменную типа X, пишу код в State X
Андрей
ок, пробграмма твоя перестала эту переменную использовать, что произошло?