Эта статья была впервые опубликована вОфициальный сайт Луожу, добро пожаловать, перепечатка, пожалуйста, свяжитесь с автором в WeChat для авторизации.
предисловие
Друзья, которые недавно следили за Луожу, знают, что я стал участником Deno. Но стыдно сказать, мой пр не имеет никакого отношения к логике кода. Я просто писал, чтобы исследовать применение Deno's Github Action.Дин, проверьте исходный код Deno GitHub Action.В процессе написания этой статьи я случайно обнаружил ошибочность и неразумность Deno CI. Посоветовавшись с мнением большого босса Миду, я представил свой пр. Чтобы иметь возможность участвовать в разработке ядра Deno, после нескольких дней идеологической борьбы решил изучить Rust.
Если вы спросите меня, почему я начал изучать Deno, Go и Rust, не будучи опытным в Node, то я действительно не могу ответить вам прямо, тем более что я все еще фронтенд. Что я могу вам сказать, так это то, что если вы не начали работу с Deno и Go раньше, разработайте CLI для нашей команды.tpcа такжеtuya-panel-demoруководство не может придумать хороший план.
Кроме того, кто из специалистов по информатике не изучал C/C++, Java, операционные системы, структуры данных и принципы работы компьютера? Хоть я и не очень хорошо выучил, чуть не забыл, но этого достаточно для самостоятельного изучения любого языка программирования. существуеткрасивыйПо предложению , я также возьму эти основные теории и рассмотрю их. Год Быка также надеется, что все будут смотреть на карьеру программиста непредвзято и не тревожиться искусственным беспокойством.
Почему выбирают Руст?
Rust — это язык программирования, который помогает разрабатывать эффективное и надежное программное обеспечение. По сравнению с C/C++, Rust стремится предоставить мощные инженерные возможности и в то же время хороший опыт разработки, предоставляя разработчикам контроль над базовыми возможностями (такими как операции с памятью), избегая при этом многих проблем, связанных с традиционными языками.
высокая производительность
Rust невероятно быстр и чрезвычайно эффективно использует память. Без среды выполнения и без сборки мусора он может обрабатывать особо требовательные к производительности сервисы, работать на встроенных устройствах и легко интегрироваться с другими языками.
надежность
Богатая система типов и модель владения Rust гарантируют безопасность памяти и потокобезопасность, позволяя исключить все виды ошибок во время компиляции.
производительные силы
У Rust отличная документация, удобный компилятор и четкие сообщения об ошибках, а также интеграция с лучшими в своем классе инструментами — менеджерами пакетов и инструментами сборки, поддержкой мультиредактора для автодополнения и проверки типов, автоматического форматирования кода и т. д.
Ситуация с посадкой ржавчины
Сотни компаний по всему миру используют Rust для быстрой, кроссплатформенной и малозатратной работы. Многие известные и популярные программы, такие как Firefox, Dropbox и Cloudflare, используют Rust. От стартапов до крупных предприятий, от встроенных устройств до масштабируемых веб-сервисов, Rust идеально подходит.
Dropbox
Несколько модулей основной системы хранения файлов Dropbox были написаны на Rust, так как это было частью более крупного проекта, направленного на повышение эффективности центра обработки данных. В настоящее время он используется во всех системах хранения Dropbox, обслуживая более 500 миллионов пользователей.
Yelp
Yelp разработал фреймворк A/B-тестирования в реальном времени с использованием Rust. Он широко используется во всех веб-страницах и приложениях Yelp, и был выбран Rust, потому что он такой же быстрый, как C (низкая стоимость запуска), и более безопасный, чем C (простой в обслуживании).
Дено и Руст
Сначала Deno был Golang + TypeScript, но позже, из-за проблем с GC в Golang и V8, Райан приложил много усилий, чтобы заменить весь golang на Rust без GC. Чжиху видел одинотвечатьЭто имеет смысл:
- Go имеет свой собственный сборщик мусора, V8 имеет свой собственный сборщик мусора, какое снижение производительности вызывает двойной сборщик мусора и сложная среда выполнения.
- Rust обладает такими свойствами, как высокая производительность и безопасность памяти, что делает его очень подходящим для написания таких программ с высокими требованиями к производительности.
GC (Garbage Collector), Rust и другие не имеют механизма сборки мусора, а вместо этого используют механизм, называемый владением. Поскольку это вводная глава, она не будет здесь расширяться.
Установить ржавчину
В отличие от других, Rust официально предоставляет инструмент командной строки rustup для загрузки, установки и управления различными дистрибутивами Rust и сопутствующими им наборами инструментов.
Примечание. Стабильность Rust гарантирует обратную совместимость всех дистрибутивов.
Установить ржавчину:
curl https://sh.rustup.rs -sSf | sh
выход:
$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer
Welcome to Rust!
This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.
Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:
/Users/luozhu/.rustup
This can be modified with the RUSTUP_HOME environment variable.
The Cargo home directory located at:
/Users/luozhu/.cargo
This can be modified with the CARGO_HOME environment variable.
The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:
/Users/luozhu/.cargo/bin
This path will then be added to your PATH environment variable by
modifying the profile files located at:
/Users/luozhu/.profile
/Users/luozhu/.zshenv
You can uninstall at any time with rustup self uninstall and
these changes will be reverted.
Current installation options:
default host triple: x86_64-apple-darwin
default toolchain: stable (default)
profile: default
modify PATH variable: yes
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
Приведенную выше информацию можно резюмировать следующим образом:
- Домашняя директория Rustup:
~/.rustup
,Можно использоватьRUSTUP_HOME
модификация переменной окружения - Домашний каталог грузов:
~/.cargo
,Можно использоватьCARGO_HOME
модификация переменной окружения - cargo, rustc, rustup и другие команды установлены в
~/.cargo/bin
- Переменная окружения PATH помещается в
~/.zshenv
in (см. этот метод впервые)
Здесь давайте выберем метод установки, Поскольку это запись, мы напрямую выбираем установку по умолчанию и вводим следующее:
info: profile set to 'default'
info: default host triple is x86_64-apple-darwin
info: syncing channel updates for 'stable-x86_64-apple-darwin'
info: latest update on 2021-02-11, rust version 1.50.0 (cb75ad5db 2021-02-10)
info: downloading component 'cargo'
4.3 MiB / 4.3 MiB (100 %) 3.1 MiB/s in 1s ETA: 0s
info: downloading component 'clippy'
info: downloading component 'rust-docs'
14.7 MiB / 14.7 MiB (100 %) 2.2 MiB/s in 6s ETA: 0s
info: downloading component 'rust-std'
23.3 MiB / 23.3 MiB (100 %) 2.2 MiB/s in 11s ETA: 0s
info: downloading component 'rustc'
61.0 MiB / 61.0 MiB (100 %) 2.3 MiB/s in 26s ETA: 0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: using up to 500.0 MiB of RAM to unpack components
info: installing component 'clippy'
info: installing component 'rust-docs'
14.7 MiB / 14.7 MiB (100 %) 5.8 MiB/s in 1s ETA: 0s
info: installing component 'rust-std'
23.3 MiB / 23.3 MiB (100 %) 13.0 MiB/s in 3s ETA: 0s
info: installing component 'rustc'
61.0 MiB / 61.0 MiB (100 %) 13.3 MiB/s in 4s ETA: 0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-apple-darwin'
stable-x86_64-apple-darwin installed - rustc 1.50.0 (cb75ad5db 2021-02-10)
Rust is installed now. Great!
To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done
automatically.
To configure your current shell, run:
source $HOME/.cargo/env
Вышеупомянутый процесс - это процесс установки rust и его набора инструментов и автоматической настройки среды.Вы можете войти в соответствии с подсказкамиsource $HOME/.cargo/env
Пусть конфигурация вступит в силу немедленно, или вы можете снова открыть командную строку, чтобы конфигурация вступила в силу.
Убедитесь, что установка прошла успешно:
rustc --version
Если все пойдет хорошо, вы увидитеrustc x.y.z (版本的哈希码 yyyy-mm-dd)
форматированный вывод.
обновить:
rustup update
Удалить:
rustup self uninstall
локальная документация
Во время выполнения инсталляционного инструмента локально будет сгенерирован автономный документ.Вы можете использовать командуrustup doc
Откройте его в своем браузере. Но я не думаю, что он широко используется.Мы устанавливаем плагин Rust в vscode, чтобы иметь функцию подсказок документа.
Hello,World!
vscode
Установите плагин Rust:
rust-analyzer тоже хорошая альтернатива, но еще не идеал!
После успешной установки появится"rust-client.rustupPath": "$HOME/.cargo/bin/rustup"
добавить вsetting.json
чинитьcouldn't start client Rust Language Server
Для отладки ПО установите плагин CodeLLDB:
ящики используются вспомогательными разработчикамиCargo.toml
Плагины для управления зависимостями
Поскольку инструмент управления зависимостями Rust Cargo использует TOML в качестве файла конфигурации, его необходимо загрузитьBetter TOML
Плагин поддерживает синтаксис:
Последняя настройка — автоматическое форматирование при сохранении:
// settings.json
{
"[rust]": {
"editor.formatOnSave": true
}
}
первая строка кода
Примечание. Файлы Rust всегда начинаются с
rs
конец. Если в имени используется несколько слов, их можно разделить символом подчеркивания. Например, вам лучше использоватьhello_world.rs
как имя файла вместо helloworld.rs
создать новыйmain.rs
и напишите следующий код:
fn main() {
println!("Hello,World!");
}
- использовать ключевые слова
fn
определяет функцию. (Идти(func
), JS (function
), математика(f
)), похоже, Rust экономит на ткани. - Основная функция особенная: когда вы запускаете исполняемую программу на Rust, весь код запустится с этой входной функции (то же самое касается Go)
- По соглашению, Rust рекомендует размещать открывающую фигурную скобку на той же строке, что и объявление функции, разделяя их пробелами.
- Мы вызываем метод с именем
println!
Макрос: если мы вызовем обычную функцию, то удалим!
символическийprintln
помечать. - Большая часть кода Rust заканчивается точкой с запятой.
Так называемый макрос (Macro), представляет собой заголовок пакетной обработки. Макрос в информатике — это абстракция, которая заменяет определенные шаблоны текста в соответствии с набором предопределенных правил. Интерпретатор или компилятор выполняет эту замену шаблона автоматически, когда встречает макрос. —— Можно просто понимать как глобально определенные функции, переменные и т. д.
Затем введите в командной строкеrustc main.rs
Скомпилируйте код, и после успешной компиляции будет сгенерирован исполняемый файл.main
:
.
├── main
└── main.rs
воплощать в жизнь./main
будет выводитьHello,World!
будет генерироваться под окнами
main.exe
В отличие от динамических языков, таких как Ruby, Python или JavaScript, Rust, Go и Deno — все компилируемые языки (технология JIT выходит за рамки обсуждения), а это означает, что после компиляции программы на Rust вы можете доставить исполняемые файлы другим людям и работает в среде без установленного Rust. Если вы используете Node для разработки приложений и предоставления их другим пользователям, у других должна быть среда разработки Node.
Hello,Cargo!
Как и в случае с Go (go build), использование системного инструмента сборки (rustc) достаточно для компиляции простых программ, но недостаточно для крупномасштабных проектов с множеством соразработчиков. В Go есть gox, goxc, xgo, в Rust есть Cargo, который помогает нам управлять такими вещами, как упрощение зависимостей проектов, сборка кода и т. д.
Cargo — это система сборки и менеджер пакетов, встроенные в набор инструментов Rust. Поскольку он может выполнять множество тривиальных, но важных задач, таких как сборка кода, загрузка и компиляция зависимых библиотек и т. д., большинство пользователей Rust выберут его для управления своими собственными проектами Rust (такими как Deno).
В нашем примере hellowordl ранее в vscode плагин Rust сообщит о следующей ошибке, которая показывает, что Cargo является стандартным в Rust:
Создайте проект с Cargo
использоватьcargo new hello_cargo
Новый проект:
Cargo генерирует для нас два файла и каталог: файл с именемCargo.toml
файл и файл с именемmain.rs
файл исходного кода
, исходный код помещается в каталог src. В то же время Cargo также инициализирует новый репозиторий Git и обновит его до репозитория по умолчанию..gitignore
документ.
Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["youngjuning <youngjuning@163.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-
[package]
: это метка области, указывающая, что следующий оператор будет использоваться для настройки текущего пакета.author
Электронная почта и имя здесь от~/.gitconfig
читать в -
[dependencies]
: Также метка области указывает, что следующая область будет использоваться для объявления зависимостей проекта.
TOML — это небольшой, простой в использовании семантический формат файла конфигурации, название «TOML» — это аббревиатура от слова «Tom's Obvious, Minimal Language». «Том» относится к его автору, Тому Престону-Вернеру.
По соглашению Cargo по умолчанию сохраняет все файлы исходного кода вsrc
каталог, а корневой каталог проекта используется только для хранения таких элементов, какREADME
Документация, уведомления о лицензии, файлы конфигурации и т. д., не относящиеся к исходному коду. Использование Cargo может помочь вам логически и последовательно упорядочить файлы вашего проекта, сохраняя все в порядке.
Создайте и запустите проект с помощью Cargo
cargo build
В отличие от предыдущей, эта команда сгенерирует исполняемую программу по путиtarget/debug/hello_cargo
Вниз:
В первый раз, когда вы строите с помощью команды cargo build , он сгенерируетCargo.lock
(по аналогии с yarn.lock), не изменяйте этот файл вручную, по умолчанию.gitignore
только игнорируетсяtarget
каталог, мы начинаем сhttps://github.com/github/gitignore/blob/master/Rust.gitignore
Скопируйте лучшие практики сюда.
использоватьcargo run
Команду можно просто скомпилировать и запустить следующим образом:
мы также можем использовать
cargo check
Быстро проверить, может ли проект быть скомпилирован
Сборка в режиме выпуска
cargo build --release
Полученный исполняемый файл будет помещен вtarget/release
каталог вместо предыдущегоtarget/debug
Под содержанием.
Если вы хотите запустить контрольный показатель эффективности кода, пожалуйстаcargo run --release
команда для создания и использованияtarget/release
Исполняемая программа в каталоге завершает тест производительности.
crate
В Rust мы называем наборы кода ящиками. Крейт — это наименьшая единица компиляции в Rust, а пакет — это набор из одного или нескольких крейтов. ящики.crates.ioЯвляется прокси-сервером для сообщества Rust.
История не окончена
Части этой статьи взяты из The Definitive Guide to Rust.
После поиска я не нашел группу по обмену Rust, поэтому я создал ее сам.
У Tuya Smart большое количество качественных НС, присоединяться могут все желающие, вам нужно добавить меня в WeChat yang_jun_ning, или отправить свое резюме прямо на почтуyoungjuning@aliyun.com