®️Rust: безопасный парсинг с нулевым копированием
Парсеры (в контексте компьютерных технологий) — это программы или алгоритмы, способные преобразовать определенный массив данных в некую структурированную информацию. При обмене данными между устройствами (к примеру, при отправке этой статьи на ваше устройство) парсеры используются для преобразования полученных данных в то, что устройство может обработать.
Учитывая это, легко понять важность подобных алгоритмов, а также значение их эффективности для общей производительности системы. Одним из способов оптимизации таких программ является использование технологии, называемой zero-copy (нулевое копирование).
Парсер с нулевым копированием представляет собой участок кода, который может преобразовывать полученные данные в структурированную форму, не копируя при этом содержимое в новые буферы.
Это отличает данный вид парсеров от прочих, используемых для преобразования части данных в набор значений (например, строки и массивы): программы без нулевого копирования выделяют новую область в куче и копируют в нее соответствующую часть полученных данных.
В качестве примера простейшего парсера с нулевым копированием я создал программу на языке C, которая выполняет парсинг массива байтов в заранее определенный struct. Программа предполагает, что полученные данные будут содержать заголовочный байт, за которым следует строка.
s
Код достаточно прост: в struct перемещается значение примитива (header — заголовок) и указатель на массив символов (payload — полезная нагрузка). Заметим, что хотя некоторые могут назвать эту процедуру копированием, она не выделяет новую память, а лишь выполняет простые инструкции перемещения значений и указателей:
Читать
Парсеры (в контексте компьютерных технологий) — это программы или алгоритмы, способные преобразовать определенный массив данных в некую структурированную информацию. При обмене данными между устройствами (к примеру, при отправке этой статьи на ваше устройство) парсеры используются для преобразования полученных данных в то, что устройство может обработать.
Учитывая это, легко понять важность подобных алгоритмов, а также значение их эффективности для общей производительности системы. Одним из способов оптимизации таких программ является использование технологии, называемой zero-copy (нулевое копирование).
Парсер с нулевым копированием представляет собой участок кода, который может преобразовывать полученные данные в структурированную форму, не копируя при этом содержимое в новые буферы.
Это отличает данный вид парсеров от прочих, используемых для преобразования части данных в набор значений (например, строки и массивы): программы без нулевого копирования выделяют новую область в куче и копируют в нее соответствующую часть полученных данных.
В качестве примера простейшего парсера с нулевым копированием я создал программу на языке C, которая выполняет парсинг массива байтов в заранее определенный struct. Программа предполагает, что полученные данные будут содержать заголовочный байт, за которым следует строка.
s
truct ParsedData {
uint8_t header;
char *payload;
};
void parse_buffer(uint8_t *buffer, struct ParsedData *parsed_data) {
parsed_data->header = buffer[0];
parsed_data->payload = (char *)&buffer[1];
};
Код достаточно прост: в struct перемещается значение примитива (header — заголовок) и указатель на массив символов (payload — полезная нагрузка). Заметим, что хотя некоторые могут назвать эту процедуру копированием, она не выделяет новую память, а лишь выполняет простые инструкции перемещения значений и указателей:
Читать
❤10👍3❤🔥1☃1
🔥 Дайджест полезных материалов из мира Rust за неделю
Почитать:
— Мнение три года спустя: стоил ли того переход с JavaScript на Rust?
— Как в 180 000 раз ускорить анализ данных с помощью Rust
— Schemaless для Uber.
— Интеграция Axum с S3-хранилищем
— Конкурентный отказ
— Как Rust меняет мышление разработчика
— Тест производительности Web-фреймворков для Rust
— Planespotting with Rust: using nom to parse ADS-B messages
— Cryptopals #30: Rust, solution approaches
— Dynamic HTTP API for web & OS dev 🧢
— 🦀⚡ Building extremely fast APIs with Rust & snowboard: Step-by-Step
— How to get the console in raw mode in rust 🖤
— Rust vs. Haskell: A performance comparison
— Building a HTTP Client with Reqwest | Rust
— Database Access Stack in Rust
— Comparison between k_board and termion 🦀⌨️
— OpenAI Language Lector
Посмотреть:
🌐 Did Josh Make A Mistake? (⏱ 06:58)
🌐 This Experimental Chrome Accessibility Feature Is A Game Changer (⏱ 00:48)
Хорошего дня!
Почитать:
— Мнение три года спустя: стоил ли того переход с JavaScript на Rust?
— Как в 180 000 раз ускорить анализ данных с помощью Rust
— Schemaless для Uber.
— Интеграция Axum с S3-хранилищем
— Конкурентный отказ
— Как Rust меняет мышление разработчика
— Тест производительности Web-фреймворков для Rust
— Planespotting with Rust: using nom to parse ADS-B messages
— Cryptopals #30: Rust, solution approaches
— Dynamic HTTP API for web & OS dev 🧢
— 🦀⚡ Building extremely fast APIs with Rust & snowboard: Step-by-Step
— How to get the console in raw mode in rust 🖤
— Rust vs. Haskell: A performance comparison
— Building a HTTP Client with Reqwest | Rust
— Database Access Stack in Rust
— Comparison between k_board and termion 🦀⌨️
— OpenAI Language Lector
Посмотреть:
🌐 Did Josh Make A Mistake? (⏱ 06:58)
🌐 This Experimental Chrome Accessibility Feature Is A Game Changer (⏱ 00:48)
Хорошего дня!
👍8❤2🔥1
Минимальный DNS-сервер, встроенный в Rust, с системой правил и протоколированием.
https://github.com/sammwyy/mindns
https://github.com/sammwyy/mindns
GitHub
GitHub - sammwyy/mindns: Minimal DNS server built in Rust with rule system and logging.
Minimal DNS server built in Rust with rule system and logging. - sammwyy/mindns
👍19🔥3☃1😎1
Векторная база данных Rust теперь работает на базе X (Twitter)
https://github.com/qdrant/qdrant
@rust_code
https://github.com/qdrant/qdrant
@rust_code
GitHub
GitHub - qdrant/qdrant: Qdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation…
Qdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/ - qdrant/qdrant
👍9🔥6🤮2🤣1
🔥 Дайджест полезных материалов из мира Rust за неделю
Почитать:
— Как не программист, вероятно, написал самую быструю библиотеку в мире
— SQLx: raw SQL в Rust
— Creating a Server Side Rust WebAssembly App with Spin 2.0
— Consuming an SQS Event with Lambda and Rust
— How to rust binding for libFuzzer
— Edge IoT with Rust on ESP: NTP
— Rust Memory Management: Borrowing, References, And The Borrow Checker
— sero - self hosted surge.sh analog
— Feedback from calling Rust from Python
— Queues in rust: enqueue and dequeue 👉
— A Comprehensive Dive into the New Time-Series Storage Engine - Mito
— Understanding the basics of Smart Pointers in Rust
Посмотреть:
🌐 Node Just Released This Amazing Feature! (⏱ 00:44)
🌐 Why Signals Are Better Than React Hooks (⏱ 16:30)
Хорошего дня!
Почитать:
— Как не программист, вероятно, написал самую быструю библиотеку в мире
— SQLx: raw SQL в Rust
— Creating a Server Side Rust WebAssembly App with Spin 2.0
— Consuming an SQS Event with Lambda and Rust
— How to rust binding for libFuzzer
— Edge IoT with Rust on ESP: NTP
— Rust Memory Management: Borrowing, References, And The Borrow Checker
— sero - self hosted surge.sh analog
— Feedback from calling Rust from Python
— Queues in rust: enqueue and dequeue 👉
— A Comprehensive Dive into the New Time-Series Storage Engine - Mito
— Understanding the basics of Smart Pointers in Rust
Посмотреть:
🌐 Node Just Released This Amazing Feature! (⏱ 00:44)
🌐 Why Signals Are Better Than React Hooks (⏱ 16:30)
Хорошего дня!
👍9❤2🔥2🤮1😎1
Rust async vs C# async vs C++ async
https://microsoft.github.io/rust-for-dotnet-devs/latest/asynchronous-programming/index.html
@rust_code
https://microsoft.github.io/rust-for-dotnet-devs/latest/asynchronous-programming/index.html
@rust_code
👍12
Rust часто используется для программирования на системном уровне с упором на безопасность и производительность.
Это означает, что сервер аутентификации является хорошим вариантом использования Rust.
В этом руководстве вы будете использовать фреймворк Warp для создания сервера аутентификации, использующего JSON Web Tokens.
https://www.freecodecamp.org/news/rust-tutorial-authentication-server/
Это означает, что сервер аутентификации является хорошим вариантом использования Rust.
В этом руководстве вы будете использовать фреймворк Warp для создания сервера аутентификации, использующего JSON Web Tokens.
https://www.freecodecamp.org/news/rust-tutorial-authentication-server/
freeCodeCamp.org
Rust Project – Create an Authentication Server
The Rust programming language is often used for system-level programming, emphasizing safety, concurrency, and performance, making it a popular choice for building systems software, game engines, and web browsers. An authentication server is another ...
❤13👍8
Rust
Rust async vs C# async vs C++ async https://microsoft.github.io/rust-for-dotnet-devs/latest/asynchronous-programming/index.html @rust_code
"C++ to Rust Assisted Migration (CRAM) полуавтоматически переносит хорошо спроектированный код общего назначения на языке программирования Rust".
📄https://cpp-rust-assisted-migration.gitlab.io
⚙️https://gitlab.com/cpp-rust-assisted-migration/source
@rust_code
📄https://cpp-rust-assisted-migration.gitlab.io
⚙️https://gitlab.com/cpp-rust-assisted-migration/source
@rust_code
cpp-rust-assisted-migration.gitlab.io
C++ to Rust Assisted Migration
Semi-automatically migrate well-designed, general-purpose C++ code into the Rust programming language.
👍11
Хабр
Как итераторы в Rust могут ухудшить производительность: разбираемся в проблеме
Недавно в сообществе разработчиков, где я состою, кто-то представил интересную проблему. Программа этого человека была спроектирована так, что она использовала как многопоточность (использование...
🔥 Дайджест полезных материалов из мира Rust за неделю
Почитать:
— Как итераторы в Rust могут ухудшить производительность: разбираемся в проблеме
— Как не программист, вероятно, написал самую быструю библиотеку в мире
— SQLx: raw SQL в Rust
— a rusty code cracker
— Edge IoT with Rust on ESP: MQTT Subscriber
— Golang or Rust: Which one to choose?
— Building Nebula - Chapter 1: Building a Prototype with Rust
— Chaos Engineering - Who's to Blame for the Bug Mess?
— Chaos Engineering - Who's to Blame for the Bug Mess?
— Introduction to Code Generation in Rust
— Creating a Server Side Rust WebAssembly App with Spin 2.0
— Consuming an SQS Event with Lambda and Rust
— How to rust binding for libFuzzer
Посмотреть:
🌐 Why Signals Are Better Than React Hooks (⏱ 16:30)
🌐 Node Just Released This Amazing Feature! (⏱ 00:44)
🌐 This Is One Of My Favorite TypeScript Features (⏱ 05:22)
🌐 NEW TypeScript Simplified Course Announcement! (⏱ 00:49)
Хорошего дня!
@rust_code
Почитать:
— Как итераторы в Rust могут ухудшить производительность: разбираемся в проблеме
— Как не программист, вероятно, написал самую быструю библиотеку в мире
— SQLx: raw SQL в Rust
— a rusty code cracker
— Edge IoT with Rust on ESP: MQTT Subscriber
— Golang or Rust: Which one to choose?
— Building Nebula - Chapter 1: Building a Prototype with Rust
— Chaos Engineering - Who's to Blame for the Bug Mess?
— Chaos Engineering - Who's to Blame for the Bug Mess?
— Introduction to Code Generation in Rust
— Creating a Server Side Rust WebAssembly App with Spin 2.0
— Consuming an SQS Event with Lambda and Rust
— How to rust binding for libFuzzer
Посмотреть:
🌐 Why Signals Are Better Than React Hooks (⏱ 16:30)
🌐 Node Just Released This Amazing Feature! (⏱ 00:44)
🌐 This Is One Of My Favorite TypeScript Features (⏱ 05:22)
🌐 NEW TypeScript Simplified Course Announcement! (⏱ 00:49)
Хорошего дня!
@rust_code
👍11🔥3❤1🤔1
⚡️ Legba
Поддерживаемые протоколы/функции:
AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM и Solace), Cassandra/ScyllaDB, перечисление поддоменов DNS, FTP, HTTP (базовая аутентификация, NTLMv1, NTLMv2, многочастная форма, пользовательские запросы с поддержкой CSRF и перечисление файлов/папок), IMAP, предварительная аутентификация и перечисление пользователей Kerberos, LDAP, MongoDB, MQTT, Microsoft SQL, MySQL, Oracle, PostgreSQL, POP3, RDP, Redis, SSH/SFTP, SMTP, STOMP (ActiveMQ, RabbitMQ, HornetQ и OpenMQ), сканирование TCP-портов, Telnet, VNC.
🐱 GitHub
@rust_code
Legba
- это многопротокольный брутфорсер учетных данных и паролей, созданный на Rust и асинхронной среды выполнения Tokio
с целью достижения лучшей производительности и стабильности при меньшем потреблении ресурсов по сравнению с аналогичными инструментами.Поддерживаемые протоколы/функции:
AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM и Solace), Cassandra/ScyllaDB, перечисление поддоменов DNS, FTP, HTTP (базовая аутентификация, NTLMv1, NTLMv2, многочастная форма, пользовательские запросы с поддержкой CSRF и перечисление файлов/папок), IMAP, предварительная аутентификация и перечисление пользователей Kerberos, LDAP, MongoDB, MQTT, Microsoft SQL, MySQL, Oracle, PostgreSQL, POP3, RDP, Redis, SSH/SFTP, SMTP, STOMP (ActiveMQ, RabbitMQ, HornetQ и OpenMQ), сканирование TCP-портов, Telnet, VNC.
@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4😁1
🔥 Дайджест полезных материалов из мира Rust за неделю
Почитать:
— Чем хорош Rust для продакшена?
— Working through the fast.ai book in Rust - Part 1
— Rust Concurrency Explained: A Beginner's Guide to Arc and Mutex
— Build Basic🦀Rust CLI Todo App Using Clap and SeaOrm
— Rust: JSON Web Token -- some investigative studies on crate jwt-simple.
— Create a Full stack Rust desktop App with Tauri, Yew and Tailwind CSS
— Add context to errors
— Building and Deploying a Static Site Generator in less than an hour using Rust
— Minky scripting language
— Ping-Pong rust: a project for your first dev-job
— L'ownership en Rust !
Посмотреть:
🌐 How Is This Code Safe? (⏱ 06:31)
🌐 NEW TypeScript Simplified Course - 24 Hour Sale (⏱ 07:18)
🌐 I Can’t Believe Chrome Hides This From You (⏱ 01:00)
Хорошего дня!
#digest #rust
@rust_code
Почитать:
— Чем хорош Rust для продакшена?
— Working through the fast.ai book in Rust - Part 1
— Rust Concurrency Explained: A Beginner's Guide to Arc and Mutex
— Build Basic🦀Rust CLI Todo App Using Clap and SeaOrm
— Rust: JSON Web Token -- some investigative studies on crate jwt-simple.
— Create a Full stack Rust desktop App with Tauri, Yew and Tailwind CSS
— Add context to errors
— Building and Deploying a Static Site Generator in less than an hour using Rust
— Minky scripting language
— Ping-Pong rust: a project for your first dev-job
— L'ownership en Rust !
Посмотреть:
🌐 How Is This Code Safe? (⏱ 06:31)
🌐 NEW TypeScript Simplified Course - 24 Hour Sale (⏱ 07:18)
🌐 I Can’t Believe Chrome Hides This From You (⏱ 01:00)
Хорошего дня!
#digest #rust
@rust_code
❤6👍4🔥2
DNS СЕРВЕР НА RUST 🦀🔧
Мы нашли руководство по созданию DNS-сервера, написанное Эмилем Хернваллом, ведущим инженером AWS! Это отличное начало для тех, кто изучает сетевое программирование.
Посмотрите его здесь: https://github.com/EmilHernvall/dnsguide
Мы нашли руководство по созданию DNS-сервера, написанное Эмилем Хернваллом, ведущим инженером AWS! Это отличное начало для тех, кто изучает сетевое программирование.
Посмотрите его здесь: https://github.com/EmilHernvall/dnsguide
GitHub
GitHub - EmilHernvall/dnsguide: A guide to writing a DNS Server from scratch in Rust
A guide to writing a DNS Server from scratch in Rust - EmilHernvall/dnsguide
👍15❤5🔥3
🔥 Дайджест полезных материалов из мира Rust за неделю
Почитать:
— Из Go в Rust или ад generics
— Rust 1.74.0: конфигурация проверки в Cargo, авторизация для приватных реестров, проекции возвращаемых типов
— Level up your Typescript game, functionally - Part 3
— Rust Revolution: How the 1.70 Update & LLVM 16 Turbocharged Performance by 17%!
— 20 times faster data submission to DynamoDB by parallel processing with Rust.
— Benchmark TypeScript Parsers: Demystify Rust Tooling Performance
— Working through the fast.ai book in Rust - Part 5
— Redefining Kernel Craftsmanship: The Rise of Rust in System-Level Programming
— Rust Nephite's Grimoire
— The Hallucinated Rows Incident
— Tests Everywhere - Rust
— One of many ways to migrate from NodeJS to Rust
Посмотреть:
🌐 WTF Do These Even Mean (⏱ 13:44)
🌐 This New Tailwind Feature Is A Game Changer (⏱ 00:59)
Хорошего дня!
Почитать:
— Из Go в Rust или ад generics
— Rust 1.74.0: конфигурация проверки в Cargo, авторизация для приватных реестров, проекции возвращаемых типов
— Level up your Typescript game, functionally - Part 3
— Rust Revolution: How the 1.70 Update & LLVM 16 Turbocharged Performance by 17%!
— 20 times faster data submission to DynamoDB by parallel processing with Rust.
— Benchmark TypeScript Parsers: Demystify Rust Tooling Performance
— Working through the fast.ai book in Rust - Part 5
— Redefining Kernel Craftsmanship: The Rise of Rust in System-Level Programming
— Rust Nephite's Grimoire
— The Hallucinated Rows Incident
— Tests Everywhere - Rust
— One of many ways to migrate from NodeJS to Rust
Посмотреть:
🌐 WTF Do These Even Mean (⏱ 13:44)
🌐 This New Tailwind Feature Is A Game Changer (⏱ 00:59)
Хорошего дня!
👍9❤3🤡1
ripgrep 14 released (hyperlink support, regex engine rewrite)
https://github.com/BurntSushi/ripgrep/releases/tag/14.0.0
@rust_code
https://github.com/BurntSushi/ripgrep/releases/tag/14.0.0
@rust_code
GitHub
Release 14.0.0 · BurntSushi/ripgrep
Sponsorship is appreciated!
ripgrep 14 is a new major version release of ripgrep that has some new
features, performance improvements and a lot of bug fixes.
In case you haven't heard of it be...
ripgrep 14 is a new major version release of ripgrep that has some new
features, performance improvements and a lot of bug fixes.
In case you haven't heard of it be...
👍5❤2