под текущее железо, благодаря чему всякие там Gentoo, FreeBSD и прочие UNIX-подобные системы, установка ПО в которых происходит преимущественно путём сборки исходников, работают быстрее. Собственно вопрос: производит ли аналогичные оптимизации rustc? Есть ли разница в производительности софта на расте, хотя бы незначительная, в зависимости от того, был ли он собран на машине, на которой исполняется?
Типичный пайплайн генерации машинного говно-кода (кода) в 0 и 1. Компилятор принимает поток символов (твой код) и начинается первый этап компиляции. 1) Лексический анализатор, твой код разбивается на лексемы (токен и значение, а может быть просто токен), например: let a = 5; (VariableDeclaraiton), (Id, "a"), (Assign), (Number, "5"), (EndOfLine). Все лексемы записываются в таблицу символов, где может быть и более подробная мета-информация, например, иммутабельна ли твоя переменная? Компилятор имеет постоянный доступ к этой таблице. 2) Синтаксический анализатор. Твой код разбивается на дерево последовательности. Образуется синтаксическое дерево. 3) Семантический анализатор(cargo check), проверяется, а правильно ли вообще написан код? 4) Далее идет очень интересный этап, генерация промежуточного кода. Главное требование к промежуточному коду: удобоворимый код, который можно будет потом скормить ассемблеру (например) и быстрая генерация. В этом этапе все очень verbose и есть куча мест, где можно упростить код, потому идет машинно-независимые оптимизации. 5) Генерация ассемблерного кода, где ассемблер может уже провести машинно-зависимые оптимизации в коде и уже в конечном итоге сгенерировать целевой язык - машинный язык.
Не понял. А как произвести кросс-компиляцию под определённое железо? Вот я хочу, допустим, добиться максимальной возможной оптимизации серверного приложения. Я могу кросс-компилировать на своей машине, а деплоить уже бинарники, так, чтобы машинно-зависимые оптимизации под железо сервера были применены?
-C target-cpu=<cpu>
Это понятно, потому и указываешь, что ты хочешь. Какой проц и т.д. Не?
читал доки https://doc.rust-lang.org/rustc/codegen-options/index.html#target-cpu ?
Нет, пока внимательно не изучал вопрос, потому что вообще смутное представление имею. Решил для начала тут спросить, на что именно обращать особое внимание, чтобы ничего не упустить при чтении доков.
кстати.... а ллвм или раст умеют остановиться на 4 чтоб после сделать 5 под несколько архитектур?
Обсуждают сегодня