Как стать автором
Обновить
51.88
Рейтинг

Rust *

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

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Заменяем глобальный аллокатор в Rust

Rust*
Tutorial

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


Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Просмотры2.7K
Комментарии 6

Новости

Показать еще

Работа с кучей в Rust

Rust*
Tutorial

Продолжаем изучать Rust нетрадиционным способом. В этом раз будем разбираться в нюансах работы с кучей, для их понимания понадобятся: сырые указатели, выделение памяти в куче, размер экземпляра типа, запись значений в кучу и чтение из нее, const и static, unit-like структуры, переопределение глобального аллокатора, печать стека вызовов.


Это, определенно, overkill для одной статьи, а вот половину списка вполне можно освоить.


Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Просмотры3.4K
Комментарии 9

Кроссплатформенная растеризация SVG — сравниваем библиотеки и экспериментируем

Блог компании 2ГИСРабота с векторной графикой*Разработка мобильных приложений*Геоинформационные сервисы*Rust*
Из песочницы

На карте 2ГИС очень много картинок — те же знаки дорожного движения и логотипы компаний. Графические API, которые в наши карты предоставляют Android и iOS, обычно не могут рисовать векторную графику напрямую, поэтому нам приходится её растеризовать. А так как мы заранее не знаем нужный размер картинки и не можем её растеризовать до сборки ресурсов, используем растеризаторы.

И если для 2ГИС на Android и iOS мы можем использовать платформенные решения, то затаскивать их в Mobile SDK было бы, мягко говоря, не очень правильно.

Под катом — небольшая история, как работает растеризация в мобильных 2ГИС и какое решение мы выбрали для Mobile SDK

Читать далее
Всего голосов 24: ↑24 и ↓0+24
Просмотры1.9K
Комментарии 6

Использование потоков WebAssembly из C, C++ и Rust

Блог компании RUVDS.comC++*C*Rust*WebAssembly*
Перевод


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

В этой статье вы узнаете, как использовать потоки WebAssembly для переноса многопоточных приложений, написанных на языках C, C++ и Rust, в веб-среду.
Читать дальше →
Всего голосов 38: ↑38 и ↓0+38
Просмотры5.7K
Комментарии 18

Rust 1.54.0: Поддержка SIMD инструкций в WebAssembly и инкрементальная компиляция снова включена по умолчанию

Open source*Программирование*Системное программирование*Компиляторы*Rust*
Перевод

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


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


rustup update stable

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


Что стабилизировано в 1.54.0


Этот выпуск содержит несколько новых возможностей языка.


  • Добавлены новые сценарии использования макросов
  • Стабилизированы компиляторные вставки на платформе wasm32
  • Инкрементальная компиляция по умолчанию
Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Просмотры3.9K
Комментарии 111

Конспектируем Книгу Rust:: Времена и структуры

Rust*
Tutorial

Продолжаем работать с 10.3.


КМБ.- Двойная жизнь.- Восстание мертвецов.- Ошибка в документации.- Ужасающие подробности из The Rustonomicon.- Архитектурные озарения.- Развязка.


Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Просмотры2.6K
Комментарии 2

Начало работы с MongoDB и Redis на Rust

NoSQL*MongoDB*Администрирование баз данных*Rust*
Tutorial

В этой статье будет показано как создать Rust бэкэнд, который использует MongoDB, документо-ориентированную БД, для хранения данных и Redis для кэширования, ограничения количества HTTP запросов и нотификаций пользователя. Для большей наглядности созданное приложение также будет предоставлять REST API. В итоге будет получена следующая архитектура:


architecture


MongoDB является хранилищем, в то время как Redis используется для следующего:


Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Просмотры2.9K
Комментарии 13

Сетевая безопасность — IPS с использованием BGP

Информационная безопасность*Сетевые технологии*Rust*

В вопросах именно сетевой безопасности функционально выделяются два компонента:

IDS - Intrusion Detection System, система обнаружения вторжений.

IPS - Intrusion Prevention System, система предотвращения вторжений, компонент, блокирующий злоумышленнику сетевой доступ к атакуемому приложения. Реализована эта система может быть как встроенная в приложение функция, настраиваемый пакетный фильтр на хосте, как фаерволл на периметре защищаемого сегмента сети или же обычный сетевой маршрутизатор с BGP. Вот про этот вариант сегодня и поговорим.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Просмотры2.7K
Комментарии 2

Конспектируем Книгу Rust:: Владение

Rust*
Tutorial

Перед вами краткое профессиональное описание особенностей языка Rust для профессионалов.


Что это такое?
  • краткое — информации будет гораздо меньше, чем в Книге (The Rust Programming Language)
  • профессиональное — информации будет гораздо больше, чем в Книге;
  • описание особенностей — фокусируемся на отличиях Rust от других языков;
  • языка — описывается именно язык, а не установка средств разработки, управление пакетами и прочий инструментарий;
  • для профессионалов — подразумевается, что читатель имеет существенный опыт в разработке ПО.

Чего здесь НЕ будет


  • Не будет агитации за Rust
  • Не будет легко. Для освоения потребуется неделя-другая вдумчивого чтения по часу в день, с тщательным разбором примеров, как-то так

Содержание


Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Просмотры5.9K
Комментарии 6

Какие изменения нужны языку Rust, чтобы писать асинхронный код стало проще

Блог компании МаклаудПрограммирование*Rust*
Перевод

Асинхронное программирование — мощный инструмент. Но экосистема Rust продолжает активно развиваться, и пока язык далёк от идеала. В частности, по этой причине многие считают, что асинхронное программирование в Rust — это боль. Однако некоторые не только критикуют, но и предлагают. Среди таких людей автор данной статьи. 

Здесь я расскажу о некоторых ранее предложенных идеях и свяжу их с новыми предложениями. Я проведу некий мысленный эксперимент и постараюсь ответить на вопрос «Что мы могли бы сделать с асинхронным программированием в Rust, если бы нам дали полный карт-бланш?». 

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

Потоки vs Асинхронность


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

Например, этот echo server написан с использованием потоков. Он работает быстрее своей асинхронной версии — для случая, когда количество одновременных подключений не превышает 100.
Читать дальше →
Всего голосов 43: ↑41 и ↓2+39
Просмотры10K
Комментарии 47

Rust 1.53.0: IntoIterator для массивов, "|" в шаблонах, Unicode-идентификаторы, поддержка имени HEAD-ветки в Cargo

Open source*Программирование*Системное программирование*Компиляторы*Rust*
Перевод

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


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


rustup update stable

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


Что было стабилизировано в 1.53.0


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

Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Просмотры3.5K
Комментарии 22

Юмористичный обзор Rust с перспективы JavaScript

Блог компании RUVDS.comНенормальное программирование*JavaScript*Rust*
Перевод

В этой статье я в несколько забавном ключе документирую кое-какие размышления о своем знакомстве с Rust с позиции прожженного энтузиаста JavaScript. Здесь вас ждет импровизированная прогулка по феодам Вестероса, встреча с Ланнистерами и даже замаскированный под остров корабль — занятные аналогии, которые можно провести с работой в этом языке.
Читать дальше →
Всего голосов 82: ↑74 и ↓8+66
Просмотры19K
Комментарии 16

extendr: вызываем rust из R (и наоборот)

R*Rust*

R, как и большинство подобных ему высокоуровневых скриптовых языков, часто полагается на код, написанный на более низкоуровневом языке. Библиотеки R - пакеты (packages) - нередко содержат код, написанный на C, C++ или FORTRAN. Нативный код позволяет обойти различные ограничения (например, однопоточность) и ускорить выполнение сложных алгоритмов за счет оптимизаций, попросту недоступных из самого R. Вся эта вычислительная мощь, тем не менее, получает удобный и совместимый с другими инструментами интерфейс на стороне R.

Разработка пакетов с C/ C++ кодом давно налажена благодаря сторонним библиотекам, включая {usethis}, {devtools}, {pkgbuild}, {cpp11} и т.д. Но что насчет других низкоуровневых языков? Ведь R всего-навсего динамически подгружает и вызывает библиотеки, поэтому если соблюсти все необходимые условия, можно, например, создать пакет с кодом, написанном на Rust. Несмотря на то, что на практике это действительно работает, разработка, поддержка и внедрение таких инструментов - довольно трудоемкий процесс. Точнее был трудоемким до этого момента.

Enter extendr, проект, который позволяет соединить R и Rust и с легкостью интегрировать Rust код в пакеты R, одновременно предоставляя возможность хостить R сессию в Rust. extendr находится в разработке довольно давно (больше полугода активной фазы) и представляет собой MVP (minimum viable product), но до сих пор был обделен вниманием. Rust-крейт уже какое-то время доступен на crates.io, а R-пакет ожидает проверки на CRAN.

extendr - отличный способ наладить взаимодействие между разработчиками, пишущими на Rust и R. Если вы знаете один из языков и хотели бы познакомиться со вторым, или же хотите портировать свои R-пакеты с проблематичных C/ C++ на модный Rust, добро пожаловать под cut.

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Просмотры912
Комментарии 0

Rust в ядре Linux

Блог компании МаклаудНастройка Linux*Rust*Разработка под Linux*
Перевод


В более ранней публикации  компания Google объявила, что в Android теперь поддерживается язык программирования Rust, применяемый в разработке этой ОС как таковой. В связи с этим авторы данной публикации также решили оценить, насколько язык Rust востребован в разработке ядра Linux. В этом посте на нескольких простых примерах рассмотрены технические аспекты этой работы.

На протяжении почти полувека C оставался основным языком для разработки ядер, так как C обеспечивает такую степень управляемости и такую предсказуемую производительность, какие и требуются в столь критичном компоненте. Плотность багов, связанных с безопасностью памяти, в ядре Linux обычно весьма низка, поскольку код очень качественный, ревью кода соответствует строгим стандартам, а также в нем тщательно реализуются предохранительные механизмы. Тем не менее, баги, связанные с безопасностью памяти, все равно регулярно возникают. В Android уязвимости ядра обычно считаются серьезным изъяном, так как иногда позволяют обходить модель безопасности в силу того, что ядро работает в привилегированном режиме.
Читать дальше →
Всего голосов 48: ↑46 и ↓2+44
Просмотры14K
Комментарии 16

Rust — сохраняем безразмерные типы в статической памяти

Системное программирование*Rust*

Не так давно в качестве хобби решил погрузиться в изучение embedded разработки на Rust и через какое-то время мне захотелось сделать себе логгер, который бы просто писал логи через UART, но который бы при этом не знал какая конкретно реализация используется. И вот тут я быстро осознал, именно в этом конкретном случае я не могу полагаться на статический полиморфизм и мономорфизацию, ведь компилятор не знает сколько нужно памяти выделять под конкретную реализацию. Фактически это означает, что нам нужно как-то уметь сохранять типы, размер которых неизвестен на этапе компиляции, и такой способностью обладает тип Box и для решения этой проблемы как раз и возникла идея написать свой аналог типа Box, но который сохраняет обьект не в куче, а в предоставленном пользователем буфере.

Читать дальше
Всего голосов 26: ↑26 и ↓0+26
Просмотры4.2K
Комментарии 14

BGPexplorer – машина времени для IP/MPLS сетей

Сетевые технологии*Rust*
Из песочницы

Современные сети, основанные на маршрутизации IP-пакетов, а точнее сервисы, которые они предоставляют, по факту управляются протоколом BGP. Этот протокол был спроектирован в конце 80-хх на трех салфетках. Да, с тех пор в этот протокол добавили массу возможностей, в том числе обмен маршрутной информацией VPN, правилами фильтрации трафика и всяким прочим полезным, но основа там осталась все той же, описанной на трех салфетках. И в этом есть свой плюс, потому что этот протокол в своей сути очень прост.

Но я хотел поговорить не о его простоте, а о "махании кулаками после драки", с которой частенько приходится сталкивать любой службе эксплуатации сети. Поступает жалоба на то что вот недавно что-то не работало. Или же что что-то сломалось и не очень ячно как же оно работало раньше. А узнать историю без дополнительного инструментария (или машины времени) нет возможности. Предлагаю рассмотреть такой инструмент.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Просмотры3.2K
Комментарии 6

Векторные языки — SQL интерпретатор в 100 строк

Блог компании Технологический Центр Дойче БанкаSQL*Rust*

В предыдущей статье я описал векторные языки и их ключевые отличия от обычных языков. На коротких примерах я постарался показать, как эти особенности позволяют реализовывать алгоритмы необычным образом, кратко и с высоким уровнем абстракции. В силу своей векторной природы такие языки идеально присоблены для обработки больших данных и в качестве доказательства в этой статье я полностью реализую на векторном языке простой SQL интерпретатор. А чтобы продемонстрировать, что программист на векторном языке может писать на векторном языке на любом языке, я реализую тот же самый интерпретатор на Rust. Преимущества векторного подхода столь велики, что даже интерпретатор в интерпретаторе сможет обработать select с группировкой таблицы в 100 миллионов строк за полминуты.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Просмотры6.9K
Комментарии 9

Как я влюбился в Rust и чего мне это стоило

Блог компании МаклаудПрограммирование*Совершенный код*Rust*Читальный зал

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


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


Хочу сразу заметить, что эта статья целиком и полностью — субъективное мнение автора, единственная цель которой — заинтересовать читателей, ценящих в программировании как хобби те же самые вещи, что и он сам, и речь в ней не пойдёт ни о быстродействии, ни о востребованности языка в сфере IT, ни о каких-либо других технических составляющих этой области, вокруг которой часто возникают разного рода споры. Я остановлюсь на том, что Rust — быстрый и безопасный компилируемый ЯП общего назначения. Об остальном — далее.

Читать дальше →
Всего голосов 80: ↑73 и ↓7+66
Просмотры22K
Комментарии 67

Введение в gRPC на Rust

Мессенджеры*API*Rust*Микросервисы*
Tutorial

В статье будет показано как создать gRPC сервер и клиент на Rust. Для большей наглядности клиент будет также Telegram ботом. В итоге будет получена следующая архитектура:



Статья является не всеобъемлющим руководством по gRPC в Rust, а скорее практическим гайдом, демонстрирующим основы и как создать приложение на основе gRPC.

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Просмотры2.9K
Комментарии 0

Вклад авторов