Как создать микросервис на Rust при помощи gRPC
В сегодняшнем туториале по Rust мы откроем для себя мир gRPC. Для этого создадим очень простой микросервис с единственной конечной точкой, который будет отзеркаливать то сообщение, что мы ему пошлем. Чтобы протестировать наш микросервис, мы также напишем простой клиент на Rust.
Перед изучением этого поста также будет полезно посмотреть предыдущие публикации автора по Rust:
https://blog.ediri.io/lets-build-a-cli-in-rust
https://blog.ediri.io/how-to-asyncawait-in-rust-an-introduction
Rus https://habr.com/ru/companies/timeweb/articles/715854/
Eng https://blog.ediri.io/creating-a-microservice-in-rust-using-grpc
👉 @rust_lib
В сегодняшнем туториале по Rust мы откроем для себя мир gRPC. Для этого создадим очень простой микросервис с единственной конечной точкой, который будет отзеркаливать то сообщение, что мы ему пошлем. Чтобы протестировать наш микросервис, мы также напишем простой клиент на Rust.
Перед изучением этого поста также будет полезно посмотреть предыдущие публикации автора по Rust:
https://blog.ediri.io/lets-build-a-cli-in-rust
https://blog.ediri.io/how-to-asyncawait-in-rust-an-introduction
Rus https://habr.com/ru/companies/timeweb/articles/715854/
Eng https://blog.ediri.io/creating-a-microservice-in-rust-using-grpc
👉 @rust_lib
Rust: ни в коем случае не используйте unwrap() в продакшене
В этой статье речь пойдет о том, почему использовать метод unwrap() для типов Result в продакшн коде Rust крайне нежелательно.
Rust как язык программирования был спроектирован с особым упором на безопасность и эффективность. Одним из ключевых способов достижения этого является система типов, которая позволяет разработчикам выявлять и обрабатывать ошибки во время компиляции, а не полагаться на проверки во время выполнения.
Одно из средств, которые Rust использует для обработки ошибок, — это тип Result, который может представлять успешный (вариант Ok) или неудачный (вариант Err) результаты. Метод unwrap() является удобным способом извлечения значения из типа Result в тех случаях, когда вы ожидаете, что операция завершится успешно. Однако, использование unwrap() в продакшн коде может быть опасным, и его следует избегать.
Rus https://habr.com/ru/companies/otus/articles/716802/
Eng https://levelup.gitconnected.com/rust-never-use-unwrap-in-production-c123b311f620
👉 @rust_lib
В этой статье речь пойдет о том, почему использовать метод unwrap() для типов Result в продакшн коде Rust крайне нежелательно.
Rust как язык программирования был спроектирован с особым упором на безопасность и эффективность. Одним из ключевых способов достижения этого является система типов, которая позволяет разработчикам выявлять и обрабатывать ошибки во время компиляции, а не полагаться на проверки во время выполнения.
Одно из средств, которые Rust использует для обработки ошибок, — это тип Result, который может представлять успешный (вариант Ok) или неудачный (вариант Err) результаты. Метод unwrap() является удобным способом извлечения значения из типа Result в тех случаях, когда вы ожидаете, что операция завершится успешно. Однако, использование unwrap() в продакшн коде может быть опасным, и его следует избегать.
Rus https://habr.com/ru/companies/otus/articles/716802/
Eng https://levelup.gitconnected.com/rust-never-use-unwrap-in-production-c123b311f620
👉 @rust_lib
Solana смарт-контракты на Rust для самых маленьких
Начнем с определения того, что такое "Solana program" - именно так в блокчейне обозначаются смарт-контракты. Это исполняемый код интерпретирующий проходящие через него инструкции, которые в свою очередь являются частью любой транзакции в сети Solana.
https://habr.com/ru/articles/716312/
👉 @rust_lib
Начнем с определения того, что такое "Solana program" - именно так в блокчейне обозначаются смарт-контракты. Это исполняемый код интерпретирующий проходящие через него инструкции, которые в свою очередь являются частью любой транзакции в сети Solana.
https://habr.com/ru/articles/716312/
👉 @rust_lib
Хабр
Solana смарт-контракты на Rust для самых маленьких
Program Начнем с определения того, что такое "Solana program" - именно так в блокчейне обозначаются смарт-контракты. Это исполняемый код интерпретирующий проходящие через него инструкции, которые в...
Как избавиться от проверок выхода за границы при доступе по индексу в Rust (без unsafe!)
В сети часто можно услышать, что в Rust доступ по индексу со слайсом (как, например, my_slice[i]) работает медленно, и вместо этого в целях повышения производительности вы должны организовать свой код как‑нибудь иначе.
Детали этого, однако, зачастую туманны. Мало где можно найти какие‑либо внятные замеры производительности, и нет почти никакой документации по устранению этих накладных расходов, не прибегая к unsafe коду.
Поэтому я решил поделиться с вами опытом и методами, которые я обнаружил в процессе удаления проверок выхода индекса за границы (далее просто «проверка границ»), а также удаления unsafe кода, где это возможно, из множества громоздких крейтов.
В этой статье я расскажу:
Каковы типичные накладные расходы на проверку границ при доступе по индексу.
Как избежать проверки границ без использования unsafe кода.
Как убедиться, что проверки границ были устранены.
Как замерять производительность и профилировать Rust‑код.
Как нам сконструировать самую дешевую проверку границ в случае, когда она все‑таки необходима.
https://shnatsel.medium.com/how-to-avoid-bounds-checks-in-rust-without-unsafe-f65e618b4c1e
👉 @rust_lib
В сети часто можно услышать, что в Rust доступ по индексу со слайсом (как, например, my_slice[i]) работает медленно, и вместо этого в целях повышения производительности вы должны организовать свой код как‑нибудь иначе.
Детали этого, однако, зачастую туманны. Мало где можно найти какие‑либо внятные замеры производительности, и нет почти никакой документации по устранению этих накладных расходов, не прибегая к unsafe коду.
Поэтому я решил поделиться с вами опытом и методами, которые я обнаружил в процессе удаления проверок выхода индекса за границы (далее просто «проверка границ»), а также удаления unsafe кода, где это возможно, из множества громоздких крейтов.
В этой статье я расскажу:
Каковы типичные накладные расходы на проверку границ при доступе по индексу.
Как избежать проверки границ без использования unsafe кода.
Как убедиться, что проверки границ были устранены.
Как замерять производительность и профилировать Rust‑код.
Как нам сконструировать самую дешевую проверку границ в случае, когда она все‑таки необходима.
https://shnatsel.medium.com/how-to-avoid-bounds-checks-in-rust-without-unsafe-f65e618b4c1e
👉 @rust_lib
Medium
How to avoid bounds checks in Rust (without unsafe!)
Featuring optimizer tricks, iterators and The Minimum Possible Bounds Check
Введение в Unicode (опять?)
разберём, что из себя представляет Unicode, его символы и их свойства, кодировки. Напишем валидацию строк UTF-8, научимся преобразовывать запись символа в кодировке UTF-8 в код символа (кодпоинт) Unicode и обратно.
выясним, что представляет собой нормализация текста, зачем она нужна и где её применять. расскажу про каноническую эквивалентность символов и эквивалентность совместимости, разберём как делается декомпозиция/композиция, быстрые проверки, под конец — напишем реализацию алгоритмов нормализации.
узнаем, что такое сопоставление (collation) строк, алгоритм сопоставления (UCA), что такое DUCET и CLDR; уровни и веса сопоставлений, различные подходы к взвешиванию весов, немного затронем тему баз данных, и, наконец, напишем пример.
https://habr.com/ru/articles/751616/
👉 @rust_lib
разберём, что из себя представляет Unicode, его символы и их свойства, кодировки. Напишем валидацию строк UTF-8, научимся преобразовывать запись символа в кодировке UTF-8 в код символа (кодпоинт) Unicode и обратно.
выясним, что представляет собой нормализация текста, зачем она нужна и где её применять. расскажу про каноническую эквивалентность символов и эквивалентность совместимости, разберём как делается декомпозиция/композиция, быстрые проверки, под конец — напишем реализацию алгоритмов нормализации.
узнаем, что такое сопоставление (collation) строк, алгоритм сопоставления (UCA), что такое DUCET и CLDR; уровни и веса сопоставлений, различные подходы к взвешиванию весов, немного затронем тему баз данных, и, наконец, напишем пример.
https://habr.com/ru/articles/751616/
👉 @rust_lib
Хабр
1. Введение в Unicode (опять?)
Всем здравствуйте, меня зовут Антон, и этой статьей я открываю новый цикл публикаций про Unicode. Сразу может возникнуть вопрос — зачем? Их же и так море? На Хабре, как и вообще...
Создание модуля WebAssembly с помощью Emscripten, AssemblyScript и Rust
В этой небольшой заметке предлагается рассмотреть несколько способов компиляции модуля для WebAssembly, используя три разных подхода. Мы реализуем решение одной и той же задачки на трёх языках и скомпилируем полученный код в модуль WebAssembly.
Будем использовать:
Emscripten для компиляции кода, написанного на c++
AssemblyScript для компиляции кода, написанного на, собственно, AssemblyScript
wasm-pack для компиляции кода, написанного на Rust
https://habr.com/ru/articles/718874/
👉 @rust_lib
В этой небольшой заметке предлагается рассмотреть несколько способов компиляции модуля для WebAssembly, используя три разных подхода. Мы реализуем решение одной и той же задачки на трёх языках и скомпилируем полученный код в модуль WebAssembly.
Будем использовать:
Emscripten для компиляции кода, написанного на c++
AssemblyScript для компиляции кода, написанного на, собственно, AssemblyScript
wasm-pack для компиляции кода, написанного на Rust
https://habr.com/ru/articles/718874/
👉 @rust_lib
Хабр
Создание модуля WebAssembly с помощью Emscripten, AssemblyScript и Rust
В этой небольшой заметке предлагается рассмотреть несколько способов компиляции модуля для WebAssembly, используя три разных подхода. Мы реализуем решение одной и той же задачки на трёх языках и...
Реализация Redux на Rust
Redux — это популярная библиотека предсказуемого и последовательного управления состоянием с простой разработкой и сопровождением сложных приложений JavaScript.
Реализуем Redux на Rust, производительном и безопасном статически типизированном языке системного программирования.
Для этого создадим структуру, которой обозначается состояние приложения, и типаж для определения выполняемых с этим состоянием действий. И еще функцию редьюсера, которой принимается текущее состояние и действие, а возвращается обновленное этим действием состояние.
https://levelup.gitconnected.com/implementing-redux-with-rust-a-step-by-step-guide-220acd2885f9
👉 @rust_lib
Redux — это популярная библиотека предсказуемого и последовательного управления состоянием с простой разработкой и сопровождением сложных приложений JavaScript.
Реализуем Redux на Rust, производительном и безопасном статически типизированном языке системного программирования.
Для этого создадим структуру, которой обозначается состояние приложения, и типаж для определения выполняемых с этим состоянием действий. И еще функцию редьюсера, которой принимается текущее состояние и действие, а возвращается обновленное этим действием состояние.
https://levelup.gitconnected.com/implementing-redux-with-rust-a-step-by-step-guide-220acd2885f9
👉 @rust_lib
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Учим Rust вместе
Hello World
Guessing Game
переменные и типы данных
функции и контроль выполнения программы
разбор задач
владение
заимствование и слайсы
структуры и методы
перечислимые типы
пакеты и модули
вектор
строки
HashMap
разбор задачи
обработка ошибок
дженерики
трейты
https://www.youtube.com/playlist?list=PLXhUgKrQD6UoggzaDTQ1luq3XMpYboMTM
👉 @rust_lib
Hello World
Guessing Game
переменные и типы данных
функции и контроль выполнения программы
разбор задач
владение
заимствование и слайсы
структуры и методы
перечислимые типы
пакеты и модули
вектор
строки
HashMap
разбор задачи
обработка ошибок
дженерики
трейты
https://www.youtube.com/playlist?list=PLXhUgKrQD6UoggzaDTQ1luq3XMpYboMTM
👉 @rust_lib
Как при помощи Rust в 150 раз ускорить код на Python
Python — довольно простой в освоении язык, по сравнению с некоторыми другими языками код на нём пишется очень быстро. Но в жертву приносится скорость выполнения кода.
Перепишем часть Python-кода в Rust и импортируем этот код в виде пакета Python в проект. Получим сверхбыстрый пакет Python, который сможем импортировать и использовать, как любой другой пакет. В качестве бонуса добавим многопроцессорность и в итоге получим функцию, которая примерно в 150 раз быстрее обычного кода на Python.
Rus https://habr.com/ru/companies/skillfactory/articles/718894/
Eng https://towardsdatascience.com/create-a-python-package-with-super-fast-rust-code-in-3-steps-a27389629beb
👉 @rust_lib
Python — довольно простой в освоении язык, по сравнению с некоторыми другими языками код на нём пишется очень быстро. Но в жертву приносится скорость выполнения кода.
Перепишем часть Python-кода в Rust и импортируем этот код в виде пакета Python в проект. Получим сверхбыстрый пакет Python, который сможем импортировать и использовать, как любой другой пакет. В качестве бонуса добавим многопроцессорность и в итоге получим функцию, которая примерно в 150 раз быстрее обычного кода на Python.
Rus https://habr.com/ru/companies/skillfactory/articles/718894/
Eng https://towardsdatascience.com/create-a-python-package-with-super-fast-rust-code-in-3-steps-a27389629beb
👉 @rust_lib