Size: a a a

Compiler Development

2021 January 06

DP

Defragmented Panda in Compiler Development
Igor 🐱 Jirkov
Самое простое, что я видел -- linear scan
спасибо, да, выглядит просто

как оно видит conditional jump? считает что обе ветки кода исполняются?

например
if(x<12) myfunc(y)
else myother(z)
источник

VK

Vladimir Kazanov in Compiler Development
Igor 🐱 Jirkov
Самое простое, что я видел -- linear scan
Там ж еще области жизни над под рукой иметь, это тоже когнитивная нагрузка:-)
источник

DP

Defragmented Panda in Compiler Development
мне понравился метод оптимизации в блоке (можно делать за 1 проход, без доп трат памяти)

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

а код вне этих блоков достаточно оптимизировать на 1 строку (типа x=x+1). 1 строка почти наверняка в регистры влезет
источник

M

MaxGraey in Compiler Development
Defragmented Panda
мне понравился метод оптимизации в блоке (можно делать за 1 проход, без доп трат памяти)

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

а код вне этих блоков достаточно оптимизировать на 1 строку (типа x=x+1). 1 строка почти наверняка в регистры влезет
Это называется peephole-оптимизации - происходят переписывания в коротком движущемся окне (обычно набор из 2-3 выражений)

или там вопрос про instruction scheduling?
источник
2021 January 07

DP

Defragmented Panda in Compiler Development
MaxGraey
Это называется peephole-оптимизации - происходят переписывания в коротком движущемся окне (обычно набор из 2-3 выражений)

или там вопрос про instruction scheduling?
да, peephole optimization это как раз то что я хотел, спасибо
источник

NK

ID:0 in Compiler Development
Next-gen Haskell Compilation Techniques

На мой взгляд, презентация интересна будет многим компиляторщикам. Автор приводит массу академических ссылок. В целом, речь идет о проблематике организации архитектуры современного компилятора. Мне, например, очень понравилась идея с использованием Datalog, которая дополнительно себя оправдала и с точки зрения производительности статического анализа.

https://docs.google.com/presentation/u/0/d/1g_-bHgeD7lV4AYybnvjgkWa9GKuP6QFUyd26zpqXssQ/mobilepresent

#ghc #grin
источник

DP

Defragmented Panda in Compiler Development
как называется фича языков которые могут "докомпилить еще кода"?

т.е. например есть программа, мы ее скомпилили. потом (не повторяя компиляцию первой) мы скомпилили еще кусок кода. особенно интересно как делается доступ к тем же переменным.

мы должны либо сохранять имена переменных, либо использовать что-то типа хэша для имен переменных и надеятся на отсутствие совпадений, так?
источник

АД

Антоний Диоген... in Compiler Development
Defragmented Panda
как называется фича языков которые могут "докомпилить еще кода"?

т.е. например есть программа, мы ее скомпилили. потом (не повторяя компиляцию первой) мы скомпилили еще кусок кода. особенно интересно как делается доступ к тем же переменным.

мы должны либо сохранять имена переменных, либо использовать что-то типа хэша для имен переменных и надеятся на отсутствие совпадений, так?
Incremental compilation?
источник

IP

Iaroslav Postovalov in Compiler Development
Defragmented Panda
как называется фича языков которые могут "докомпилить еще кода"?

т.е. например есть программа, мы ее скомпилили. потом (не повторяя компиляцию первой) мы скомпилили еще кусок кода. особенно интересно как делается доступ к тем же переменным.

мы должны либо сохранять имена переменных, либо использовать что-то типа хэша для имен переменных и надеятся на отсутствие совпадений, так?
обычно единица инкрементальной компиляции - это один объект
источник

IP

Iaroslav Postovalov in Compiler Development
поэтому такой проблемы вообще нет
источник

BD

Berkus Decker in Compiler Development
(или одна функция)
источник

NK

ID:0 in Compiler Development
Самый ранний и задавший главные направления исследований в области компиляторов проект это, безусловно, оптимизирующий компилятор языка Fortran I. Работы над ним велись в середине 1950-х и примененные в компиляторе техники устарели, но, например, остроумный механизм распределения регистров продержался в Fortran еще много лет.

Распределение регистров в Фортране 1 проводится в два этапа. На вход первого этапа поступает список инструкций, использующих неограниченное число символьных регистров. Список разбивается на базовые блоки, то есть строится граф потока исполнения. При этом во всех ветвлениях (IF, вычисляемых GOTO) программисты на языке должны были сами (!) расставить вероятность перехода по каждой из ветвей. Вероятности впоследствии используются для моделирования частоты базовых блоков метдом Монте-Карло.

Во втором этапе, начиная от самого "горячего" из оставшихся необработанных блока, строится регион, внутри которого будет проводится распределение регистров. Регион расширяется самым горячим из соседних базовых блоков до тех пор, пока не упирается в другие регионы или начало/конец графа. Специальным образом обрабатывается закольцованные регионы, то есть циклы.

Само выделение регистров происходит внутри каждого такого региона; при необходимости вытесняются регистры, наименее востребованные в оставшейся части региона (например, мертвые).

Материалы для интересующихся историей компиляторов:

https://www.cs.fsu.edu/~lacher/courses/COT4401/notes/cise_v2_i1/fortran.pdf - краткий современный обзор компилятора

http://archive.computerhistory.org/resources/text/Fortran/102663113.05.01.acc.pdf - оригинальная публикация 1957-го года.

#history #fortran #registeralloc
источник

M

MrSmith in Compiler Development
Defragmented Panda
как называется фича языков которые могут "докомпилить еще кода"?

т.е. например есть программа, мы ее скомпилили. потом (не повторяя компиляцию первой) мы скомпилили еще кусок кода. особенно интересно как делается доступ к тем же переменным.

мы должны либо сохранять имена переменных, либо использовать что-то типа хэша для имен переменных и надеятся на отсутствие совпадений, так?
Hot reload
источник

M

MrSmith in Compiler Development
Diff update
источник

M

MrSmith in Compiler Development
Дофига что подходит под описание
источник

T

Tommy in Compiler Development
Походу название зависит от использования. Для дебага это inc build, а в проде уже hot reload🤔
источник

AK

Andrei Kurosh in Compiler Development
Tommy
Походу название зависит от использования. Для дебага это inc build, а в проде уже hot reload🤔
Incremental build просто собирает не все, а только то, что изменилось. А hot reload еще и применяет изменения в работающую программу без ее перезапуска. Никакого отношения к debug/release это не имеет
источник

T

Tommy in Compiler Development
Andrei Kurosh
Incremental build просто собирает не все, а только то, что изменилось. А hot reload еще и применяет изменения в работающую программу без ее перезапуска. Никакого отношения к debug/release это не имеет
Спутал с Edit and Continue, но вещи близкие, думаю
источник

AK

Andrei Kurosh in Compiler Development
Tommy
Спутал с Edit and Continue, но вещи близкие, думаю
Hot reload = edit & continue
источник

T

Tommy in Compiler Development
Andrei Kurosh
Hot reload = edit & continue
Все так, но после edit должен быть Incremental build, чтобы было что релоадить
источник