LINUX.ORG.RU
ФорумTalks

Rust developers at Google are twice as productive as C++ teams

 , ,


0

5

Google reports that Rust shines in production, to the point that its developers are twice as productive using the language compared to C++.

Чувак, кажется, побывал в ЛОРовских лолксах:

«Even six months ago, this was a really tough conversation,» he said. «I would go and I would talk to people and they would say, ‘Wait, wait you have an unsafe keyword. That means we should all write C++ until the heat death of the Universe.’»

Даже гошники заёрзали:

«When we’ve rewritten systems from Go into Rust, we’ve found that it takes about the same size team about the same amount of time to build it,» said Bergstrom. "That is, there’s no loss in productivity when moving from Go to Rust. And the interesting thing is we do see some benefits from it.

«So we see reduced memory usage in the services that we’ve moved from Go … and we see a decreased defect rate over time in those services that have been rewritten in Rust – so increasing correctness.»

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

Дискасс.

https://www.theregister.com/2024/03/31/rust_google_c/

★★★★★

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

Нет ответов на мои вопросы - нет ответов на ваши вопросы. Особенно на глупые. Кажется, это достаточно честно 😊. По-прежнему жду демонстрации простого метапрограммирования, которое отлаживается на глазок без затруднений.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86
#include <stdio.h>

#define COLOR_TABLE \
X(red, "red")       \
X(green, "green")   \
X(blue, "blue")

#define X(a, b) a,
enum COLOR {
  COLOR_TABLE
};
#undef X

#define X(a, b) b,
char *color_name[] = {
  COLOR_TABLE
};
#undef X

int main() {
  enum COLOR c = red;
  printf("c=%s\n", color_name[c]);
  return 0;
}
PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Тоже хотел пример x macro привести. Просто язык препроцессора, не позволяющий делать нечто невообразимое как в Rust, и который не выглядит как смесь m4 с кодом на Perl в этих забавных конкурсах где люди пытаются сделать исходник более запутанным.

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

#include <stdio.h>

#define COLOR_TABLE                                                            \
  X(red)                                                                       \
  X(green)                                                                     \
  X(blue)

#define X(a) a,
enum COLOR { COLOR_TABLE };
#undef X

#define X(a) #a,
char *color_name[] = {COLOR_TABLE};
#undef X

int main() {
  enum COLOR c = red;
  printf("c=%s\n", color_name[c]);
  return 0;
}

gcc так же расширяет препроцессор, но не вводит каких то страшных вещей.

#define lambda(RetType, Body) ({ RetType RetVal Body RetVal; })
MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 3)
Ответ на: комментарий от MOPKOBKA

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

Я в курсе, я скопировал первый попавшийся макроблок из гугла

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

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

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

но его невозможно применить

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

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

вот не надо грязи, могу на индексах не только в массиве, но и в мапах и в их комбинациях, и индексы для меня не одни только чиселки, а если есть возможность заюзать не перевычисляя объект возьму … ссылки, а на самый крайняк таки возьму указатель, но только если в этом будет ну хоть какой-нибудь смысл, который ты, кстати, так и не смог показать хоть с эффектами хоть без https://quick-bench.com/q/3kiuaV8e7Ju9u3xWq1EgAwc8ViM

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

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

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

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

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

Вот был бы НЕ тьюринг полный, можно было бы обойтись и одним RAII с Box, а так нельзя.

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

как вариант воспользоваться счетчиком ссылок.

ну и хорошо же, как будто что-то плохое, подходит - нужно использовать

Вот был бы НЕ тьюринг полный, можно было бы обойтись и одним RAII с Box

Ну и зачем он такой был бы нужен. Имелось ввиду вообще (безотносительно к управлению памятью), в ответ на претензии вида: на вашем расте то-то то-то без ансейфа не написать, или быстрый код без него же

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

в ответ на претензии вида: на вашем расте то-то то-то без ансейфа не написать

Ну так не написать же. Покажите doubly linked без ансейфа. Или опять мантра «списки и деревья придумали дебилы, везде суй массив!»?

PPP328 ★★★★★
()

Это пока там поддержка не началась…

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

как вариант воспользоваться счетчиком ссылок.

ну и хорошо же, как будто что-то плохое, подходит - нужно использовать

Теперь, когда мы выяснили что без управления памятью не обойтись, вернемся к первоначальному комментарию. Правильная работа с памятью связана либо с большой сложностью, либо будет менее эффективной чем хороший GC. Второй вариант, это когда все обмазывается счетчиками ссылок. Для текстур счетчик ссылок, это тоже так себе вариант, лучше кеш реализовать, а там будут уже свои сложности. Если нету желания заниматься ручной оптимизацией, или нету навыков, то лучше взять язык с GC, особенно когда задачи идеально подходят для таких языков.

в ответ на претензии вида: на вашем расте то-то то-то без ансейфа не написать

У меня таких претензий не было.

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

Прошу прощения с запоздалым ответом :).
Довольно замысловатый пример, притом что примитивный, потому что в расте задача решаемая этой развесистой сишной макросней решается добавлением #[derive(Debug)] перед объявлением перечисления. Не один-в-один, конечно, ну так кому шашечки, кому – ехать. Полагаю, в более сложных случаях чайник вскипит, пока что-то готовое получится. Ничего не скажешь – очень просто для отладки и написания 🙃. Я уж не говорю, что в приличном обществе подсвечником ударят, если при разговоре про метапрограммирование вы сишный препроцессор предъявите .

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

Просто язык препроцессора, не позволяющий делать нечто невообразимое как в Rust

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

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

Нет, мантра – «покажите doubly linked с ансейфом и докажите, что это ужас какой небезопасный код» 😄.

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

а не любого текста, как в сишечном препроцессоре?

В сишном препроцессоре тоже есть ограничения. Не такие конечно, но там не просто текст.

Невообразимым и не попахивает, даже близко

Ты синтаксис видел? Это самое отстойное что появлялось в последние десятилетия.

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

X Macro еще решает проблему рефлексии, им можно описать поля в структуре, и элементы другой структуры, которая будет хранить информацию об этих самых полях, это используется например в движке quake для сериализации по сети.

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

Ты синтаксис видел? Это самое отстойное что появлялось в последние десятилетия.

Там нет особого синтаксиса. Наворотить можно ад, но это не к синтаксису вопросы.

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

Там нет особого синтаксиса

Возможно в этом и проблема? Что за набор символов?

Версия С

#include <stdio.h>

int main() {
   printf("Hello, World!");
   return 0;
}
Версия Rust
#@ %stdio^h$
` main%$ &
   \!("Hello, World!");
   -: 0;
&

MOPKOBKA ★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)