Я пишу язык, который сейчас компилируется в C, и когда я говорю IL, я имею в виду, поскольку на языке C я пишу код, чтобы затем сгенерировать сборку другим компилятором c, например gcc или clang.Вопросы о языке C как промежуточном языке
: C код, который я генерировать, это будет более выгодно:
- Если я некоторые простые перевалы неавтоматического (постоянная распространения, мертвое удаление кода, ...) это уменьшит объем работ по C компилятор должен сделать, или сделать его сложнее, потому что это не действительно человеческий код C?
- Если бы я должен был скомпилировать, чтобы сказать код с тремя адресами или SSA или какую-либо другую форму, а затем передать это в программу на языке C с функциями, метками и переменными - это упростило бы или упростило бы компилятор C для оптимизации?
Какой вид связи вместе, чтобы сформировать следующий вопрос ...
- Что является наиболее оптимальным способом для получения хорошего кода C от языка, который компилирует в C?
- Стоит ли вообще делать какие-либо оптимизации и оставлять это для компилятора?
«Вся точка не-C-языка - это создание спагетти gotos_» - это бессмыслица! Я писал языки с yacc, которые генерируют совершенно хороший C без goto. –
Можете ли вы рассказать о том, почему эти операции дороги? Считаете ли вы, что их можно оптимизировать, если кто-то должен писать плохой код, прежде чем он будет скомпилирован на C? Я не думаю, что могу ограничить использование памяти кучи, поскольку этот язык относительно низкий, нет GC или что-то еще, поэтому программист обрабатывает их управление памятью. –
Чтение и запись в основную память включает передачу данных из процессора и обратно, что намного дороже, чем операции, которые происходят внутри процессора. Упорядочивая данные так, чтобы элементы, используемые вместе, были близки друг к другу и выполнялись так, чтобы операции, действующие на одни и те же данные, были близки друг к другу, вы минимизируете это. –