Обновить
64K+

Rust *

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

112,87
Рейтинг
Сначала показывать
Порог рейтинга

А ты такой холодный: представим технологии Rust-дебаггеров в виде айсберга

На верхушке айсберга видим технологии DWARF, PTRACE и ELF, а внизу — набор более редких технологий. 

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

PTRACE — системный вызов, который позволяет одному процессу (tracer) управлять и исследовать другой процесс (tracee).  

ELF (Executable and Linkable Format) — формат исполняемых двоичных файлов. 

DWARF (Debugging With Arbitrary Record Formats) — стандарт, описывающий формат .debug_xxx секций в ELF.

Что касается «подводных» технологий, упомянутых на картинке: применяя закон Парето, можно смело сказать что 80% знаний необходимы, чтобы реализовать только 20% функционала (и не самого важного). Но если хотите узнать о них больше, напишите в комментариях.

Подробнее о PTRACE, ELF и DWARF, а также о функциях, которые они реализуют в отладчиках на Rust, читайте в статье.

Теги:
Всего голосов 1: ↑1 и ↓0+2
Комментарии0
Из поста про Curl
Из поста про Curl

На Medium появилась видимо интересная, и/или примечательная, member-only статья https://medium.com/@Aaron0928/rusts-downfall-from-rising-star-to-rejected-by-major-projects-c3263daf2e9e про, как видно по тексту ссылки, Rust downfall.

Это представляется мне отличным объектом приложения сил ищущих что бы такое с Medium перевести.

Downfall, в пределах доступного мне начала текста, обосновывается отказами ряда заметных проектов от использования Rust, первым из которых выбран https://daniel.haxx.se/blog/2024/12/21/dropping-hyper/ - отказ от от написаного на Rust бэкенда в curl. Каким образом указанный текст позволяет увидеть downfall - мне понять не удалось, скорее просвечивает ubiquitous presence. Максимум - доказательство существования столь кривого С кода к которому Rust с разумными трудозатратами не прикручивается.

Случай, ИМХО, крайне интересен, поскольку может указывать на то, что либо сам Rust либо его растущая популярность кому-то начинают мешать.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Вышел Rust 1.84. Стабилизировано

[resolver]
incompatible-rust-versions = "fallback"

Стабилизировано начало миграции на новый trait solver, что исправляет ошибки преимущественно теоретического характера, простых смертных просят не беспокоиться.

Добавлен strict provenance API, позволяющий превращать указатели в целые числа и обратно с особым изяществом.

Стабилизированы четыре десятка API и во всей троице Rust, Cargo и Clippy куча мелких изменений.

Подробности под катом на rust-lang.org. Телеграмм канала не держу, подписывайтесь куда нравится.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Не знаю на сколько это свежая новость ибо прочитал в новостях, но факт занимательный. JetBrains (опять) изменила лицензирование сделав IDE для Rust, JavaScript, C# и тестирования бесплатными для некоммерческого использования.

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

Теги:
Всего голосов 2: ↑1 и ↓1+1
Комментарии3

Всем привет! Кто хочет поучиться кодить на Rust присоединившись к Open Source проекту?
Проект rustsn представляет собой инструмент на языке Rust, который выполняет следующие функции:

  • Генерация, компиляция и тестирование кода с использованием моделей машинного обучения (LLMs).

  • Разрешение зависимостей.

  • Предоставление объяснений существующего кода с помощью встраиваний (embeddings).

https://github.com/evgenyigumnov/rustsn

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

Представлен выпуск Aura 4.0.0. Это проект пакетного менеджера для дистрибутива Arch Linux, расширяющий возможности штатного пакетного менеджера Pacman.

Проект создан в 2012 году и изначально был нацелен на предоставление средств для сборки пакетов для репозитория AUR (Arch User Repository), применяемого для распространения сторонними разработчиками своих пакетов, не входящих в основные репозитории дистрибутива Arch Linux.

Код проекта распространяется под лицензией GPLv3.

Кроме специфичных для AUR функций в Aura также предоставляются и другие возможности, расширяющие функциональность Pacman (в настоящее время только 1/3 расширенных возможностей Aura связаны с AUR). Например, доступны средства для наглядного анализа зависимостей, работы со снапшотами наборов пакетов (для сохранения и восстановления состояния), управления остаточными зависимостями и отката отдельных пакетов или всей системы на прошлые версии.

Aura полностью обратно совместим с Pacman и поддерживает все его команды и опции. Связанные с AUR дополнительные возможности вызываются через указание опции командной строки «‑A», а средства работы со снапшотами и версиями через опции «‑B» и «‑С», не пересекающиеся с опциями Pacman.

В Aura 4.0.0 переведена вся кодовая база с Haskell на язык Rust. Смена языка позволила значительно повысить производительность, упростить установку, задействовать готовые Rust-биндинги к libalpm, сделать проект более привлекательным для новых разработчиков.

Источник: OpenNET.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

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

Среди заметных новых программных работ в Redox OS — запуск Simple HTTP Server в качестве первого веб-сервера (HTTP) для платформы. Сам Simple HTTP Server также написан на Rust. Также ведутся постоянные усилия по переносу Apache HTTP-сервера в Redox OS.

Ещё одним важным достижением приложения является программа wget, которая теперь работает в Redox OS. Также была проделана большая работа по запуску настольных приложений COSMIC в Redox OS, внесены улучшения в системы сборки, продолжалась работа по созданию более сложных программ в Rust, улучшение ядра ARM64, улучшения UEFI и различные исправления драйверов.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

Разработчик Химаншу Сингх (Himanshu Singh) представил простую версию использования команды grep для Rust (minigrep) и объяснил свои действия в нескольких коммитах.

Теги:
Всего голосов 4: ↑2 и ↓2+2
Комментарии2

Некоммерческий удостоверяющий центр Let's Encrypt объявил о переходе на использование NTP-сервера ntpd-rs на языке Rust. Проект распространяется под лицензиями Apache 2.0 и MIT, полностью поддерживает протоколы NTP и NTS (Network Time Security) на уровне клиента и сервера, и может использоваться в качестве замены NTP-серверам chrony, ntpd и NTPsec.

Пакет ntpd-rs разработан в рамках проекта Prossimo, развивающегося под эгидой организации ISRG (Internet Security Research Group), которая является учредителем Let's Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета. Помимо ntpd-rs проект также ведёт разработку TLS-библиотеки Rustls, DNS-сервера Hickory, обратного прокси River, утилиты sudo-rs и компонентов для ядра Linux на языке Rust.

Использование ntpd-rs повысит защищённость инфраструктуры Let’s Encrypt и снизит вероятность появления уязвимостей, вызванных ошибками при работе с памятью. Кроме того, безопасность и надёжность системы синхронизации точного времени важна, так как манипуляции злоумышленников с установкой неверного времени могут использоваться для нарушения безопасности протоколов, учитывающих время, таких как TLS и интерпретации данных о действии TLS-сертификатов.

Let's Encrypt ежедневно генерирует более четырёх миллионов новых сертификатов. Число активных сертификатов составляет 372 млн (сертификат действует три месяца).

Источник: OpenNET.

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

Организация Rust Foundation опубликовала статистику, в соответствии с которой из 127 тысяч значительных пакетов, представленных в каталоге crates.io, более 24 тысяч (19.11%) используют ключевое слово unsafe для включения возможностей, допускающих небезопасную работу с памятью в отдельных блоках кода, таких как разыменование указателей, вызов внешних функций или изменение статических переменных. 34.35% пакетов совершают прямые вызовы функций из других crate-пакетов, в которых используется unsafe.

Отмечается, что в большинстве случаев использование unsafe обусловлено вызовом кода, написанного на других языках или обращения к библиотекам на С/C++. Пакетом с наибольшим числом вызовов в контексте unsafe признан развиваемый компанией Microsoft crate-пакет windows, являющийся обвязкой над API платформы Windows. Данный пакет насчитывает 36 млн. загрузок. Unsafe также используется в самых популярных пакетах syn (470 млн загрузок), proc-macro2 (354 млн загрузок) и libc (345 млн загрузок).

Для выявления проблем в коде, выполняемом в контексте unsafe, проектом развивается интерпретатор  Miri, позволяющий определять обращения вне границ буферов, использование памяти после её освобождения, некорректное использование неинициализированных данных, нарушение инвариантность базовых типов (например, несоответствие bool значениям 0 или 1), нарушение правил владения объектами, возникновение состояний гонки и утечки памяти.

Источник: OpenNET.

Теги:
Всего голосов 4: ↑4 и ↓0+8
Комментарии0

10 мая 2024 года Cloudflare представила второй публичный релиз открытого проекта Pingora v0.2.0. Это асинхронный многопоточный фреймворк на Rust, который помогает создавать прокси-сервисы HTTP. Проект используется для создания сервисов, обеспечивающих значительную часть трафика в Cloudflare (вместо применения Nginx). Исходный код Pingora опубликован на GitHub под лицензией Apache 2.0.

Pingora предоставляет библиотеки и API для создания сервисов поверх HTTP/1 и HTTP/2, TLS или просто TCP/UDP. В качестве прокси-сервера он поддерживает сквозное проксирование HTTP/1 и HTTP/2, gRPC и WebSocket. (Поддержка HTTP/3 — в планах). Pingora также включает в себя настраиваемые стратегии балансировки нагрузки и аварийного переключения. Чтобы соответствовать требованиям и безопасности он поддерживает как широко используемые библиотеки OpenSSL, так и BoringSSL, которые соответствуют требованиям FIPS (федеральных стандартов обработки информации США) и пост-квантового шифрования.

Изменения в новой версии:

  • добавлена поддержка установки фильтров для дополнительных заголовков HTTP/2;

  • добавлена возможность изменения размера буфера входящих пакетов для TCP;

  • добавлена функция body_bytes_read();

  • добавлен фильтр cache_not_modified_filter;

  • добавлена возможность ведения лога TLS-ключей;

  • добавлена callback-функция purge_response.

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

Теги:
Всего голосов 3: ↑3 и ↓0+6
Комментарии0

Организация ISRG (Internet Security Research Group), учредитель проекта Let's Encrypt и развивающая технологии для повышения защищённости интернета, представила проект zlib-rs по созданию защищённого аналога библиотеки сжатия данных zlib.

Исходный код zlib-rs написан на языке Rust и распространяется под лицензией Zlib. Разработка ведётся с оглядкой на проект zlib-ng, развивающий высокопроизводительный вариант zlib. Представлены две библиотеки: zlib-rs с реализаций API zlib, не использующей unsafe-блоки и libz-rs-sys - надстройка с C API, содержащая код в режиме unsafe.

В качестве причины создания zlib-rs упоминается намерение предоставить вариант zlib, избавленный от потенциальных проблем, вызванных ошибками при работе с памятью.

По данным компаний Microsoft и Google около 70% уязвимостей вызваны небезопасной работой с памятью. Предполагается, что использование языка Rust для разработки zlib-rs позволит снизить риск появления уязвимостей, вызванных небезопасной работой с памятью, и исключить появление таких ошибок, как обращение к области памяти после её освобождения и выход за границы буфера.

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

Источник: OpenNET.

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

27 и 28 марта в Лондоне проходила конференция Rust Nation 24. На конференции выступал Ларс Бергстром [Lars Bergstrom], который занимает в Google пост технического директора. Доклад Ларса носил название «Beyond Safety and Speed: How Rust Fuels Team Productivity» (дословно «Кроме безопасности и скорости: как Rust заряжает команду продуктивностью»).

Во время выступления технический директор Google заявил, что команды Rust в Google в два раза продуктивнее команд C++. Этот мощный посыл успел разлететься фотографией с конференции.

TotempaaltJ

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

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

Слегка портит картину то, что Бергстром — это ещё и председатель совета директоров Rust Foundation, поэтому делать такие заявления он непосредственно заинтересован.

На записи видеотрансляции с конференции обсуждение деталей производительности идёт с отметки 7:30:13.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии2

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

7 марта 2024 года состоялся релиз Boa v0.18 — экспериментального лексера, парсера и компилятора Javascript, а также движка ECMAScript, написанного на языке программирования Rust.

Исходный код проекта выложен на GitHub под лицензией MIT License.

Новая версия Boa позволяет легко встраивать JS-движок в различные проекты, и а также использовать его из WebAssembly и командной строки.

Разработчики пояснили, что этот выпуск Boa также знаменует собой серьёзное обновление дизайна сайта проекта и появление нового логотипа.

«Поскольку Boa используется всё большим количеством проектов, важно, чтобы мы могли предоставить стабильный и надёжный API. Нам кажется, что мы ещё не достигли этого результата, но после обсуждения с командой мы решили нацелиться на выпуск версии 1.0 в ближайшем будущем. Это станет для нас важной вехой, и мы надеемся, что к тому времени у нас будет много новых функций и улучшений», — пояснили разработчики проекта.

Впервые проект Boa был представлен на конференции JSConf EU 2019 разработчиком Джейсоном Уильямсом.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Опубликован релиз языка программирования общего назначения Rust 1.76, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation.

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

Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.

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

Релиз Rust 1.75 состоялся в конце декабря 2023 года.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Microsoft ищет разработчиков для переписывания части своих сервисов с C# на Rust.

Согласно опубликованной вакансии архитектора, в Microsoft намерены переписать с использованием языка Rust ключевые сервисы Microsoft 365, изначально написанные на языке C#.

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

Ранее компания Microsoft использовала язык Rust для разработки компонентов ядра Windows 11.

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

В списке рассылки разработчиков ядра Linux возобновилось начатое шесть лет назад обсуждение перспектив использования современного кода на C++ в ядре Linux, помимо нынешнего применения языка С, ассемблерных вставок и продвижения языка Rust.

Изначально тема разработки ядра на C++ была поднята в 2018 году инженером из Red Hat, который первого апреля в качестве шутки опубликовал набор из 45 патчей для использования шаблонов, наследуемых классов и перегрузки функций C++ в коде ядра.

С инициативой продолжения обсуждения выступил Ганс Питер Анвин (Hans Peter Anvin), один из ключевых разработчиков ядра в компании Intel и создатель таких проектов, как syslinux, klibc и LANANA, разработавший для ядра Linux систему автомонтирования, реализацию RAID 6, драйвер CPUID и x32 ABI. По мнению Анвина, который является автором многочисленных макросов и ассемблерных вставок в ядре, с 1999 года языки С и С++ значительно продвинулись вперёд в своём развитии, а язык С++ стал лучше подходить для разработки ядра операционных систем, чем С.

Анвин считает, что C++ более предпочтителен, чем Rust, так как последний существенно отличается от языка С по синтаксису, непривычен для текущих разработчиков ядра и не позволяет постепенно переписывать код (в случае языка С++ можно по частям переводить код с языка C, так как С-код можно компилировать как C++). В поддержку использования С++ в ядре также выступили Иржи Слаби (Jiri Slaby) из компании SUSE и Дэвид Хауэллс (David Howells) из Red Hat.

Источник: OpenNET.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

Рабочая группа Rust Embedded, созданная для разработки технологий повышения качества и безопасности приложений, прошивок и драйверов к встраиваемым системам, представила первый выпуск фреймворка embedded-hal, предоставляющего набор программных интерфейсов для взаимодействия с периферией, обычно применяемой с микроконтроллерами (например, предоставляются типажи для работы с GPIO, UART, SPI и I2C). Наработки проекта написаны на языке Rust и распространяются под лицензией Apache 2.0.

Пакет подходит для написания на языке Rust универсальных драйверов для различных датчиков, экранов, приводов и сетевых адаптеров, не привязанных к конкретным моделям микроконтроллеров. Созданный на базе embedded_hal драйвер можно использовать с любыми микроконтроллерами, для которых в пакете предоставляется HAL-прослойка. Пакет также предоставляет гибкую встроенную систему обработки ошибок — для каждого типа ошибок предусмотрено наличие типажа Error, поддерживающего средства для отладки и отслеживания причин появления ошибок.

Embedded‑hal 1.0 помечен как первый стабильный выпуск проекта, который можно использовать для создания рабочих драйверов.

Источник: OpenNET.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Вышел проект Maestro по разработке на Rust легковесного Unix-подобного ядра, реализующего подмножество системных вызовов ядра Linux, достаточное для создания типовых рабочих окружений. Проект был создан в 2018 году и вначале использовал язык C, но в 2020 году был полностью перезапущен с нуля с учётом накопленного опыта и перешёл на Rust для снижения вероятности совершения ошибок, возникающих при работе с памятью.

Код проекта распространяется под лицензией MIT. Помимо ядра проектом на языке Rust также развиваются X11-сервер, пакетный менеджер, загрузчик, инсталлятор, наборы утилит и другие компоненты, необходимые для построения операционной системы.

Ядро на Rust имеет монолитную архитектуру и пока поддерживает только системы x86 в 32-разрядном режиме. Кодовая база ядра насчитывает 48.8 тыс. строк кода (для сравнения в ядре Linux - 33 млн. строк кода). Возможен запуск в QEMU, VirtualBox или поверх оборудования. На текущем этапе развития в Maestro реализован 31% (135 из 437) системных вызовов Linux, чего достаточно для загрузки консольного окружения на базе bash и стандартной С-библиотеки Musl. В окружении на базе Maestro также могут выполняться некоторые утилиты из набора GNU coreutils, такие как ls, cat, mkdir, rm, rmdir, uname и whoami.

Источник: OpenNET.

Теги:
Всего голосов 15: ↑15 и ↓0+15
Комментарии1

На GitHub вышел проект загрузчика файлов (file downloader) Caracal, написанный на языке программирования Rust.

Исходный код проекта Caracal распространяется под свободной лицензией GNU.

Текущая версия утилиты Caracal имеет поддержку HTTP/HTTP, SFTP и MinIO.

Для сборки Caracal необходимы инструменты и пакеты:rustc, cargo, pkg-config и libgit2.

Пример использования Caracal:

# show usage
caracal help

# download a file from HTTP server
caracal https://www.rust-lang.org/

# download multiple files from HTTP server
caracal https://example.com/a.tar.gz https://example.com/b.zip

# copy a file from local file system
caracal /etc/os-release

# download a file from SFTP server
caracal sftp://my-ssh-server/etc/os-release

# copy a file from MinIO server
caracal minio://myminio/path/to/file

# download multiple files from different services
caracal \
    /etc/os-release \
    https://example.com/a.tar.gz \
    sftp://my-ssh-server/etc/os-release \
    minio://myminio/path/to/file

# download multiple files from different services and put them in directory /tmp/downloads
mkdir -p /tmp/downloads && \
    caracal -D /tmp/downloads \
        /etc/os-release \
        sftp://my-ssh-server/etc/os-release \
        minio://myminio/path/to/file \
        https://example.com/a.tar.gz

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0