Как стать автором
Обновить
0
0

web-dev

Отправить сообщение

Есть ли Undefined Behavior в Rust?

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров6.5K

Если вы никогда не сталкивались с Rust-ом, а слышали, что он помогает избежать Undefined Behavior (UB), то отчасти это так. Некоторые делят язык Rust на 2 части: safe и unsafe. Я бы поделил на 4 части: safe, unsafe, const и async. Но нас интересуют safe и unsafe.

Получить UB в Rust-е не сложно - нужно открыть документацию и найти любой метод, помеченный unsafe, например, get_unchecked у Vec. Метод позволяет без проверки границ получить значение из динамического массива. А есть ли UB в safe-подмножестве языка? Есть. Он возможен из-за бага (проблемы) в компиляторе Rust, который живет с 2015 года.

Читать далее
Всего голосов 17: ↑16 и ↓1+24
Комментарии16

Курс «PostgreSQL для начинающих»: #1 — Основы SQL

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров70K

Этим постом я запускаю публикацию расширенных транскриптов лекционного курса "PostgreSQL для начинающих", подготовленного мной в рамках "Школы backend-разработчика" в "Тензоре".

В программе: рассказ об основах SQL, возможностях простых и сложных SELECT, анализ производительности запросов, разбор [не]эффективного применения индексов и особенностей работы транзакций и блокировок в этой СУБД.

Курс не претендует на лавры "войти в айти", поэтому подразумевает наличие у слушателя опыта программирования или работы с другими СУБД, и, главное, желания самостоятельно изучать тему работы с PostgreSQL глубже.

Для тех, кому комфортнее смотреть и слушать, а не читать - доступна видеозапись и слайды.

Читать далее
Всего голосов 30: ↑29 и ↓1+33
Комментарии30

О JavaScript и WebAssembly

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров7.9K


Hello world!


На днях я баловался с WebAssembly и получил довольно неожиданные результаты, которыми и хочу с вами поделиться в этой небольшой заметке.


Хорошо, если вы знаете JS/Node.js и хотя бы слышали о WASM и Rust.

Читать дальше →
Всего голосов 17: ↑13 и ↓4+12
Комментарии4

Выбор варианта возврата значения из функций в Rust

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.7K

Вопрос оптимизации: как лучше возвращать структуры из функции, что бы не было лишних выделений и копирований областей памяти. Когда пишешь код, то кажется, что если экземпляр структуры размещается на стеке, то он должен копироваться в стек вызывающей функции и оптимальнее возвращать указатель. Но по анализу ассемблерного кода, сделанного компилятором, получается, что все не совсем так.

Читать далее
Всего голосов 12: ↑11 и ↓1+13
Комментарии3

Go (fiber) vs Rust (axum) JWT&DB

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров11K

На medium.com есть ряд статей со сравнением простых web-сервисов, написанных на разных языках. Одна из них Go vs Rust: Performance comparison for JWT verify and MySQL query и судя по ней, Go на 42% быстрее чем Rust. Я решил перепроверить и заодно поменять Gin на Fiber, Axis на Axum и MySQL на PostgreSQL.

Web-сервис будет принимать запрос с авторизацией по токену JWT, искать в БД пользователя с данными email из JWT и возвращать его в виде json. Так как подобная авторизация используется повсеместно, то тест актуальный.

Читать далее
Всего голосов 17: ↑12 и ↓5+11
Комментарии68

Пишем интеграционные тесты для Actix Web

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.4K

Модульные и Интеграционные тесты являются неотъемлемой частью жизни современного разработчика. И если с написанием простейших тестов описанных в различных обучающих статьях проблем обычно не возникает, то ситуация коренным образом меняется, когда нам необходимо написать интеграционные тесты для чего-то более сложного, чем 3 + 2 = 5.

В данной статье я хочу поделиться своим подходом к написанию интеграционных тестов для приложения, использующего Actix Web (API-тестирование).

Писать что-то абстрактное скучно, поэтому давайте напишем интеграционный тест для своего маленького AWS STS.

Note: Статья будет интересна тем, кому по какой-либо причине не подходят стандартные средства Actix Web для написания интеграционных тестов.

Читать далее
Всего голосов 4: ↑3 и ↓1+4
Комментарии0

Как запустить Web3-проект | Часть 2: Виды проектов и построение команды

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров14K

Web3 захватывает мир, но для многих это по-прежнему пугающий “black box,” который работает по неведомым законами и таит много сложностей. Чтобы в очередной раз доказать, что не так страшен черт, как его малюют, я написал обстоятельный гайд по запуску Web3-проектов. В первую очередь, он рассчитан на фаундеров и продакт-менеджеров, которые чувствуют себя уверенно в мире традиционных IT-продуктов, но боятся осваивать Web3.

Я фаундер и CPO Web3-проекта MOOW, мобильного фитнес и лайфстайл приложения с элементами геймификации. Начиная работать с MOOW, я имел многолетний пользовательский опыт с различными блокчейн-проектами, но только приблизительно понимал, как их создавать. Достойно пройти этот тернистый путь мне и моей команде помогли мои друзья с богатым опытом в этой сфере. 

После успешного запуска личного проекта, я готов поделиться знаниями, которые накопил в процессе. Откровенно говоря, этот материал мог бы стать основой дорогущего курса, но пока мне это неинтересно, да и упаковывать и глубоко прорабатывать этот материал я не готов. А вот прояснить непонятные места будущим Web3-фаундеров в виде серии статей я готов! Эти статьи помогут сэкономить кучу времени и денег, а, возможно, вдохновят кого-то на запуск своего Web3-проекта! 

Сразу оговорюсь: Здесь представлено моё авторское видение, не претендующее на статус абсолютной истины. Web3 динамично развивается, поэтому часть идей из моих статей могут потерять свою актуальность через год или даже раньше.

Мой гайд состоит из трех частей. Первая посвящена маркетингу и коммьюнити-менеджменту в Web3 (читать здесь), вторая - видам Web3-проектов и сбору команды, а третья - токеномике, фандрейзингу, лончпадам, биржам и маркет-мейкерам (читать здесь).

Читать далее
Всего голосов 6: ↑4 и ↓2+3
Комментарии2

SQLx: raw SQL в Rust

Время на прочтение9 мин
Количество просмотров8.7K

Когда речь заходит об использовании SQL, экосистеме Rust есть что нам предложить: к счастью, нам доступны несколько отличных готовых к использованию решений. SQLx — это чисто асинхронный, независящий от рантайма SQL-крейт, позволяющий использовать проверяемые во время компиляции запросы без какого-либо DSL.

Читать далее
Всего голосов 20: ↑14 и ↓6+12
Комментарии21

Как итераторы в Rust могут ухудшить производительность: разбираемся в проблеме

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.1K

Недавно в сообществе разработчиков, где я состою, кто-то представил интересную проблему. Программа этого человека была спроектирована так, что она использовала как многопоточность для выполнения некоторых задач, и циклы for для повторения определенных операций в этих потоках. Однако когда были внесены изменения в код программы и циклы поменяли на итераторы, производительность программы резко ухудшилась. Почему это произошло?

Для опытного разработчика, знакомого с языком программирования Rust, данная ситуация, возможно, не является неожиданной или удивительной. Причина в том, что итераторы в Rust имеют свои собственные тонкости и особенности, которые могут остаться незамеченными при беглом рассмотрении. Эти особенности могут вызвать затруднения и недоразумения у разработчиков, особенно у тех, кто не обладает большим опытом работы с итераторами в Rust.

Чтобы лучше понять эту проблему, давайте рассмотрим пример программы и разберемся в том, как итераторы могут повлиять на ее производительность и поведение в целом.

Читать далее
Всего голосов 29: ↑10 и ↓19-7
Комментарии13

Программируем биржу: почему мы выбрали Rust?

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров13K

Язык программирования Rust постепенно набирает популярность не только среди разработчиков, но и в среде менеджмента. Такая растущая популярность не появляется на пустом месте, особенно в случае технологий с высоким порогом входа. В данной статье я хочу проанализировать чем Rust заслужил такую популярность на примере компании, в которой я работаю и в которой Rust является основным языком разработки, а также одного из основных наших продуктов - биржи.

Читать далее
Всего голосов 20: ↑11 и ↓9+2
Комментарии50

Тест производительности Web-фреймворков для Rust

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров11K

В этой статье мы сравним производительность 3 наиболее популярных бекэнд-фреймворков для Rust: AxumActix и Rocket.

Сравним основные особенности, качество документации и самое главное - проведём тест производительности. Для этого напишем с помощью каждого фреймворка простой REST-сервис с тремя эндпоинтами - один будет просто возвращать отформатированную строку, второй засыпать на 20 миллисекунд имитируя небольшую работу с БД или запрос к внешнему сервису, а третий будет выполнять тяжёлую работу вычисляя хеш bcrypt, имитируя какую-нибудь сложную бизнес-логику.

Читать далее
Всего голосов 15: ↑13 и ↓2+14
Комментарии12

Как Rust меняет мышление разработчика

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров49K
Я страшно ненавижу C++. Обычно я люблю программирование, но каждый проект, с которым я имел дело на C++, ощущался как монотонная рутина. В январе 2023 года я пошёл по пути изучения Rust, поэтому теперь могу сказать, что знаю язык системного программирования, который действительно люблю использовать.

Первый стабильный релиз Rust появился в 2015 году, и каждый год, начиная с 2016, он признаётся в Stack Overflow’s Annual Developer Survey самым любимым языком (в 2023 году эта категория называется «обожаемый»). Почему же разработчики, ощутившие вкус Rust, не могут отказаться от его использования? Похоже, в мире прогремевших наследников C/C++ репутация растёт только у Rust. Как же этот язык, появившийся на сцене меньше десятка лет назад, стал настолько популярным?

Ржавый красный краб Феррис по версии Midjourney

Кривая обучения оказалась крутой. Я нашёл многое, что мне нравится в Rust, но постоянно попадал в его ловушки. Однако в конечном счёте именно препятствия и проблемы, с которыми столкнулся, я научился любить больше всего.

Я начну историю с разговора о том, что легко полюбить — со среды Rust, управления пакетами и документации. Затем я расскажу о системе типов и типажах (trait). Далее я поведаю о тех возможностях тестирования и test driven development, которые становятся возможными благодаря Rust. Наконец, мы обсудим самую запутанную и сбивающую с толку часть — одержимость Rust тем, кто какой переменной владеет.
Читать дальше →
Всего голосов 87: ↑75 и ↓12+89
Комментарии147

Интеграция Axum с S3-хранилищем

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.3K

Недавно столкнулся с проблемой подружить веб-фреймворк Axum и библиотеку rust-s3. Собственно, задача сделать 2 эндпойнта:

Загрузка файла в хранилище и получение ссылки

Скачка файла из хранилища по ссылке

Разумеется, без временных файлов и без удержания целиком всех данных файла в памяти. В этой статье будет полный код необходимый для реализации этого функционала с небольшими пояснениями.

Читать далее
Всего голосов 4: ↑2 и ↓20
Комментарии8

Мнение три года спустя: стоил ли того переход с JavaScript на Rust?

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров39K

Несколько лет назад я отказался от всего и полностью сосредоточился на WebAssembly. В то время Rust имел наилучшую поддержку компиляции в WebAssembly, а самые полнофункциональные среды исполнения WebAssembly были основаны на Rust. Rust был лучшим из вариантов. С места в карьер я нетерпеливо начал разбираться, чем же вызван такой ажиотаж.

С тех пор мы с потрясающими разработчиками создали Wick, — фреймворк приложений и среду исполнения, использующие в качестве системы основного модуля WebAssembly.

Спустя три года, выполнив несколько развёртываний в продакшен, написав электронную книгу и выпустив примерно сто пакетов на crates.io, я решил, что настало время поделиться своими мыслями о Rust.

Читать далее
Всего голосов 40: ↑39 и ↓1+53
Комментарии64

FAQ по Shadowsocks/XRay/XTLS/Reality/Nekobox/etc. для обхода блокировок

Уровень сложностиПростой
Время на прочтение21 мин
Количество просмотров264K

Эта статья - сборник разных вопросов и ответов на них, которые звучали в комментариях к моим предыдущим статьям (Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-всеBleeding-edge обход блокировок с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто и других из той же серии) и в личных сообщениях.

Читать далее
Всего голосов 61: ↑61 и ↓0+61
Комментарии175

Ржавое наследование 2. Славянский проброс Get/Set

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.4K

Вторая статья по теме, развивающая мои теоретические выкладки про наследование реализаций из первой части. В этой части пойдет речь о доступе к данным через цепочку вложенных структур. Все также никакой лишней нагрузки в виде: Rc, RefCell, и тд, только no_std и немного nightly в конце. Но чтобы понимать происходящее требуется изучить первую статью: ссыль, хотя и будет предоставлена совсем минимальная вводная.

Продать душу дьяволу
Всего голосов 14: ↑14 и ↓0+14
Комментарии4

Самый маленький Docker образ Rust приложения

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров11K

Привет %username%, эта статья про то, как поместить Rust приложение в Docker и получить образ размером с бинарный файл (6 Мб). А также про причины, которые привели к переходу с NodeJS на Rust. Отдельная пара слов о проблемах вначале, переходе на Go, и том, как команда Rust устранила эти проблемы за пол года.

TL;DR Dockerfile в конце статьи и ссылка на example репозиторий

Читать далее
Всего голосов 36: ↑35 и ↓1+43
Комментарии16

Алгебраические Типы Данных

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров6.2K

Что же такое Алгебраические Типы Данных(Algebraic Data Types(ADT))? Обычно определение состоит из терминов теории типов и обязательно с примером на Haskell. Но на практике всё не так сложно.

Читать далее
Всего голосов 15: ↑12 и ↓3+11
Комментарии15

Собственный строковый тип на Rust

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров7.1K

Писать компиляторы — моё хобби, ничего не могу с собой поделать. Поэтому я пишу и много парсеров. В программировании систем обычно лучше попытаться сделать память общей, чем использовать её многократно, поэтому мои типы AST обычно выглядят так.

pub enum Expr<'src> {
  Int(u32)
  Ident(&'src str),
  // ...
}

Когда мы парсим идентификатор, то вместо копирования его названия в новую String мы заимствуем его из входной исходной строки. Это позволяет избежать дополнительных распределений, дополнительного копирования и экономит слово на представлении данных. Компиляторы могут быть очень требовательны к памяти, поэтому стоит выбирать краткое представление.
Читать дальше →
Всего голосов 48: ↑47 и ↓1+63
Комментарии6

Реализуем на Rust пул потоков с балансировкой нагрузки, пользуясь только стандартной библиотекой

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров4.8K
image

В программировании «пулом потоков» (thread pool) называется паттерн проектирования, обеспечивающий конкурентное выполнение компьютерной программы. Эта модель также может именоваться «worker crew» (рабочая бригада) или «replicated workers» (самовоспроизводящиеся задачи). Пул держит наготове множество потоков, ожидающих, пока владеющая им программа не выделит ему в конкурентное выполнение ряд задач
— по Википедии


Репозиторий: github.com/arindas/sangfroid

Этот пост написан в основном под впечатлением от лекции Роба Пайка "Конкурентность – это не параллелизм".

image
Читать дальше →
Всего голосов 15: ↑14 и ↓1+21
Комментарии1

Информация

В рейтинге
Не участвует
Откуда
Донецкая обл., Украина
Зарегистрирован
Активность