Сразу скажу, что я не фанат Rust, особенно внутри супер низкоуровневых систем. Я лично верю, что много кода будет unsafe, когда дело доходит до железок и тогда раст теряет всю свою привлекательность. В целом я пописал на нём 3 недельки, и мне он кажется достаточно лохматым, медленнее по компиляции, чем плюсы, местами перегруженным и у меня пропадало ощущение, что я контролирую перформанс как это происходит с C и C++. Конечно, его адаптируют те, кому безопасность кажется топ 1 фактором их приложения, где много происходит асинхронной/неавтоматической работы с памятью. Стоит отметить, что я также себя не считаю фанатом/адептом C++, я пишу на нём постольку поскольку и вообще считаю, что срачи вокруг языков программирования переоценены: происходит слишком много дискуссий, которые не развивают индустрию. Я ценю скорость, контроль, тулинг, структурированность, вкус и свойства для изменения/миграций. Из этих факторов Rust пока менее привлекателен для меня, чем плюсы.
В ядро произошла ещё одна попытка впилить Rust и закончилась тем, что Линус в целом ок принять код, если они как минимум исправят все вызовы аллокации памяти, которые могут закончиться panic
https://lkml.org/lkml/2021/4/14/1089
И тут у меня, конечно, вопросы к разработчикам Rust, которые пытаются это влить в ядро. C++ был отвергнут именно по этой же причине: Линус имел сильную позицию, что оператор new, который может кидать исключения, сломан. И если отключить исключения, то начнутся проблемы с тем, что если не хватает памяти, то вызывается std::terminate. Вы точно не хотите операционную систему, которая падает в панику, если ей вдруг не хватило памяти для аллокации (например, даже при копировании строчки или вектора). Из-за этого нельзя пользоваться почти никакими контейнерами, исключениями и остаются только классы, методы и <algorithm>. В целом я согласен, что этого недостаточно, чтобы оправдать использование нового языка программирования
В Rust есть try_new как и в C++ есть new (std::nothrow), но аннотировать все стандартные контейнеры, например, try_reserve и тд задача, которую разработчики Rust должны решить. Хотят ли они реально в ядро и готовы изменить тьму функций или всё таки нет.
Вообще, если говорить про вкус, то я со временем больше и больше это ценю и отличаю на собесах опытных людей от тех, кто просто умеет писать алгоритмы. Если кто-то умеет писать go и может показать (пусть даже невербально) красоту за решениями и конструкциями, то это привлекает меня как искусство что-нибудь сделать с этой технологией. Я потихоньку подбираюсь к ощущению, что я могу рассказать много хороших историй из большинства кода по C++, и мне начинает нравиться мой вкус только спустя 3 лет промышленной разработки на нём (но, наверное, весьма экстремальной)
Часто в последнее время возникают дискуссии про вкус. Хочется собрать то, что на меня влияло помимо огромных миграций в огромных репозиториях.
Например, Линус по отметке рассказывает про то, что хорошие решения требуют мало дополнительных случаев в случае написания списка. Я очень уважаю Линуса за его упрямость и возможность говорить "нет", каким бы он ни был в коммуникациях.
https://www.youtube.com/watch?v=qrYt4bbEUrU&t=860s
LZ4 содержит огромное количество трюков по тому, чтобы по праву считаться одним из самых быстрых алгоритмов сжатия. Если хотите писать код, где CPU перф важен, смотреть обязательно
https://github.com/lz4/lz4/blob/dev/lib/lz4.c#L463
DOOM для меня является одним из самых впечатляющих кусков C++ до C++11
https://github.com/id-Software/DOOM-3
Шахматный движок Stockfish является одним из более верхнеуровневых красивых технологий по перформансу
https://github.com/official-stockfish/Stockfish
Google Abseil показывает как достаточно сухо, академично писать на C++, чтобы было внятно читаемо тем, кто с C++ знаком не сильно. Типичный стиль гугла
https://github.com/abseil/abseil-cpp
Hyperscan про то, как собрать теоретические алгоритмы и SIMD вместе и получить результаты поиска в разы лучше, чем все остальные в мире за последние 30 лет
https://github.com/intel/hyperscan
В ядро произошла ещё одна попытка впилить Rust и закончилась тем, что Линус в целом ок принять код, если они как минимум исправят все вызовы аллокации памяти, которые могут закончиться panic
https://lkml.org/lkml/2021/4/14/1089
И тут у меня, конечно, вопросы к разработчикам Rust, которые пытаются это влить в ядро. C++ был отвергнут именно по этой же причине: Линус имел сильную позицию, что оператор new, который может кидать исключения, сломан. И если отключить исключения, то начнутся проблемы с тем, что если не хватает памяти, то вызывается std::terminate. Вы точно не хотите операционную систему, которая падает в панику, если ей вдруг не хватило памяти для аллокации (например, даже при копировании строчки или вектора). Из-за этого нельзя пользоваться почти никакими контейнерами, исключениями и остаются только классы, методы и <algorithm>. В целом я согласен, что этого недостаточно, чтобы оправдать использование нового языка программирования
В Rust есть try_new как и в C++ есть new (std::nothrow), но аннотировать все стандартные контейнеры, например, try_reserve и тд задача, которую разработчики Rust должны решить. Хотят ли они реально в ядро и готовы изменить тьму функций или всё таки нет.
Вообще, если говорить про вкус, то я со временем больше и больше это ценю и отличаю на собесах опытных людей от тех, кто просто умеет писать алгоритмы. Если кто-то умеет писать go и может показать (пусть даже невербально) красоту за решениями и конструкциями, то это привлекает меня как искусство что-нибудь сделать с этой технологией. Я потихоньку подбираюсь к ощущению, что я могу рассказать много хороших историй из большинства кода по C++, и мне начинает нравиться мой вкус только спустя 3 лет промышленной разработки на нём (но, наверное, весьма экстремальной)
Часто в последнее время возникают дискуссии про вкус. Хочется собрать то, что на меня влияло помимо огромных миграций в огромных репозиториях.
Например, Линус по отметке рассказывает про то, что хорошие решения требуют мало дополнительных случаев в случае написания списка. Я очень уважаю Линуса за его упрямость и возможность говорить "нет", каким бы он ни был в коммуникациях.
https://www.youtube.com/watch?v=qrYt4bbEUrU&t=860s
LZ4 содержит огромное количество трюков по тому, чтобы по праву считаться одним из самых быстрых алгоритмов сжатия. Если хотите писать код, где CPU перф важен, смотреть обязательно
https://github.com/lz4/lz4/blob/dev/lib/lz4.c#L463
DOOM для меня является одним из самых впечатляющих кусков C++ до C++11
https://github.com/id-Software/DOOM-3
Шахматный движок Stockfish является одним из более верхнеуровневых красивых технологий по перформансу
https://github.com/official-stockfish/Stockfish
Google Abseil показывает как достаточно сухо, академично писать на C++, чтобы было внятно читаемо тем, кто с C++ знаком не сильно. Типичный стиль гугла
https://github.com/abseil/abseil-cpp
Hyperscan про то, как собрать теоретические алгоритмы и SIMD вместе и получить результаты поиска в разы лучше, чем все остальные в мире за последние 30 лет
https://github.com/intel/hyperscan