Насколько я помню, gcc при компиляции производит какие-то оптимизации кода

под текущее железо, благодаря чему всякие там Gentoo, FreeBSD и прочие UNIX-подобные системы, установка ПО в которых происходит преимущественно путём сборки исходников, работают быстрее. Собственно вопрос: производит ли аналогичные оптимизации rustc? Есть ли разница в производительности софта на расте, хотя бы незначительная, в зависимости от того, был ли он собран на машине, на которой исполняется?

7 ответов

15 просмотров

Типичный пайплайн генерации машинного говно-кода (кода) в 0 и 1. Компилятор принимает поток символов (твой код) и начинается первый этап компиляции. 1) Лексический анализатор, твой код разбивается на лексемы (токен и значение, а может быть просто токен), например: let a = 5; (VariableDeclaraiton), (Id, "a"), (Assign), (Number, "5"), (EndOfLine). Все лексемы записываются в таблицу символов, где может быть и более подробная мета-информация, например, иммутабельна ли твоя переменная? Компилятор имеет постоянный доступ к этой таблице. 2) Синтаксический анализатор. Твой код разбивается на дерево последовательности. Образуется синтаксическое дерево. 3) Семантический анализатор(cargo check), проверяется, а правильно ли вообще написан код? 4) Далее идет очень интересный этап, генерация промежуточного кода. Главное требование к промежуточному коду: удобоворимый код, который можно будет потом скормить ассемблеру (например) и быстрая генерация. В этом этапе все очень verbose и есть куча мест, где можно упростить код, потому идет машинно-независимые оптимизации. 5) Генерация ассемблерного кода, где ассемблер может уже провести машинно-зависимые оптимизации в коде и уже в конечном итоге сгенерировать целевой язык - машинный язык.

lem0nify- Автор вопроса

Не понял. А как произвести кросс-компиляцию под определённое железо? Вот я хочу, допустим, добиться максимальной возможной оптимизации серверного приложения. Я могу кросс-компилировать на своей машине, а деплоить уже бинарники, так, чтобы машинно-зависимые оптимизации под железо сервера были применены?

-C target-cpu=<cpu>

Vitaliy
-C target-cpu=<cpu>

Это понятно, потому и указываешь, что ты хочешь. Какой проц и т.д. Не?

lem0nify
Не понял. А как произвести кросс-компиляцию под оп...

читал доки https://doc.rust-lang.org/rustc/codegen-options/index.html#target-cpu ?

lem0nify- Автор вопроса
ozkriff🇺🇦 Lesnikóv
читал доки https://doc.rust-lang.org/rustc/codegen...

Нет, пока внимательно не изучал вопрос, потому что вообще смутное представление имею. Решил для начала тут спросить, на что именно обращать особое внимание, чтобы ничего не упустить при чтении доков.

Ugrik Gheorghe
Типичный пайплайн генерации машинного говно-кода (...

кстати.... а ллвм или раст умеют остановиться на 4 чтоб после сделать 5 под несколько архитектур?

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Ребята привет. Telegraf 3.38 актуален ещё или лучше обновиться?
𝙊𝑙ẽ𝘨 // Rabbit Hole
2
Есть ли лимиты на кол-во вебхук по домену? Стоит в данный момент 900+ ботов и бывает бот перестает отвечать (не приходят вебхуки) 🐒 Помогает только перезапуск
ᅠ [ Кому не ответил, дублируйте ]
11
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Товарищи, я с вопросом На сколько мне известно, это, конечно, зависит от того, как программа использует процессор, но у меня всё равно остаётся вопрос Допустим, есть 2 проце...
Shen
1
Товарищи, здравствуйте Подскажите, пожалуйста, может кто-нибудь сталкивался с такой задачей Через вебапку можно сканировать qr-код, а есть ли возможность считывать nfc?
Artem Stormageddon
8
Визуальное отображение моделей таблиц sql какое посоветуете?
Shen
7
Коллеги, здравствуйте Подскажите, пожалуйста. я почему-то всегда думал, что если переходить по ссылке такого формата(t.me/bot_bot?start=1) на бота. То бот сразу прожимает кн...
Artem Stormageddon
3
Карта сайта