LINUX.ORG.RU

Команда разработчиков Rust запустила опрос по производительности компилятора

 , ,


0

5

Это прямой перевод записи из блога Rust.

Мы за­пу­ска­ем Опрос по про­из­во­ди­тель­но­сти ком­пи­ля­то­ра Rust.

Дол­гая ком­пи­ля­ция ко­да на Rust ча­сто упо­ми­на­лась как од­но из са­мых боль­ших испы­та­ний, огра­ни­чи­ва­ющих про­дук­тив­­ность Rust-ра­зра­бот­чи­ков. Лю­ди, вно­ся­щие вклад в ком­пи­ля­тор Rust, ко­неч­но, в кур­се об этом, и они по­сто­ян­но ра­бо­та­ют над улуч­ше­ни­ем си­ту­ации, ища но­вые спо­со­бы уско­рить ком­пи­ля­тор, сор­ти­руя ре­грес­сии про­из­во­ди­тель­но­сти и из­ме­ряя на­ши дол­го­сроч­ные улуч­ше­ния про­из­во­ди­тель­но­сти. Не­дав­но мы так­же вне­сли круп­ные из­ме­не­ния, на ра­зра­бо­тку ко­то­рых бы­ло по­тра­че­но мно­го вре­ме­ни, так что про­из­во­ди­тель­ность ком­пи­ля­то­ра дол­жна зна­чи­тель­но улуч­шить­ся по умол­ча­нию.

Ког­да речь идёт о про­из­во­ди­тель­но­сти ком­пи­ля­ции, важ­но отме­тить, что это не всег­да так же про­сто, как опре­де­лить, на­сколь­ко дол­го rustc ком­пи­ли­ру­ет крейт. Есть мно­го раз­но­образ­ных ра­бо­чих про­цес­сов ра­зра­бо­тки, ко­то­рые мо­гут за­ста­влять ид­ти на ком­про­мис­сы, и тех, ко­то­рые мо­гут быть за­труд­не­ны раз­лич­ны­ми фак­то­ра­ми, та­ки­ми как ин­те­гра­ция ком­пи­ля­то­ра с исполь­зу­емой сбо­роч­ной си­сте­мой.

Для то­го, что­бы луч­ше по­нять эти ра­бо­чие про­цес­сы, мы при­го­то­ви­ли Опрос по про­из­во­ди­тель­но­сти ком­пи­ля­то­ра Rust. Он ак­цен­ти­ро­ван имен­но на про­из­во­ди­тель­но­сти ком­пи­ля­ции, что поз­во­ля­ет нам по­лу­чить бо­лее по­дроб­ные дан­ные, чем те, ко­то­рые мы обыч­но по­лу­ча­ем из еже­год­но­го опро­са «State of Rust». Дан­ные из это­го опро­са по­мо­гут нам по­нять ме­ста, на ко­то­рых нам сле­ду­ет со­сре­до­то­чить уси­лия по улуч­ше­нию про­дук­тив­но­сти Rust-ра­зра­бот­чи­ков.

Прой­ти опрос вы мо­же­те здесь.

Про­хож­де­ние дол­жно за­нять приб­ли­зи­тель­но 10 ми­нут ва­ше­го вре­ме­ни. Опрос пол­но­стью ано­ни­мен. Мы бу­дем при­ни­мать фор­мы до 7 и­юля 2025 го­да. По окон­ча­нии опро­са мы обра­бо­та­ем ре­зуль­та­ты и опуб­ли­ку­ем клю­че­вые мо­мен­ты в этом бло­ге.

Приг­ла­ша­ем вас при­нять уча­стие в опро­се, ведь ва­ши от­ве­ты по­мо­гут нам улуч­шить про­из­во­ди­тель­ность ком­пи­ля­ции Rust. Спа­си­бо!

>>> Запись в блоге Rust

★★★★

Проверено: dataman ()
Последнее исправление: unfo (всего исправлений: 4)

Мёртвому припарки. Тормозная разработка – это главная фишка раста.

beastie ★★★★★
()

А тормознутость debug-сборок по умолчанию (из-за того что туда зачем-то вкрячили проверки на переполнение) это типа норм?

unDEFER ★★★★★
()

В Виллорибо средняя длинна членов 20 см, а в Виллобаджо 15.

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

unclestephen
()
Ответ на: комментарий от AlexVR

я отключаю debuginfo всегда, включаю только при необходимости отладки, это помогает

SL_RU ★★★★
()

злые языки(дипсик) пишут, что раст в 2-5 раз медленее gcc на эквивалентном коде.

и при они спрашивают публику, а не слишком ли медленная у нас черепаха, давайте обсудим.

alysnix ★★★
()

Этот раст он мягко говоря оказался не очень удачным. Сейчас часть его популярности Zig оттягивает на себя. Я думаю последний победит в итоге, поэтому первому надо помочь умереть, а не помогать улучшать, отсрачивая неизбежное.

rtxtxtrx ★★★
()
Ответ на: комментарий от alysnix

«отсрачивая»

Понимаю, что хочется. Но нельзя. В русском языке пишется - отсрочивается.

Применительно к расту - можно :)

DrRulez ★★★★★
()
Ответ на: комментарий от alysnix

и при они спрашивают публику, а не слишком ли медленная у нас черепаха, давайте обсудим.

Логично. Речь идёт о необходимости этой самой «быстроты». Хотя если честно ума не приложу для чего это нужно кроме «ураганного» СI/СD.

bdrbt
()
Ответ на: комментарий от bdrbt

Дело даже не в CI/CD. Человек физически не может глазом увидеть все последствия своей правки в коде. Например, добавлю я аттрибут __attribute__((warn_unused_result)) для функции в библиотеке (вставьте свой синтаксис своего любимого языка). Я помню, что там где-то есть отсутствие проверки и я это поправил. Теперь мне обязательно нужно запустить сборку монорепа, чтобы увидеть, а точно ли больше никто не имеет этой проблемы?

На C наши 470к строк в 10-20 разных конфигурациях (монореп же) компилятся 3-4 минуты (из которых 80% времени - тормознутый mingw). Если бы мы использовали там C++ - то компилировалось бы минут 15. Если бы это был rust - это был бы минимум час. ЧАС, КАРЛ! На какое-то микроскопическое изменение, одна строка кода, git add, git commit, git push. ЧАС! И это нельзя как-то инкрементировать (да и инкрементальная сборка на rust проклята и почти не работает).

Rust максимально просит вас доверять компилятору в плане проверки вашего кода (компилируется == (условно) работает). Но при этом начисто убивает в принципе возможность проверить себя нажав ctrl + b и получить результат за один отхлёб кофе.

PPP328 ★★★★★
()
Ответ на: комментарий от Gordon

Не помогло бы, потому что там бибилиотеки и приложения разной направленности их использующие. Типа

shared
-libA
-libB
-libC

cashbox
-libbank
-bankexe
-banksber
<..>

tms
-libtms
-tmsexe
-devices
  - doremi
  - barco
  <...>

<...>

Монореп тем и хорош, что ты в какой-то библиотеке сделал изменение - и можешь шиппить за один раз и не будет ситуации, когда ты шипнул программу, которая завязана на старые библиотеки, а потом апдейтную библиотеки. CI/CD очень сильно завязан на монорепы. Агент берет компоненты A, B, C, берет их зависимости, пакует и шлёт на узлы/в архив/etc. Плюс опять же, сценарий что выше - ты изменил что-то в библиотеке - и ты уже на этапе компиляции увидишь, что ты поломал что-то. А если бы это были разные репы - то ты патчишь либу, потом идёшь в другой реп, суёшь там новый заголовок, суёшь там скомпиленные бинари либ (потому что надо проверять линковку), собираешь. А если у тебя разных репов с десяток - то удачи тебе управиться до утра.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

ЧАС, КАРЛ!

Вопрос снят. Это реально безумие.

bdrbt
()
Ответ на: комментарий от Gordon

Зачем кому-то использовать Zig?

Чтоб сменить один вырвиглазный синтаксис на другой:

const std = @import("std");

pub fn main() anyerror!void {
    const stdout = std.io.getStdOut().writer();

    try stdout.print("Hello, world!\n", .{});

    const msg = "Hello, world!\n";
    const non_null_terminated_msg: [msg.len]u8 = msg.*;

    try stdout.print("{s}\n", .{&non_null_terminated_msg});
}

Что нового он привносит в разработку?

Предлагаю угадать, сколько времени займёт компиляция: https://godbolt.org/z/b3aEzrGx4.

dataman ★★★★★
()
Ответ на: комментарий от PPP328

Я может чего-то не понимаю, но звучит как задача для cargo workspaces. Там тоже кладешь в одну репу, но каждый твой крейт со своими зависимостями итд итп. Да, ты получишь ребилд модулей, которые затронуты изменениями в условном libA, но рекомпил будет только связанных модулей.

Gordon
()
Ответ на: комментарий от Gordon

У нас и так рекомпил только связанных. Пример выше для какой-нибудь базовой низкоуровневой либы (у нас таких, к примеру, 3).

PPP328 ★★★★★
()
Ответ на: комментарий от alysnix

Ну как это нельзя. Тут же именно что раст, и именно что отсрачили. Если бы в расте ничего не отсрачивали постоянно, то и вопросов бы не было.

Smacker ★★★★★
()

Перешёл по ссылке, хотел проголосовать что он тормозит. Первым вопросом было как я пользуюсь растом, выбрал «I never use Rust» и меня побагодарили за участие и в дальнейший опрос почему-то не пустили.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Gordon

Зачем кому-то использовать Zig? Что нового он привносит в разработку?

Странный вопрос. Это как с хорошими книгами, которые читать конечно не обязательно, но лучше читать.

Зиг дает комптайм, дает топовую обработку ошибок, юниттесты, бесшовную интеграцию Си, и работает альтернативой CMake. В вебассембли чувствует себя лучше всех.

sarumeister
()
Последнее исправление: sarumeister (всего исправлений: 1)
Ответ на: комментарий от Gordon

Задача: минимизировать кол-во неочевидных подводных мин в используемом инструменте при сохранении безрантаймовости и максимальной машинно-производительности.

C++: кол-во подводных мин максимально, стандарты выходят регулярно, нередко требуя переучивать часть мин 1500-страничного стандарта.

C: кол-во мин, пусть и не настолько велико, однако всё же не пренебрежимо мало. Вдобавок неоправданная для 2025г. ограниченность в абстракциях.

Rust: полное отсутствие мин в safe-подмножестве языка. Однако инструмент требует постоянного вложения дополнительного соц-экономического ресурса в изготовление безопасных обёрток, с использованием всего набора unsafe-языка, в котором кол-во мин велико, по-настоящему разбирающихся людей мало, виртмашина miri применима для этого юзкейса редко, и по сравнению с C++ даже нету международной стандартизации всего этого unsafe-непотребства, закреплённой несколькими независимыми реализациями.

Zig: минимизация мин до предела при сохранении практичности. Многообещающие compile-time-абстракции. По сравнению с Rust – способность коммуницировать с C API напрямую, не тратя слишком много усилия сообщества на биндинги.

iXuta
()
Последнее исправление: iXuta (всего исправлений: 4)
Ответ на: комментарий от iXuta

всего набора unsafe-языка

«всего набора» звучит страшно-страшно, в то время как unsafe позволяет дополнительно всего 5 вещей:

  • Разыменование сырого указателя
  • Вызов другой функции с unsafe
  • Доступ на чтение/запись мутабельной статической переменной
  • Имплементация unsafe trait
  • Доступ к полям union
unC0Rr ★★★★★
()
Ответ на: комментарий от WatchCat

Как это зачем? У них же больше всего и печёт от скорости компиляции, количества крейтов и прочих аспектов экосистемы раста.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Как это зачем? У них же больше всего и печёт от скорости компиляции, количества крейтов и прочих аспектов экосистемы раста.

Так это-же логично. Пока компилятор проверит-перепроверит все то, что выдвинули как плюсы раста - времени пройдет ппц. Разумеется там все проверки на переполнение. Потому как если их не будет, то… Мы получим аналог С - на замену которого так топят поклонники ржавчины :) Т.е. - банально улетучиваются все растовские преимущества.

И, по факту, выходит, что программерам на расте надо о5 самим за этим следить. А они, по лености своей, этого делать не хотят :)

DrRulez ★★★★★
()
Последнее исправление: DrRulez (всего исправлений: 2)
Ответ на: комментарий от alysnix

злые языки(дипсик) пишут, что раст в 2-5 раз медленее gcc на эквивалентном коде.

а так же в 5-10 раз безопасней C++ и рассказывает в 10-20 раз более понятные ошибки

нет ли здесь связи?!!!

larryellison
()
Ответ на: комментарий от dnb

лучше бы развивали D.

А что с ним не так? Не у всякого языка есть, как минимум, три компилятора на разных кодогенераторах.
К тому же там бюрократия не хуже, чем у стандартизаторов C++.

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от PPP328

по идее, подпихивание обновленных либо вполне себе легко автоматизируется

существенная идеологическая разница в том, что ты о ошибках несовместимости с новыми версиями узнаешь лениво - в момент компиляции проекта, который зависит от обновленной библиотеки

и дальше нужно будет срочно-кипяточно за 1 миллисекунду до релиза чинить баг несовместимости, и не дай бог ошибку надо править в самой библиотеке-зависимости, что может порушить другие проекты в релизе, о проблемах с которыми мы тоже узнаем лениво

монорепа более устойчива к отсуствию тестов

то есть страдает от такого подхода не столько CI/CD, сколько командное взаимодействие при разработке

larryellison
()
Ответ на: комментарий от PPP328

помогает каждый микроскопический кусок кода заворачивать в отдельную либу или микросервис и обмазывать тестами, которые показывают работоспособность либы в отрыве от ее использования другими продуктами

написал функцию для сложения двух чисел? Делай из нее библиотеку.

впрочем, это же не новая история, в TypeScript и NPM в мире Node.js завсегда так было.

larryellison
()

день дробрый
прочитал ветку. неужели так все плохо? (особенно со скоростью сборки) или это специально «сгущают тучи»?
p.s. сам раст не юзаю, поэтому «не в теме»

sunjob ★★★★★
()
Ответ на: комментарий от larryellison

В моём понимании, Zig ещё более ограничен в абстракциях чем Go (нет даже interface’ов); которым кстати он и вдохновлялся, кроме прочих. Но знает меру. А вот у чистой Сишки минимализм уже в самом деле неоправданный / луддистский для наших дней. Примерно как у Slackware по сравнению с Arch Linux.

Жаль только Зиг не диверсифицирован по разным независимым реализациям как чистая Сишка (не говоря уже о стандартизации), но чем-то всегда приходится жертвовать…

iXuta
()
Последнее исправление: iXuta (всего исправлений: 11)
Ответ на: комментарий от PPP328

не пишут на нём сложных вещей

а что насчет ядра линукс? ведь лезут так настырно, будто они щас там все возьмут и заменят? непонятно вот это все... (точнее, есть мысли, но они больше связаны с «человеко-грехами» :о)

sunjob ★★★★★
()
Ответ на: комментарий от PPP328

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

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)

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

peregrine ★★★★★
()
Ответ на: комментарий от PPP328

Если бы мы использовали там C++ - то компилировалось бы минут 15

при должной развязке модулей, минимизации хидеров и прекомпиляции внешних, как минимум, хидеров… ну может с++ и проиграл бы раза в два в худшем случае.

alysnix ★★★
()
Ответ на: комментарий от alysnix

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

MOPKOBKA ★★★★★
()
Ответ на: комментарий от sunjob

А нет ничего в ядре. Тот кто проталкивал свалил в закат «мне больше не интересно», никто ничего на расте не пнул туда

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

вроде как в модулях что-то проскакивало?

sunjob ★★★★★
()
Ответ на: комментарий от sunjob

Это типичный растохейтер, так что всё что он говорит про раст надо делить примерно на десять. Реально паритет, как и у всех современных языков с тяжёлой хитрожопой статической типизацией, и сильно зависит от стиля кода. Разница в разы может быть если на с++ пишешь в стиле голой сишке, а в рачте по максимуму типизационные навороты и макросы

zurg
()
Ответ на: комментарий от sunjob

да все плохо, но когда ставишь готовый бинарник - срать. мне алакрити на раст нравится… и zellij… на чем они написаны плевать, но сам язык просто незаслуженно был расхайплен, и многие повелись на пропаганду нетрадиционного программирования… тот же go, например, нужен был чтобы выбросить тормозную джаву с серваков (она была создана для интернета вещей - IoT), но написание на нем консольных утилит, которые никак не работают с сетью не имеет смысла, а rust - это в 95% случаев RIIR (REWRITE IT IN RUST), ну те он не решает каких-то глобальных проблем, а придуман только для того чтобы был

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от alysnix

Чё, правда?

Компиляцию языка, в котором модульность из коробки, умудрились сделать медленнее, чем сишка, в которой тормоза обусловлены каличностью линковки by design?

Сам не проверял, но если правду пишут, то это победа.

«Мёртвый» паскаль хохочет над всеми присутствующими.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Я себе проект на несколько сотен строк собирал от 2 до 5 минут в среднем. Но это в основном из за сотен подключаемых модулей. Каждый из них надо собрать.

LightDiver ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.