Size: a a a

2020 March 16

DS

Doge Shibu in rust_offtopic
Т-34 85
Каким образом-то? Он низкоуровневый, понятия не имеет об абстракциях, которые к нему пришли
У него достаточно много данных для большинства оптимизаций.
источник

AL

Andrey @ozkriff Lesn... in rust_offtopic
Т-34 85
Хз, но если реально так, то не удивительно, почему он сливает gcc
ты в курсе же, что gcc тоже имеет промежуточные представления и конвейер преобразований, да?
источник

Т8

Т-34 85 in rust_offtopic
Andrey @ozkriff Lesnikov
ты в курсе же, что gcc тоже имеет промежуточные представления и конвейер преобразований, да?
Может и имеет, но вся магия, имхо, должна быть наверху
источник

DS

Doge Shibu in rust_offtopic
Andrey @ozkriff Lesnikov
ты в курсе же, что gcc тоже имеет промежуточные представления и конвейер преобразований, да?
Да более того, сейчас любой оптимизирующий компилятор имеет кучу таких представлений внутри.
источник

AL

Andrey @ozkriff Lesn... in rust_offtopic
Т-34 85
Каким образом-то? Он низкоуровневый, понятия не имеет об абстракциях, которые к нему пришли
это не так работает, хе)
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
Может и имеет, но вся магия, имхо, должна быть наверху
Тут идея в том, что вверху у тебя оптимизации, которые не требуют знания целевой архитектуры, а вот на уровне llvm и т.п. сидят как раз требующие этого знания оптимизации
источник

AZ

Alex Zhukovsky in rust_offtopic
Doge Shibu
Да более того, сейчас любой оптимизирующий компилятор имеет кучу таких представлений внутри.
где-то читал идею про то что оптимизирующие компиляторы не нужы)
источник

AZ

Alex Zhukovsky in rust_offtopic
аргументация там правда соминтельная была
источник

AZ

Alex Zhukovsky in rust_offtopic
из разряда "докупите серверов"
источник

AL

Andrey @ozkriff Lesn... in rust_offtopic
ну т.е. само собой, что есть оптимизации, где тебе важно высокоуровневое понимание. они делаются в начале конвейера. но есть куча оптимизаций, где тебе наоборот важны детали конкретной реализации - они располагаются в проходах ближе к конце конвейера, когда код уже полупереваренный в не похожую на изначальный язык кашу
источник

DS

Doge Shibu in rust_offtopic
Doge Shibu
Тут идея в том, что вверху у тебя оптимизации, которые не требуют знания целевой архитектуры, а вот на уровне llvm и т.п. сидят как раз требующие этого знания оптимизации
Таким образом самые сложная часть написания компилятора - его бэкенд, можно переиспользовать между разными языками
источник

DS

Doge Shibu in rust_offtopic
И суть в том, что у гцц вот этот нижний уровень сильно лучше, чем у llvm по всем параметрам
источник

Т8

Т-34 85 in rust_offtopic
Doge Shibu
Тут идея в том, что вверху у тебя оптимизации, которые не требуют знания целевой архитектуры, а вот на уровне llvm и т.п. сидят как раз требующие этого знания оптимизации
Llvm il платформазависимый, поэтому всё равно требует знаний. Это ж не Си(--)
источник

AK

Alexander Krivitskiy in rust_offtopic
Roman Proskuryakov
https://godbolt.org/z/nXZR97

Почему раст добавляет дополнительные

push    rax // in the beginning of example::bar
// and
pop rcx // in the end of example::bar

По сравнению с C++?
Ну это выравнвание. Накидывает 8 байт, чтобы выровнять под 16. В плюсах оно вроде перед вызовом делается. sub esp 8 call f add esp 8. В gcc по крайней мере.
источник

Т8

Т-34 85 in rust_offtopic
И то, надо знать си, тогда
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
Llvm il платформазависимый, поэтому всё равно требует знаний. Это ж не Си(--)
Частично платформозависимый
источник

AL

Andrey @ozkriff Lesn... in rust_offtopic
Doge Shibu
И суть в том, что у гцц вот этот нижний уровень сильно лучше, чем у llvm по всем параметрам
кроме сопровождаемости кода, насколько я в курсе
источник

DS

Doge Shibu in rust_offtopic
Т.е. очевидно, что размеры данных туда уже приходят
источник

DS

Doge Shibu in rust_offtopic
Andrey @ozkriff Lesnikov
кроме сопровождаемости кода, насколько я в курсе
Да и его нельзя как библиотеку заиспользовать
источник

RP

Roman Proskuryakov in rust_offtopic
Alexander Krivitskiy
Ну это выравнвание. Накидывает 8 байт, чтобы выровнять под 16. В плюсах оно вроде перед вызовом делается. sub esp 8 call f add esp 8. В gcc по крайней мере.
Ну я вчера нарыл, что rsp должен быть выровнен по 16
источник