LINUX.ORG.RU

Rust


248

19

Всего сообщений: 119

ttf-parser 0.5 — новая библиотека для работы с TrueType шрифтами

Группа Open Source

ttf-parser — это библиотека для разбора TrueType/OpenType шрифтов. В новой версии появилась полноценная поддержка переменных шрифтов (variable fonts) и C API, вследствие чего я решил прорекламировать её на лоре.

До недавнего времени, если была необходимость работы с TrueType шрифтами, было ровно два варианта: FreeType и stb_truetype. Первый является огромным комбайном, второй поддерживает довольно небольшое количество функций.

ttf-parser находится где-то посредине. Он поддерживает все те же TrueType таблицы (формат TrueType состоит из множества отдельных бинарных таблиц) что и FreeType, но не занимается отрисовкой самих глифов.

При этом, ttf-parser содержит множество других значительных отличий:

  1. ttf-parser написан на Rust без использования unsafe. FreeType и stb_truetype написаны на C.
  2. ttf-parser является единственной безопасной (memory-safe) реализацией. Чтение произвольной памяти невозможно. Во FreeType постоянно исправляют уязвимости, а stb_truetype в принципе не предназначен для чтения произвольных шрифтов.
  3. ttf-parser является единственной thread-safe реализацией. Все методы парсинга константны. Единственным исключением является задание координат для переменных шрифтов, но эта функция reentrant. FreeType в принципе однопоточный. stb_truetype - reentrant (можно использовать отдельные копии в разных потоках, но не одну из множества).
  4. ttf-parser является единственной реализацией не использующей аллокации в «куче». Это позволяет ускорить разбор и избежать проблем при OOM.
  5. Также, почти все арифметические операции и приведение числовых типов проверяются (в том числе статически).
  6. В самом худшем случае библиотека может бросить исключение. При этом в C API исключения будут перехвачены и функция вернёт ошибку, но не упадёт.

И несмотря на все гарантии безопасности, ttf-parser также является и самой быстрой реализацией. Например разбор CFF2 в 3.5 раза быстрее чем в FreeType. Разбор glyf тем временем на 10% медленнее чем в stb_truetype, но это из-за того, что он не поддерживает переменные шрифты, для реализации которых требуется хранить доп. информацию. Больше подробностей в README.

>>> Подробности

 ,

RazrFalcon
()

«All the Music, LLC» сгенерировали все возможные мелодии и освободили их

Группа Мультимедиа

Дэмиэн Рил, юрист, программист и бакалавр музыки, и Ноа Рубин, музыкант, (Damien Riehl, Noah Rubin) написали программу, которая сгенерировала все возможные короткие 12-тактные мелодии, использующие 8 нот в пределах октавы (около 69 миллиардов комбинаций), зарегистрировали их от имени своей компании All the Music, LLC и передали в общественное достояние. Выложили на archive.org 1200 Gb в архивах tar.gz по несколько сотен мелодий. (Проблема в архивах: сняты все биты разрешений, может понадобиться chmod -R a+rw.)

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

Сама программа, перебирающая сочетания нот, выложена на GitHub под лицензией Creative Commons-Share Alike 4.0. Язык — Rust. Авторы сравнивают её работу с брутфорсом паролей, 300 000 комбинаций в секунду.

Новость на vice.com

Рил объясняет, что число мелодий конечно, YouTube

>>> Новость на opennet.ru

 , , , , перебор

question4
()

Проблемы свободы проекта Rust

Группа Open Source

Опубликована статья на wiki проекта Hyperbola, в которой рассматриваются проблемы языка Rust в контексте свободы программного обеспечения, а также необходимость развития в независимом от политик торговых марок Mozilla Corporation (субсидиар Mozilla Foundation, годовой доход порядка 0.5 миллиарда долларов).

Одной из рассматриваемых в статье проблем является тот факт, что в отличии от C, Go, Haskell и прочих языков программирования, Rust ― является торговой маркой, а не названием языка программирования, разрешенным к употреблению без согласия Mozilla Corporation.

>>> Подробности

 ,

anonymous
()

Релиз языка программирования Rust 1.39

Группа Разработка

Rust — мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla, сочетающий парадигмы функционального и процедурного программирования с объектной системой, основанной на типажах, и с управлением памятью через понятие «владения».

Что нового в версии 1.39:

  • стабилизирован новый синтаксис асинхронного программирования, основанный на функции «async», блоке async move { … } и операторе «.await»;
  • разрешено указание атрибутов при определении параметров функций, замыканий и указателей на функции. Поддерживаются атрибуты условной компиляции (cfg, cfg_attr), управляющие диагностикой через lint и вспомогательные атрибуты вызова макросов;
  • стабилизирован «#feature(bind_by_move_pattern_guards)», который позволяет использовать переменные с типом привязки «by-move» в шаблонах;
  • предупреждения о проблемах при проверке заимствования переменных c использованием NLL переведены в разряд фатальных ошибок;
  • в пакетный менеджер cargo добавлена возможность использования расширения «.toml» для файлов конфигурации.

С полным списком изменений можно ознакомиться на сайте разработчика.

>>> Источник

 ,

Satori
()

Lemmy — федеративный социальный новостной агрегатор

Lemmy — федеративный социальный новостной агрегатор
Группа Open Source

Lemmy создан как альтернатива сайтам вроде Reddit, Lobste.rs, Raddle или Hacker News: можно подписываться на интересующие вас темы, публиковать ссылки и обсуждения, а затем голосовать и комментировать.

Но есть важное отличие: любой пользователь может запустить свой сервер, который, как и все другие, будет подключен к одной и той же «вселенной», называемой Fediverse. Пользователь, зарегистрированный на одном сервере, может подписаться на темы на любом другом сервере и может вести обсуждения с пользователями, зарегистрированными в других местах.

На каждом из lemmy-серверов может быть установлена собственная политика модерации и назначены модераторы для борьбы с токсичными троллями.

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

>>> Подробности

 , ,

anonymous
()

Вышел Rust 1.37.0

Группа Разработка

Среди нововедений:

  • Разрешено ссылаться на варианты enum через псевдонимы типов (type aliases), например через Self.
  • cargo vendor теперь входит в стандартную поставку.
    • С помощью cargo vendor можно явно скачивать и использовать полную копию всех исходных кодов всех зависимостей. Это полезно для компаний с монорепозиториями, которые хотели бы хранить и анализировать весь исходный код, используемый в их ПО.
  • Поддержка const _:.
  • Поддержка Profile Guided Optimization.
  • Поддержка #[repr(align(N))] для лучшего контроля над выравниванием в Enum.
  • Изменения в стандартной библиотеке.
  • Изменения в Clippy
  • Microsoft и Amazon стали спонсорами Rust, предоставив облачную инфраструктуру для сборки и тестирования Rust.

>>> Анонс

 ,

vertexua
()

Опубликован способ обхода borrow checker в Rust

Группа Разработка

Jakub Kądziołka опубликовал proof-of-concept, показывающий непосредственные проблемы, связанные с ошибкой в проекте компилятора Rust, которую разработчики безуспешно пытаются решить уже на протяжение четырех лет.

Пример, разработанный Jakub, позволяет обойти Borrow Checker посредством очень простого трюка:

fn main() {
    let boom = fake_static::make_static(&vec![0; 1<<20]);
    println!("{:?}", boom);
}

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

>>> Подробности

 

anonymous
()

Vector 0.3.0

Vector 0.3.0
Группа Open Source

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

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

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

( читать дальше... )

>>> Подробности

 ,

euZ3meep
()

Rust 1.36

Группа Разработка

Команда разработчиков с радостью представляет вам Rust 1.36!

Что нового в Rust 1.36? Стабилизирован трейт Future, из нового: крейт alloc, MaybeUninit<T>, NLL для Rust 2015, новая реализация HashMap<K, V> и новый флаг --offline для Cargo.

( За подробностями )

>>> Подробности

 

snake266
()

resvg 0.7 — библиотека отрисовки SVG

Группа Open Source

Вышел новый, значительный релиз библиотеки для растеризации SVG - resvg.

( читать дальше... )

>>> Репозиторий

 , ,

RazrFalcon
()

Rust 1.35

Группа Разработка

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

Если у вас уже установлен Rust через rustup,то можно обновиться командой: $ rustup update stable

Главное в обновлении - это реализиция трейтов замыкания Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно. Добавление возможности приводить замыкания к указателям на небезопасные функции, вызов макроса dbg!() теперь возможен без аргументов, была проведена стабилизация стандартной библиотеки.

( читать дальше... )

>>> Подробности

 

snake266
()

Rust 1.34

Группа Разработка

Вышел релиз 1.34 языка системного программирования Rust, развиваемого проектом Mozilla.

Ключевое-долгожданное:

  • Начиная с этого выпуска, Cargo может поддерживать альтернативные реестры. (Эти реестры сосуществуют с crates.io, так что вы можете писать программы, которые зависят и от crates.io и от вашего реестра.)
  • Трейты TryFrom и TryInto были стабилизированы для поддержки ошибок при преобразовании типов.

>>> Полный анонс

 ,

DAGAZ
()

resvg 0.5 — библиотека отрисовки SVG

Группа Open Source

resvg — это библиотека для отрисовки SVG, прямыми аналогами которой являются librsvg и QtSvg. Но в отличие от них, resvg поддерживает отрисовку с помощью нескольких бэкендов (Qt и cairo) и обеспечивает более полную поддержку стандарта. Также resvg является модульным, что позволяет использовать лишь нужные функции.

Основные изменения:

  • Это bugfix релиз, поэтому в нём множество исправлений.
  • Добавлена поддержка marker.
  • Добавлена частичная поддержка baseline-shift, letter-spacing и word-spacing.
  • Добавлены плагины для использования resvg в качестве генератора превью в Dolphin и в Windows Explorer.
  • Добавлено 143 новых теста. Общее количество достигло 958-и.

Результаты тестирования. Сравнительная таблица. Список нереализованных возможностей.

Так как marker был успешно реализован, до полной поддержки static SVG осталось реализовать textPath, Unicode BIDI (left-to-right, top-to-bottom, glyph orientation и т.д.) и несколько фильтров.

>>> GitHub

 , ,

RazrFalcon
()

resvg 0.4 — библиотека отрисовки SVG

Группа Open Source

resvg — это библиотека для отрисовки SVG, прямыми аналогами которой являются librsvg и QtSvg. Но в отличие от них, resvg поддерживает отрисовку с помощью нескольких бэкендов (Qt и cairo) и обеспечивает более полную поддержку стандарта. Также resvg является модульным, что позволяет использовать лишь нужные функции.

( читать дальше... )

>>> Подробности

 , ,

RazrFalcon
()

Rust 1.31.0 (2018)

Группа Разработка

Команда Rust объявила о выходе новой стабильной версии Rust 1.31.0, который ознаменует собой также выход новой редакции «Rust 2018». Rust — это язык программирования, который позволяет каждому создавать надежное и эффективное программное обеспечение.

Если у вас установлена предыдущая версия Rust, обновиться до Rust 1.31.0 проще всего следующим образом:

rustup update stable

( читать дальше... )

>>> Подробности

 , rust2018

dotcoder
()

Первая международная конференция по Rust в России - Москва, 15-16 декабря - RustRush 2018

Группа Конференции и встречи

15-16 декабря в отеле «Новотель Москва Сити» пройдёт международная конференция для разработчиков на Rust — RustRush 2018.

В программе 2 дня. В субботу, 15 декабря — доклады; в воскресенье, 16 декабря — воркшопы.

Заявлено 12 докладчиков из разных стран, среди них 4 докладчика из Rust Team: Стив Клабник, Эшли Уильямс, Паскаль Хертляйф и Катарина Фей. Список докладчиков.

Основные темы конференции — веб, блокчейн, системное программирование и высокая производительность. Полная программа.

Будет 2 воркшопа. Стив Клабник и Эшли Уильямс проведут воркшоп об использовании связки Rust и WebAssembly, а Артём Павлов (основатель проекта RustCrypto) — о криптографии на чистом Rust.

В стоимость билета входит набор сувениров с символикой Rust и конференции в пакете участника, а также кофе-брейки и фуршет.

Предусмотрена скидка для студентов — 50%. Используйте промокод «STUDENT». В случае использования этой скидки, на входе нужно будет показать действующий студенческий билет.

Также предусмотрена скидка для участников сообщества Linux.org.ru — 20%. Используйте промокод «LINUX».

Купить билет.

>>> Подробности

 , , ,

mkpankov
()

Pijul 0.11

Группа Open Source

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

Pijul развивает идеи Darcs — Pijul быстрее, лучше, в нём решена проблема экспоненциальной сложности слияния и поддерживаются ветки (для всех, кто спросил и еще спросит «чем оно лучше Git» - ссылка на FAQ)

Слово «Pijul» (произносится «пихуль») — это мексиканское названия Бороздчатоклювого ани, вида птиц семейства кукушковых, чьи особи совместно работают над строительством гнёзд.

Улучшения в версии 0.11:

  • Добавлено частичное клонирование подкаталогов: pijul clone --path и pijul pull --path. При этом скачиваются только те патчи, которые затрагивают указанный подкаталог.
  • Добавлен парсер ~/.ssh/config — теперь Pijul будет автоматически использовать настройки псевдонимов хостов, SSH-прокси, ключей и т. д.
  • Внутренняя архитектура переведена на использование библиотеки Tokio — де-факто стандарта для асинхронного программирования на языке Rust. Минус велосипеды, новичкам будет проще разобраться в коде Pijul.
  • Исправлено много мелких и две крупные ошибки. Одна из них приводила к падению производительности при использовании pijul record, другая в некоторых случаях приводила к изменении содержимого патчей и файлов после клонирования.

Для нужд Pijul автором также развиваются вспомогательные библиотеки:

  • Thrussh — реализация клиента и сервера SSH на языке Rust.
  • Pleingres — клиентская библиотека, реализующая сетевой протокол PostgreSQL на языке Rust.
  • Sanakirja — хранилище «ключ-значение» на языке Rust, основанное на B-деревьях и поддерживающее транзации (аналог LMDB). «Sanakirja» по-фински означает «словарь».

Автор также разрабатывает Pijul Nest — аналог GitHub на основе Pijul и Rust. К сожалению, Nest пока не является свободным проектом.

>>> Подробности

 , , ,

Begpoug
()

Требуется помощь в тестировании Rust 2018

Группа Разработка

В июле этого года начались обсуждения вокруг Rust 2018. Вкратце, запускается цикл долгосрочных этапов, называемых «Выпусками», вокруг которых, в рамках обычных 6-недельных циклов разработки, будут сосредоточены все улучшения и работы: в библиотеках, инструментах и документации Rust. Новые выпуски будут выходить примерно раз в три года: Rust 1.0 был выпуском «Rust 2015», а предстоящий Rust 1.31 будет выпуском «Rust 2018». Каждому выпуску посвящён свой предмет: в Rust 2015 — это была стабильность, в Rust 2018 — это продуктивность.

Rust 2018 уже тестируется некоторое время, и всё выглядит довольно неплохо. До следующей стабильной версии Rust 1.31 ещё есть 6 недель, в связи с чем, разработчики просят попробовать бета-версию.

Есть два способа попробовать Rust 2018: обновить текущий проект, или начать новый. Подробная информация есть в руководстве по выпуску, ниже же приведена быстрая и упрощенная версия.

Разработчики просят сообщать им о всех проблемах, которые возникнут у вас во время тестирования.

( Установка Rust-бета )

( Начало нового проекта )

( Преобразование существующего проекта )

>>> Подробности

 

dotcoder
()

Релиз Rust 1.30

Группа Разработка

Что нового:

  • Rust 1.30 расширяет функционал процедурных макросов, добавляя возможность определять атрибутные процедурные макросы и функциональные процедурные макросы.
  • Теперь можно импортировать макросы в область видимости с помощью ключевого слова use.
  • Стабилизирован пакет proc_macro, который дает API, необходимый для написания процедурных макросов. В нем также значительно улучшили API для обработки ошибок, и такие пакеты, как syn и quote уже используют его
  • Два новых улучшения в использовании use: во-первых, внешние пакеты теперь добавляются в prelude, во-вторых, use стал поддерживать импорт элементов в текущую область видимости с путями, которые начинаются на crate.
  • Сырые идентификаторы
  • В Rust 1.30 можно использовать атрибут #[panic_handler] для самостоятельной реализации паники. Теперь можно создавать приложения, а не только библиотеки, которые не используют стандартную библиотеку.
  • В макросах теперь можно сопоставлять модификаторы области видимости, такие как pub, с помощью спецификатора vis.
  • «инструментальные атрибуты», такие как #[rustfmt::skip], теперь стабилизированы.
  • стабилизирован ряд API в стандартной библиотеке
  • В Cargo теперь есть индикатор выполнения

>>> Подробности

 

Anper
()

Rust 1.29

Группа Mozilla

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

Что вошло в стабильную версию 1.29.0

1.29 привносит не очень много изменений. Ожидается что Rust 1.30 и 1.31 будут очень значительными, так что большая часть 1.29 итерации ушла на подготовку к будущим изменениям. Два самых заметных нововведения этого выпуска даже не касаются самого языка: это две новые возможности Cargo и обе они касаются предупреждений.

  • cargo fix автоматически исправляет предупреждения в коде
  • cargo clippy - статический анализатор Rust кода, помогающий поймать распространенные ошибки и просто улучшить код

cargo fix

С выпуском Rust 1.29 у Cargo появляется новая подкоманда: cargo fix. Если вы когда-либо писали на Rust, то скорее всего уже сталкивались с предупреждениями компилятора. Например, рассмотрим такой код:

fn do_something() {}

fn main() {
    for i in 0..100 {
        do_something();
    }
}

В нем мы вызываем do_something сто раз, но никогда не используем переменную i. Rust предупреждает нас об этом:

> cargo build
   Compiling myprogram v0.1.0 (file:///path/to/myprogram)
warning: unused variable: `i`
 --> src\main.rs:4:9
  |
4 |     for i in 1..100 {
  |         ^ help: consider using `_i` instead
  |
  = note: #[warn(unused_variables)] on by default

    Finished dev [unoptimized + debuginfo] target(s) in 0.50s

Видите подсказку о переименовании в _i? Мы можем автоматически применить ее при помощи cargo fix:

> cargo fix
    Checking myprogram v0.1.0 (file:///C:/Users/steve/tmp/fix)
      Fixing src\main.rs (1 fix)
    Finished dev [unoptimized + debuginfo] target(s) in 0.59s

Если теперь мы откроем src\main.rs, то увидим исправленный код:

fn do_something() {}

fn main() {
    for _i in 0..100 {
        do_something();
    }
}

Теперь в коде используется _i, и предупреждение больше не выдается.

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

cargo clippy

Еще о предупреждениях: теперь вы можете попробовать cargo-clippy через Rustup. Clippy это статический анализатор, который выполняет много дополнительных проверок вашего кода.

Например:

let mut lock_guard = mutex.lock();

std::mem::drop(&lock_guard)

operation_that_requires_mutex_to_be_unlocked();

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

Установим предварительную версию Clippy через Rustup:

$ rustup component add clippy-preview

и запустим ее:

$ cargo clippy
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing.
 --> src\main.rs:5:5
  |
5 |     std::mem::drop(&lock_guard);
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[deny(drop_ref)] on by default
note: argument has type &std::result::Result<std::sync::MutexGuard<'_, i32>, std::sync::PoisonError<std::sync::MutexGuard<'_, i32>>>
 --> src\main.rs:5:20
  |
5 |     std::mem::drop(&lock_guard);
  |                    ^^^^^^^^^^^
  = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/v0.0.212/index.html#drop_ref

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

Обратите внимание, что это только ознакомительная версия; Clippy еще не достиг 1.0, поэтому набор и поведение проверок еще могут меняться. Мы выпустим компонент clippy, как только он будет стабилизирован, а пока просим вас посмотреть на деле предварительную версию и рассказать нам о своем опыте.

Да, есть еще нюанс: к сожалению, пока что нельзя использовать clippy вместе с cargo-fix. Работа над этим ведется.

Подробности смотрите в примечаниях к выпуску.

Стабилизация стандартной библиотеки

В этом выпуске были стабилизированы следующие API:

Также, теперь вы можете сравнивать &str и OsString.

Подробности смотрите в примечаниях к выпуску.

Улучшения в Cargo

Выше мы уже описали две новые подкоманды Cargo. Так же, Cargo теперь будет автоматически пытаться починить Cargo.lock файлы, испорченные git mergeом. Это поведение можно отключить флагом --locked.

cargo doc обзавелся новым флагом: --document-private-items. По умолчанию, cargo doc документирует только публичные части API, потому что предназначен для генерации пользовательской документации. Но если вы работаете над своим пакетом и в нем есть внутренняя документация, то --document-private-items включит генерацию документации вообще для всего.

>>> Примечания к выпуску

>>> Подробности

 ,

ozkriff
()