Тема |
Описание |
Доп. |
|---|---|---|
В резюме следует донести информацию:
STAR — это аббревиатура от четырех ключевых элементов для подготовки к собеседованию и формулировки опыта в резюме:
Блок: О себе:
|
||
Вопросы для Rust разработчика Rust
Алгоритмы и структуры данных
Многозадачность
Linux
Процессоры
Сеть
Базы данных
Трансляторы
Криптография
|
||
Описание языка Rustбезопасность, скорость и параллелизм |
Rust — статически типизированный это системный язык программирования с безопасностью на уровне типов (Null Safety, Borrow checker, Send и Sync безопасная работа с потоками), управлением памятью без сборщика мусора, нулевыми накладными расходами на абстракции, поддержкой многопоточности без гонок данных и современными функциональными возможностями. статически типизированный - Типы переменных и функций определяются во время компиляции, а не в рантайме. системного уровня - Позволяет работать с низкоуровневыми деталями, такими как память через указатели ( LLVMLLVM (Low Level Virtual Machine) — это инфраструктура компилятора, на которой основан компилятор Rust. Rust использует LLVM для преобразования своего промежуточного представления (IR) в машинный код, что позволяет добиться высокой производительности и портативности. Проект Rust-GCC предоставляет возможность компиляции Rust-кода с использованием GCC. Это позволяет разработчикам использовать преимущества GCC в тех случаях, когда LLVM не подходит или недоступен. Использование GCC может быть выгодно для проектов, которые уже активно используют этот компилятор и его инструменты. Таким образом, Rust-GCC предоставляет альтернативный способ компиляции Rust-кода, что увеличивает гибкость и возможности для разработчиков. При сборке программы Rust компилятор Rust (Rustc) создает байт-код Rust и передает его другому компилятору, называемому LLVM, для создания машинного кода (LLVM также используется такими языками, как Swift и Scala, и преобразует байт-код, созданный компилятором языка, в машинный код для запуска операционной системы). Это означает, что Rust можно скомпилировать в любой операционной системе, поддерживаемой LLVM. парадигма функционального стиля - Поддерживает концепции функционального программирования: функции как значения, map/filter/reduce, замыкания, иммутабельность по умолчанию. жаргон функционального программирования в Rust примеры функциональной парадигмы
Функции высшего порядка - это функции, которые принимают другие функции в качестве аргументов или возвращают функции в качестве результата.
Рекурсия - это процесс, при котором функция вызывает саму себя.
Карринг (англ. currying) — это приём в функциональном программировании, при котором функция с несколькими аргументами преобразуется в последовательность функций, каждая из которых принимает только один аргумент и возвращает новую функцию, ожидающую следующий аргумент.
парадигма процедурного (императивного) стиля - Поддерживает традиционные конструкции императивных языков (циклы, условия, переменные, изменяемое состояние). 1. Безопасный по памяти (memory safe) без сборщика мусора Rust гарантирует отсутствие ошибок управления памятью (use-after-free, double free, data race) на этапе компиляции без GC. Это достигается через систему владения (ownership) и заимствований (borrowing). Указатели можно использовать только в небезопасном коде (unsafe), в безопасном коде применяются исключительно ссылки на гарантированно существующие объекты. 2. Zero-cost abstractions Rust даёт высокоуровневые конструкции (итераторы, замыкания, async) без потерь производительности по сравнению с ручным кодом на C. Всё инлайнится и оптимизируется. Генерируется машинный код без лишних прослоек. Отсутствует проверка доступа к недействительным данным invalid data access во время выполнения, так как это делается один раз в момент компиляции. 3. Concurrency без гонок данных Rust гарантирует потокобезопасность на уровне типов: Data race невозможен, потому что borrowing проверяется компилятором. Параллелизм безопасен без runtime-оверхода. Rust хорошо подходит для FFI с C
Три основных инструмента command_line
|
|
1. Системная разработка (System Programming)Rust изначально задумывался как замена C/C++ для низкоуровневых задач, где важны производительность и безопасность. Что делают на Rust в этой области:
Почему Rust здесь подходит:
2. Прикладное ПО (Desktop Applications)Rust всё чаще используется для графических и CLI-приложений Что делают на Rust в этой области:
Примеры:
3. Backend-разработкаRust стал популярным для высоконагруженных сервисов и микросервисов, где важны: Что делают на Rust в этой области:
Примеры:
4. Blockchain и криптоиндустрияRust стал стандартом де-факто в блокчейн-разработке: Что делают на Rust в этой области:
Примеры:
5. GameDevДвижки на Rust (Bevy, Amethyst). 6. Machine Learning / Data ScienceПока не доминирует, но есть проекты (Burn, Polars). 7. WebAssemblyRust идеально подходит для WASM (игры, фронтенд-библиотеки, расширения браузеров). Rust – один из лучших языков для компиляции в WebAssembly. Wasm позволяет запускать код с производительностью, близкой к нативной, прямо в веб-браузере (или на сервере с Wasm-рантаймом). Это позволяет переносить сложные вычисления или целые приложения в веб без необходимости писать их на JavaScript:
|
||
Почему Rust? Удобная экосистема - единый компилятор от разработчиков Rust со встроенным менеджером и сборщиком пакетов (cargo), системой тестов и генератором документации. Отличная документация, туториалы, библиотеки, сообщество. Каких ошибок помогает избежать Rust предотвращает целый класс ошибок, которые в других системных и даже высокоуровневых языках возникают часто: 1. Memory Safety (Ошибки управления памятью)В C/C++:
В Rust:
2. Data Race в многопоточности (гонки данных)В C++/Go/Java:
В Rust:
3. Null / NPE (Null Pointer Exception)В Java/C++:
В Rust:
4. Dangling referencesВ C++:
В Rust:
5. Типовые ошибки и несоответствие контрактов
6. Iterator invalidation (Недействительность итератора)Недействительность итератора - проблема, вызванная чем-то, что повторяется после изменения в середине В C++:
В Rust:
7. Безопасность FFI
8. Dangling thread handlesВ других языках можно "забыть"
9. Строковые ошибки
10. Случайные runtime ошибки GC
Итог: Rust устраняет
|
||
Трудные инструменты написания процедурных макросов Нет Типов высшего порядка HKT Нет Врядик дженериков (для функций с произвольным количеством аргументов) Нет Type alias imp trait (т.е. Existential Types) (экзистенциальные типы похожи на шаблоны, а именно тем, что заранее конкретный тип объекта не определен. Важнее понять главное отличие экзистенциальных типов от шаблонов:
Нет Ревевантных (линейных) типов Нет возможностей Erlang
Нет возможностей Lisp Rust-макросы работают на синтаксическом уровне AST, но не могут менять семантику языка или определять новые правила компиляции. Макросы ограничены грамматикой Rust. Макросы разворачиваются до проверки типов, но компилятор проверяет итоговый код. Макросы в Lisp — это часть языка, работающая на уровне исходного кода в виде данных.
В Lisp Можно:
|
||
|
||
|
||
install, remove, show target add component |
|
|
|
||
Nightly |
Проверка установленных toolchain в системе:
Или создать в проекте файл rust-toolchain.toml:
Можно еще точнее, установить конкретную версию, чтобы сборка не ломалась из-за обновлений nightly:
Файл rust-toolchain.toml:
|
|