Как стать автором
Поиск
Написать публикацию
Обновить
51.18

Rust *

Мультипарадигмальный компилируемый язык

Сначала показывать
Порог рейтинга
Уровень сложности

Сколько памяти нужно в 2024 году для выполнения миллиона конкурентных задач?

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

Помните сравнение потребления памяти для асинхронного программирования на популярных языках 2023 года?

Мне стало любопытно, как поменялась ситуация за один год на примере самых новых версий языков.

Давайте снова проведём бенчмарки и изучим результаты!

Читать далее

RTS — Реактивный язык программирования свободных структур данных

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

Представляю вам свой open-source проект - RTS (Real-Time Script). Это реактивный язык свободных структур данных, опирающийся на новый подход к программированию. Проект я начал и продолжнаю писать на данный момент в одиночку начиная с 6 Декабря 2023 года. Пол года было потрачено на создание концептов и ещё пол года на саму реализацию.

Далее будет рассказ, он будет довольно подробный и я надеюсь, не будет сумбурным. Сама цель моего рассказа, объяснить работу RTS и концепции к которым меня привела моя работа в этой области. Это мой первый пост как на Хабре, так и в целом более-менее публичный про RTS. Поэтому прошу отнестить с пониманием. В случае, если у вас есть критика, предложения и т.п., то рад буду обсудить и ответить.

Читать далее

Rust 1.83.0: новые возможности констант

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

Команда Rust рада сообщить о новой версии языка — 1.83.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.83.0 вам достаточно выполнить команду:


$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать дальше →

Допустим, вы решили изучить Rust

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

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

Посмотрим...

Разумный подход к «Considered Harmful»

Время на прочтение7 мин
Количество просмотров1.9K
image

Недавно мне попалась статья Against Best Practices, и в целом я согласен с посылом этого поста. Но у меня были и собственные мысли на эту тему, поэтому изложу их здесь.

Даже не особенно углубляясь в историю разработки ПО, вы легко найдёте манифест в жанре Considered Harmful («Считается вредным»), самый знаменитый из которых составил легендарный учёный-информатик Эдсгер Дейкстра. Другая распространённая аналогия таких документов в духе времени — это «наилучшие практики». Это не менее субъективный кодекс подобных законов, которым зачастую критически не хватает такой обоснованности, как у манифестов из первой категории. Притом, что, на мой взгляд, и первые, и вторые имеют право на существование, их важно понимать в контексте, так как без контекста их значение легко размывается.
Читать дальше →

Самодельный WiFi модуль к автоматике раздвижных ворот

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

Можно было купить готовый модуль, несмотря на его совершенно конскую стоимость в 6-7 тыс. рублей. Однако он не предоставлял наиболее востребованную для меня функциональность: не позволял открывать ворота автоматически "из коробки" при приближении к своему участку на автомобиле. Ну и, естественно, экономия на порядок тоже сыграла не последнюю роль.

Был выбран следующий способ реализации основной задачи: WiFi модуль в автомобиле пытается зарегистрироваться на домашней точке доступа. Если ему это удается - проверяется уровень сигнала. Если уровень сигнала слабый - значит приближаемся к участку и надо подать команду WiFi модулю на автоматике ворот на открытие. Если сигнал сильный - мы уже на участке и ничего делать не надо. Дополнительная функциональность - управление воротами по WiFi через веб-интерфейс, в том числе и с мобильного телефона.

Если при выезде с участка руки свободны и можно заранее открыть ворота со штатного пульта, то при подъезде к участку нащупывать кнопку на пульте отвлекаясь от дороги - не только не удобно, но еще и опасно. При этом ворота открываются относительно медленно и если нажимать кнопку пульта уже подъехав к воротам, то приходится ждать несколько секунд, пока ворота откроются.

Читать далее

Создание баз данных за выходные

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

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

Базы данных являются одними из самых сложных частей программного обеспечения, задуманных с момента появления вычислительной эры более полувека назад. [1] Почти каждая часть технологии в конечном итоге касается базы данных в той или иной форме. Несмотря на повсеместность баз данных в программном стеке, подавляющее большинство разработчиков были приучены относиться к базам данных как к более или менее черному ящику — сложным плотным чарам программного обеспечения, созданным волшебниками и знатоками, укрывшимися в элитных рядах компаний, занимающихся базами данных, или в таких местах, как Google. Поговорка для остальных из нас, как она есть, — никогда не пытайтесь написать свою собственную базу данных .

Тем не менее, несмотря на их долговечность, мы наблюдаем постоянные инновации в этой области, которая впервые началась с появлением Hadoop около 2 десятилетий назад. На сайте ClickBench теперь перечислено более 50 баз данных в его наборе тестов [2]. И это только аналитические движки. С учетом последних тенденций переписывания всех больших данных на Rust [3] не проходит и месяца, чтобы интересный новый проект не оказался в тренде Hacker News. В этой статье мы рассмотрим, насколько легко (или сложно) создавать базы данных с помощью Apache Datafusion и можете ли вы, будучи простым смертным, на самом деле реально создать собственную базу данных и внедрить инновации вокруг опыта разработчика.

Читать далее

Небезопасный Rust сложнее C

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

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

В прошлом году я написал программу Photohash для индексации своего NAS и поиска дубликатов фото без использования хэширования, независимого от поворота изображения, и перцептивного хэширования. Чтобы полноценно задействовать все ядра процессора и диски, эта программа распределяет работу между воркерами, отвечающими за вычисления и ввод-вывод. Происходит это распределение по каналам, представляющим синхронизированные очереди задач.
Читать дальше →

Rust без прикрас: где мы ошибаемся

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

Привет, исследователи Rust! Сегодня хочу поделиться своим опытом (не всегда радужным) работы с Rust. Да, язык классный, безопасный, быстрый — все мы это знаем. Но, как и в любом инструменте, здесь есть свои подводные камни, на которые я благополучно наступал.

Читать далее

CBLT — безопасный, быстрый и минималистичный веб-сервер на языке программирования Rust

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

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

Чтобы погрузиться сильнее в язык, вместо пет-проекта я начинаю писать свои библиотеки для работы с базами данных (ORM), JSON, акторами, MVC веб-фреймворком, логированием и т.д. Библиотеки, которые вряд ли будут кому-то нужны, но они помогут мне лучше понять язык программирования. На удивление, с языком Rust я добрался до написания своего веб-сервера. Раньше такого не было. Думаю, это из-за того, что Rust — это язык системного программирования и грех на нём не попробовать заняться оптимизацией перформанса.

В итоге я столкнулся с тем, что Rust не имеет аналогов Nginx, Lighttpd, Caddy, HAProxy, Apache, Tomcat, Jetty и т.д. Все эти веб-сервера написаны на C, Go, Java и т.д. Имеются только веб-фреймворки: Actix, Axum, Rocket, Hyper и т.д.

В целом я прикинул, что обычно я использую Nginx для следующих целей:

1. TLS для доменов

2. Проксирование запросов на бэкэнд

3. Раздача статических файлов

В итоге решил написать свою реализацию веб-сервера на Rust.

Читать далее

[САТИРА] Ох, блин, во что ж ты вляпался в этот раз?

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

Перевод очень неоднозначного поста о популярном Гитхаб репозитории, или:

Уморительный рассказ о том, как ленивое воскресенье, лагучий браузер и стремление познать Раст, случайно произвели привлекательный графический монитор системы.

Читать далее

Разбираем выравнивание данных и структуру памяти в Rust

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

Мне нравится оптимизировать код — определение и исправление неэффективных участков кода приносит некое особое чувство удовлетворения в отличие от закидывания проблемы железом. Ведь последнее — пустая трата ресурсов и выбросов углерода!

В процессе моей работы я много раз оптимизировал использование памяти датафреймов Python. Не учитывая различные особенности, зачастую наиболее быстрым решением является понижающее приведение — к примеру, конвертация столбца нулей и единиц из int в bool. И хотя это срабатывает, недавно к своему удивлению я узнал, что булевы числа не всегда отображаются в качестве одиночных битов. Так как же отображаются типы данных в памяти?

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

Читать далее

Rust: безопасность памяти без потерь в скорости

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

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

Читать далее

Ближайшие события

Языки программирования, взорвавшие мой мозг

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

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

Я перечислю их в том порядке, в котором узнавал о них. В большинстве случаев я буду ассоциировать функциональность с языками, в которых они появились не впервые. Это не ошибка, я просто хочу показать, когда узнал об этих возможностях.
Читать дальше →

Cоревнования по программированию для тех, кто пишет на Rust

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

В этом году мы решили провести RustCon Contest — соревнования по программированию для тех, кто пишет на Rust или только начинает его изучать. Старички конференции помнят, что мы уже проводили его в далеком 2021. Интересно посмотреть, как изменились ваши скиллы за эти годы. В этом году мы проводим его вместе с компанией «Криптонит», которая предоставила задачи для участников.

Занявший 1 место получит билет на RuctCon и памятную футболку, обладатель 2 места — билет на RustCon, а бронзовый призер — футболку. Все остальные участники  — скидку 10% на RustCon 2024.

Читать далее

Асинхронный Rust в трех частях. Часть третья: IO

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

Конечно, async/await были придуманы не для сна. Нашей целью с самого начала был ввод‑вывод (I/O), а в особенности сетевой ввод‑вывод. Вооружившись futures и задачами, теперь мы можем перейти к реальным примерам.

Читать далее

Реализация режимов шифрования на языке RUST

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

После долгого перерыва мы возвращаемся в мир криптографических алгоритмов. В этот раз мы рассмотрим некоторые широко известные режимы шифрования блочных шифров, такие как ECB, CBC, CFB, OFB, CTR и подготовим небольшую архитектурную задумку, о которой я расскажу под катом.

Если вы еще не видели мои предыдущие статьи по алгоритмам хэширования "Streebog" и "SHA", советую ознакомиться — в этот раз будет сложнее.

Читать далее

Ускоряем браузерные вычисления на коленке с помощью WebAssembly на примере генерации шума

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

Так ли производителен WebAssembly в сравнении с JavaScript как о нем говорят? Какие подводные камни могут ожидать при попытке ускорить CPU-bound задачи и в каких ситуациях он must have? Автор предлагает рассмотреть один кейс и разобраться в этих вопросах на практике

Приступим

Использование Rust в серверах, написанных на других языках, для повышения производительности

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

В этой статье мы рассмотрим несколько стратегий по постепенному добавлению Rust в сервер, написанный на другом языке, например JavaScript, Python, Java, Go, PHP, Ruby и т. д. Один из возможных кейсов для подобного добавления — вы профилировали сервер, нашли «горячую» функцию, не соответствующую требованиям производительности из‑за боттлнека по CPU, а обычные техники мемоизации или оптимизации алгоритма были бы невозможны или малоэффективны по той или иной причине. После чего вы пришли к выводу, что стоит посмотреть в сторону реализации данной функции на что‑то написанное на более производительном языке, например на Rust. Отлично, данная статья для вас.

Читать далее

Асинхронный Rust в трех частях. Часть вторая: Tasks

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

Во введении мы сказали, что async/await это про futures и задачи. В первой части мы рассмотрели futures и теперь пришло время задач. Благо, мы с ними уже встречались, хоть мы их так и не называли.

Читать далее