Size: a a a

Compiler Development

2020 December 01

M

MaxGraey in Compiler Development
EgorBo
а куда уходить?
Пока на инкрементный точный M&S. Но в wasm он имеет еще и оверхед так как нужно эмулировать и трекать стек фрейм по крайней мере для управляемых указателей (в wasm нет прямого доступа к shadow stack)
источник

M

MaxGraey in Compiler Development
Потом посмотрим, может быть будет аппроксимировать лайтаймы во время статического анализа и там где будет слишком дорого или невозможно вычислить использовать регион с bump аллокатором. Ну или дождемся wasm GC наконец=)
источник

E

EgorBo in Compiler Development
это вопрос в контексте эпла с их М1 и быстрым ARC в обжс/свифте просто возник
источник

IB

Ivan Boldyrev in Compiler Development
EgorBo
А знаком тут кто с Kotlin-Native, мне интересно насколько они счастливы с ref-counted GC и как борятся с цикличными ссылками? А то вот тут смотрю https://github.com/JetBrains/kotlin-native/blob/master/runtime/src/main/kotlin/kotlin/native/internal/GC.kt#L11-L14 - это что, два гц по сути?
Как у Python (CPython, как минимум).
источник

KR

K R in Compiler Development
MaxGraey
В AssemblyScript мы используем нечто похожее. Для всех не циклических ссылок используется ARC, для всех остальных обычный M&S GC. Детекция циклов происходит во время статического анализа и большинстве случаев рантайм для GC не вклячается вообще в сборку. Но мы собираемся от этого уходить, потому что сопровождать такой гибрид очень сложно маленькой командой
А в каком смысле вы поддерживаете? Там разве что-то дико меняется? Вот камлщики как написали, так оно и живёт вроде.
источник

M

MaxGraey in Compiler Development
K R
А в каком смысле вы поддерживаете? Там разве что-то дико меняется? Вот камлщики как написали, так оно и живёт вроде.
не понял вопроса если честно
источник

KR

K R in Compiler Development
MaxGraey
не понял вопроса если честно
Ну я думал, что gc достаточно написать и всё.

Дальше вы его не трогаете, вот и переписывать не надо.
источник

M

MaxGraey in Compiler Development
Не совсем, ARC требует много плясок. Практически каждай новая фича в компиляторе требует правильной работы со счетчиками особенно такими что имеют статус autoreleased. Кроме того есть пару очень трудноотлавливаемых edge кейсов связанных с алиасингом. В общем это то еще удовольствие. В конечном итоге все это начало очень сильно тормозить процесс разработки и было принято нелегкое решение отказаться от этого
источник

KR

K R in Compiler Development
MaxGraey
Не совсем, ARC требует много плясок. Практически каждай новая фича в компиляторе требует правильной работы со счетчиками особенно такими что имеют статус autoreleased. Кроме того есть пару очень трудноотлавливаемых edge кейсов связанных с алиасингом. В общем это то еще удовольствие. В конечном итоге все это начало очень сильно тормозить процесс разработки и было принято нелегкое решение отказаться от этого
Спасибо. Значит у меня было неправильное представление, что эту штуку можно выделить в подсистему. А она, получается, как плесень - проникает везде.
источник

M

MaxGraey in Compiler Development
K R
Спасибо. Значит у меня было неправильное представление, что эту штуку можно выделить в подсистему. А она, получается, как плесень - проникает везде.
В том то и дело, что оно очень сильно завязано на статическом анализе. Намного сильнее чем GC
источник

KR

K R in Compiler Development
MaxGraey
В том то и дело, что оно очень сильно завязано на статическом анализе. Намного сильнее чем GC
И её нельзя выделить стандартными средствами абстрагирования - промежуточным представлением и проходом(ами). Так?
источник

M

MaxGraey in Compiler Development
K R
И её нельзя выделить стандартными средствами абстрагирования - промежуточным представлением и проходом(ами). Так?
Если было промежуточное представление, то было бы легче. Наверное. Но у нас пока нет Middle IR. В данный момент кстати работаю над этим. Перепробовал уже много разных прототипов, пока отановился на SoN + CPS + regions. За основу взят Thorin
источник

M

MaxGraey in Compiler Development
MaxGraey
Если было промежуточное представление, то было бы легче. Наверное. Но у нас пока нет Middle IR. В данный момент кстати работаю над этим. Перепробовал уже много разных прототипов, пока отановился на SoN + CPS + regions. За основу взят Thorin
Но для него все ранов придеться делать еще много дополнительных трансформаций и стат анализов
источник

KR

K R in Compiler Development
Ну может же быть несколько промежуточных представлений. Может быть в каком-то это будет легкой штукой? Свифт ведь делают давно и большой командой, а они работают сильно медленнее, чем маленькие.
источник

M

MaxGraey in Compiler Development
K R
Ну может же быть несколько промежуточных представлений. Может быть в каком-то это будет легкой штукой? Свифт ведь делают давно и большой командой, а они работают сильно медленнее, чем маленькие.
У Swift middle IR это SIL - high level SSA-based IR. Там на самом деле не так много делается - retain / release оптимизации, scalar replacement, dynamic method devirtualization, lambda lifting и пожалуй еще несколько небольших оптимизаций
источник

MO

Mar Ort in Compiler Development
EgorBo
А знаком тут кто с Kotlin-Native, мне интересно насколько они счастливы с ref-counted GC и как борятся с цикличными ссылками? А то вот тут смотрю https://github.com/JetBrains/kotlin-native/blob/master/runtime/src/main/kotlin/kotlin/native/internal/GC.kt#L11-L14 - это что, два гц по сути?
Не очень на самом деле, в основном из-за скорости
источник

NK

ID:0 in Compiler Development
https://www.jeffsmits.net/assets/articles/sle20-paper4.pdf
Gradually Typing Strategies

Статья рассказывает о применении популярной техники постепенной типизации (Gradual Typing) в необычной области -- к языку переписывания термов Stratego (который используется для "program normalization, type checkers, program analyses, code generators, and more"). Несмотря на отсутствие проверки типов в Stratego до сего момента, он тем не менее послужил для вдохновения авторов Haskell фреймворка SYB.

Использование Gradual Typing (постепенной типизации) мотивировано двумя факторами. Первый -- обратная совместимость, так как Stratego (в составе фреймворков Stratego/XT и Spoofax) используется в production-системах, разрабатываемых как в академии (researchr.org, conf.researchr.org, платформа онлайн-курсов TU Delft), так и в индустрии (где-то в недрах Oracle Labs). Второй -- высокая "динамичность" переписывания термов, которая в некоторых случаях используется (а кто-то скажет "эксплуатируется") для (временного) порождения нетипизируемых термов и превращения их обратно в типизируемые.

Дополнительно задача осложняется наличием в Stratego правил переписывания "высшего порядка" (называемых "стратегиями переписывания"), принимающих и применяющих другие правила переписывания (или стратегии). Отсюда возникает понятие Type-Preserving стратегий, реализующее ограниченную форму Higher-Kinded Types.

Кроме того, авторы применяют механизм "прозрачных" во время исполнения прокси-типов для того чтобы избежать накапливания лишних динамических преобразований типов при передаче правил переписывания из статически-типизированных стратегий в динамически-типизированные и обратно.

Проверка полученной системы типов на существующем проекте (учебный ассемблер для Java-байткода) продемонстрировала два достаточно ожидаемых результата: а) корректный динамический код написан так как если бы был статически типизирован, поэтому его легко аннотировать явными типами и почти не приходится при этом рефакторить; б) плохо протестированный динамический код содержит ошибки, которые легко обнаруживаются тайп-чекером (например, возврат списка вместо элемента — классика, сам на таком попадался).

#stratego #spoofax #gradual #types
источник

M

MrSmith in Compiler Development
MaxGraey
Если было промежуточное представление, то было бы легче. Наверное. Но у нас пока нет Middle IR. В данный момент кстати работаю над этим. Перепробовал уже много разных прототипов, пока отановился на SoN + CPS + regions. За основу взят Thorin
Что за CPS и regions?
источник

H

Hirrolot in Compiler Development
Continuation passing style наверное
источник

DF

Dollar Føølish in Compiler Development
Ну да
источник