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)
Ответ на: комментарий от LightDiver

Каждый из них надо собрать.

Потому что в rust не завезли shared libraries и каждый бинарь тащит свою неповторимую версию всего на свете.

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

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

Там сериализация всего на свете в многомегабайтный жсон происходит при каждой компиляции, после чего этот {} высер долго и нудно парсится.

Потому что кто-то решил, что иметь бинарный объектник - недостаточно молодёжно

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

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

«тяжелой статической типизации» не существует. турбопаскаль какой-нить, типизированный по самые помидоры,и почище чем с++, летал со скоростью света.

Потому что был так спроектирован.

Современные компиляторы могут медлить из-за:

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

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

Изьянов самого языка - навроде хидеров в си. которые есть просто текстовые подстановки и компилируются по новой всегда(если не сделана прекомпиляция заголовков).

Шаблонизации и ее неумеренного и неправильного использования, плюс слишком больших файлах шаблонов. и это основной тормоз си++.

Глубокая оптимизация, что заметно медлит компиляцию, но это не столь страшно, поскольку релиз редок, а основная разработка идет в режиме отладочной оптимизации максимум или вообще без нее. То есть оптимизации всерьез и нет.

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

глянул я исхожники rust, бардак в исходниках полнейший.

enep ★★★★★
()

Я не погромист, я собираю пакеты. Меня не устраивает скорость сборки из-за кучи зависимостей.

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

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

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

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

Потому что в rust не завезли shared libraries и каждый бинарь тащит свою неповторимую версию всего на свете.

я в шоке, и это современный язык

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

И выкатывать фикс безопасности сразу для всех, а не пытаться дергать авторов, которые могли уже от старости умереть (для примера - openssl и их фиксы CVE с версиями v,w,x, etc)

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

Там тоже можно их резко уменьшить опцией?

–Xs

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

Внимание! Вкидываю новый мем: «заржавейка».

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

А надо было как у Высоцкого:

"Я скажу, что всегда на футболы хожу

На Спартак и слова восхищенья о брате…"

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

меня побагодарили за участие и в дальнейший опрос почему-то не пустили

Гы, лол. Да, если выбрать этот вариант (причём даже не нажимая next), то финита-ля-комедия. Без удаления кук уже никуда не пройти.

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

Это и есть Zig? Ну тогда это как в анекдоте про Запорожский автомобильный завод, который решил выпустить клон автомобиля Порше. Заявлено, что он будет сочетать в себе цену Порше и качество «Запорожца». Модель будет носить имя «Запоршивец» :)

Это ж непонятнее, чем Си в его худших проявлениях. Вот эта точка перед фигурными скобками доставляет особенно. Не, Раст-то отказать, а это чудо отказать с особым цинизмом!

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

Плюсую. Это дичь полнейшая, если честно

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

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

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

Ну чо тут спорить, да и трудно мне. Я давно пишу на Си, как на основном языке, поэтому просто привык, да и глаз замылился. Наверное, есть язык с более читаемым синтаксисом, типа того же Фортрана. Проблема похожести синтаксиса, как мне кажется, не в том что кто-то будет пальцем тыкать, мол «он такой же, только голый» ((с) бандерлоги), а в том, что пользователи языка, имея Си в голове, будут использовать новый Си-подобный по синтаксису язык неправильно.

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

Вот эта точка перед фигурными скобками доставляет особенно.

Анонимная структура по месту и назначению. Пушка вообще.

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

Там сериализация всего на свете в многомегабайтный жсон происходит при каждой компиляции

Они конченные?

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

спроси у дипсика, он знает все.

тут вопрос - вообще никогда не инлайнил, или создал например неинлайновый экземпляр, но еще и инлайнил.

alysnix ★★★
()

Зачем эти опросы? Собирали бы телеметрию и всё. Как это принято в отрасли. Опрос всегда даст ответ через призму личного восприятия конкретного разработчика. Т.е. искажённые данные.

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

Вроде бы монорепа и не плохо.

Но устаёшь воевать за каждый ченьдж со сборкой и тестами во всей монорепе.

При том что бывают промежуточные несобираемые состояния монорепы.

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

Ну у нас правило простое - master должен собираться. А что ты делаешь на своей ветке- твои приколы, главное чтобы на ПР бамбу смогло это собрать

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

Ну тут только конструкция msg.* не очевидна без контекста.

А в остальном всё понятно - объявляется типизированная константа типа «массив из u8 размера msg.len».

wandrien ★★★
()
Ответ на: комментарий от wandrien
const arch_infos = [_]ArchInfo{
    .{
        .table = .{
            .name = "x64",
            .enum_name = "X64",
            .file_path = "arch/x86/entry/syscalls/syscall_64.tbl",
            .process_file = &processTableBasedArch,
            .filters = .{
                // The x32 abi syscalls are always at the end.
                .abiCheckParams = .{ .abi = "x32", .flow = .@"break" },
                .fixedName = &fixedName,
                .isReservedNameOld = null,
            },
            .header = null,
            .extra_values = null,
            .additional_enum = null,
        },
    },

Нравится?

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

Ну после JS не пугает. Там такие фрагменты обычное дело, только синтаксис в мелких деталях отличается.

А что конкретно не нравится именно тебе? Вопрос то был не в том, чтобы показать больше кринжа, а твоё мнение послушать.

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

У них там JSON головного мозга что-ли? :)

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

Что-то читаем справа налево, что-то слева направо.

Здесь вроде всё по порядку читается. Насколько я понимаю, большинство «убийц Си» пытаются в той или иной форме имплементировать правила чтения Паскаля (и вроде бы еще Алгола), когда синтаксические формы в строке читаются линейно.

В Си типы читаются «изнутри наружу», что контр-интуитивно, но мы просто привыкли для простых кейсов. А для сложных приходится мозги напрягать.

У сишечки уродский синтаксис на самом деле.

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

Ну после JS не пугает.

Вот это как раз и сильно настораживает. Людей с JS/JSON головного мозга нельзя подпускать к разработке строго типизованных языков программирования.

gns ★★★★★
()

сор­ти­руя ре­грес­сии про­из­во­ди­тель­но­сти

Сортируем регрессии, проводим опросы по производительности. Окей. Ускоряем компиляцию? Не, не слышали.

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

Это ответ в духе «у вас там негров линчуют». У Си своих грехов и неоднозначностей синтаксиса много. Какой-нибудь typedef указателя на функцию, возвращающий массив указателей на функции действительно может мозг сломать. Но часто ли такое пишут? Мне вот за 30 лет ни разу не пришлось.

А тут пытаются не упростить сложное, а усложнить простое. В результате объясняем неизвестное непонятным.

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

А ту пытаются не упростить сложное, а усложнить простое. В результате объясняем неизвестное непонятным.

Если мне без чтения доки по Zig строка понятна, то в чем именно сложность?

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

Ну в порядке объявления. Наверное, объявление типа и длины переменной после ее имени и выглядит более логичным, нежели чем сишное

const u8  non_null_terminated_msg[msg.len];

NB! Если не считать, что за VLA в Си вообще убивать надо на месте.  

Сложность в точке перед скобками, в точке перед звездочкой. Семантика этой точки и скобок не ясна от слова совсем.

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

Зачем? На Си я бы вовсе писал бы это по другому. В Си кортежей нет.

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

Сложность в точке перед скобками

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

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

в точке перед звездочкой

Это вот непонятно, да. Но в любом языке есть что-то новое в синтаксисе.

Я вот как увидел оператор |> в каком-то из новых ЯП, так мне очень понравилась эта идея.

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

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

Это уже было. APL называется.

Я ж не говорю, что Zig плох. Zig непонятен с первого прочтения. Вот Go — понятен. Rust — ну вроде понятен в каждой строе, но потом начинается: а какая имплементация сегодня у этого интерфейса? Поскольку я не вижу за Zig killer-фичи и не вижу сходу класса задач, для которых zig «как родной» (что есть у того же Go с его Го-рутинами), то и непонятно, зачем эти «упражнения в синтаксисе».

Ну да, ну явно объявили аллокаторы. Но вот не понятно, эти аллокаторы глобальны для всей программы, или на каждый тип данных можно объявлять свои? И чего это стоит по расходу памяти? И если аллокатор создается тупо в начале программы, то мне указатель на него что, глобальной переменной делать или тащить лишним параметром через все функции? И чем это тогда лучше, чем пачка маллоков в мейне?

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

Семантика этой точки и скобок не ясна от слова совсем.

Повторю, точка и фигурные скобки – создание анонимной структуры.

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

Как придет в голову идея вроде длл-хотфикса, простой виндовз или юникс-утилитки, задачи под WebAssembly или EFI, то можно попробовать этот новый фановый инструмент.

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

Ненависть я испытываю только к Виндовзз и Биллу Гейтсу лично :) А остальными инструментами предпочитаю пользоваться по назначению, удобству и потребности. Поэтому, если понадобиться — ну будем посмотреть, зачем понадобилось. :)

Дальше а чего оно на алиасинге константные данные портит, на финальной стадии да когда они из релиза в релиз прекратят апи ломать…

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

Just for fun лучше писать на чем-нибудь из другой парадигмы. Вон хоть на Хаскелле.

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

И чем это тогда лучше, чем пачка маллоков в мейне?

Твой аллокатор должен реализовать четыре функции: alloc, realloc-мамой-клянусь-без-аллокаций, realloc-классический и free.

Предположим, тебе надо распарсить строку JSON в DOM. Ты создаешь аллокатор как арену, и где free() не выполняет никаких действий. Передаешь этот аллокатор в свою функцию парсинга (если парсинг рекурсивный, то делаешь структуру контекста с аллокатором и DOM-аккумулятором). Как с полученным DOM поработал, так просто грохаешь арену. Сокращает уйму процессорного времени.

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

Я согласен с этим, вопросов нет. Только где этот аллокатор создавать? Если сразу в мейне только один раз, то ссылку на аллокатор я должен тащить через всю программу.

И да, если стоит однократная задача парсить JSON в DOM, то Си-подобные языки с ручным управлением памятью — явно не лучший выбор. А если такая задача возникает каждый раз (при обработке REST-запросов, например), то у вас явно что-то с архитектурой. Или надо делать отдельное приложение под это, и тогда пофигу, что у него с потреблением памяти, или менять формат передачи данных.

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