Size: a a a

2020 May 17

D

Dreamerinnoise in Haskell
Alexander Vershilov
Тут же явно проблема в том, что делается, и в этом надо разбираться
Ну в другом проекте либа отрабатывает
источник

in Haskell
Привет. Я правильно понимаю, что ghc компилирует в llvm ir или в си?
источник

in Haskell
И как в нём под капотом реализован расширяющийся стек?
источник

AV

Alexander Vershilov in Haskell
Обычный segmented stack в хипе живущий
источник

AV

Alexander Vershilov in Haskell
Сишный стек используется только для вызовов в си
источник

in Haskell
Alexander Vershilov
Обычный segmented stack в хипе живущий
Ясно. А за сегментед стек отвечает llvm с gcc или сам ghc?
источник

AV

Alexander Vershilov in Haskell
Что значит отвечает?
источник

in Haskell
Alexander Vershilov
Что значит отвечает?
То есть в llvm и gcc емнип можно скомпилировать программу с опцией -fsplit-stacks, при этом в самом коде ничего делать не нужно
источник

AV

Alexander Vershilov in Haskell
Ну и если быть точным, то основная сборка это NCG (New code generator), и там на пути нет ни llvm, ни C
источник

in Haskell
Ну и вот, добавляет ли ghc в свой выхлоп что-то связанное с сегментированными стеками
источник

AV

Alexander Vershilov in Haskell
Сегментированый стек это calling convention + аллокация фреймов рантайм системой
источник

AV

Alexander Vershilov in Haskell
Так что видимот ответ "добавляет"
источник

AV

Alexander Vershilov in Haskell
Ну и если мне не изменяет память то split-stack ничего общего с segmented stack не имеет, но это уже не точно
источник

AA

A64m AL256m qn<co... in Haskell
Привет. Я правильно понимаю, что ghc компилирует в llvm ir или в си?
у ghc нативный кодогенератор - основной. когда-то был кодогенератор через си, он постпроцессил ассемблер на выходе сишного компилятора (теперь такого бекенда нет, есть бекенд через си только для бутстрапа, он генерирует сильно более медленный код, по сравнению с нативным кодогенератором), есть не совсем доделанный бекенд через ллвм. в ир он скомпилить не может, использует ллвм как раньше сишный компилятор и построцессит его выхлоп
источник

in Haskell
Ну и вот, добавляет ли ghc в свой выхлоп что-то связанное с сегментированными стеками
Под выхлопом я имею в виду именно всякий IR, а не исполняемые файлы )
источник

in Haskell
А разве для хаскеля не критично то, что для каждого вызова функции аллокать новый сегмент стека - это дороговато?
источник

AV

Alexander Vershilov in Haskell
A64m AL256m qn I0
у ghc нативный кодогенератор - основной. когда-то был кодогенератор через си, он постпроцессил ассемблер на выходе сишного компилятора (теперь такого бекенда нет, есть бекенд через си только для бутстрапа, он генерирует сильно более медленный код, по сравнению с нативным кодогенератором), есть не совсем доделанный бекенд через ллвм. в ир он скомпилить не может, использует ллвм как раньше сишный компилятор и построцессит его выхлоп
На unregistered архитектурах же кажется via-c используется?
источник

AA

A64m AL256m qn<co... in Haskell
Alexander Vershilov
На unregistered архитектурах же кажется via-c используется?
ну вот этот и есть неполноценный для бустрапа
источник

AV

Alexander Vershilov in Haskell
А разве для хаскеля не критично то, что для каждого вызова функции аллокать новый сегмент стека - это дороговато?
Непонятно почему вы считате, что для каждого вызова надо аллоцировать новый семент стека
источник

AV

Alexander Vershilov in Haskell
Обычный стек работает точно так же как segmented, просто в сегменте сдвинули указатель на bottom и всё
источник