Есть ли в Rust флаг компилятора «Оптимизировать отладку»? - PullRequest
1 голос
/ 21 июня 2020

В C ++ у вас есть флаги компиляции для включения «Оптимизации отладки» с помощью «-Og» или «/ Og» (и, возможно, других флагов в других компиляторах).

Этот флаг включает очень базовые c оптимизации, которые не мешают отладке (насколько я понимаю). Но это означает, что для программы разрешены тривиальные или «бесплатные» оптимизации, сделанные компилятором, о которых вам не нужно беспокоиться.

From G CC optimize options , «Оптимизация процесса отладки»:

Оптимизация процесса отладки. -Og должен быть уровнем оптимизации для стандартного цикла редактирования-компиляции-отладки, предлагая разумный уровень оптимизации при сохранении быстрой компиляции и хорошего опыта отладки. Это лучший выбор, чем -O0 для создания отлаживаемого кода, потому что некоторые проходы компилятора, которые собирают отладочную информацию, отключены в -O0.

Мне было интересно, есть ли где-нибудь возможность включить такой же вид выгоды, или планируются ли такие варианты. В идеале, который может быть включен через car go и как можно более кроссплатформенным способом.

Обратите внимание, что я не спрашиваю о «opt-level», которые эквивалентны «-O1, - 02, et. c ".

1 Ответ

4 голосов
/ 21 июня 2020

В книге Rust Car go по профилям вы увидите, что профиль компиляции по умолчанию, названный dev, указан следующим образом:

[profile.dev]
opt-level = 0
debug = true
debug-assertions = true
overflow-checks = true
lto = false
panic = 'unwind'
incremental = true
codegen-units = 256
rpath = false

Поскольку debug = true означает, что сохраняется полная отладочная информация, это означает, что скомпилированные объекты проекта уже будут подготовлены для отладки, хотя и без каких-либо оптимизаций. На данный момент в Car go и ржавчине c нет флага для «оптимизации процесса отладки». Хотя мы можем быть уверены, что символы отладки сохраняются, в отличие от того, что указано в G CC, где "отладочная информация на некоторых проходах теряется с -O0" , применяя оптимизацию и сохраняя хороший опыт отладки - это своего рода игра с компромиссом: в частности, LLVM предоставляет некоторые гарантии, но возможности навигации и экспериментирования со свойствами в режиме отладки могут быть скомпрометированы ( соответствующая страница документации LLVM ).

Если мы понимаем истинный смысл «улучшения опыта отладки», это то, что может быть сделано в каждом конкретном случае, путем настройки профиля компиляции. Например, при разработке программ в реальном времени, таких как разработка видеоигр, обычно требуется применить несколько оптимизаций кода, чтобы производительность во время выполнения была сносной. См. Книгу Rust c по параметрам генерации кода , чтобы узнать, что можно сделать с этой целью. Каждый opt-level вносит свой вклад в этот опыт по-своему.

См. Также:

...