resvg 0.7 — библиотека отрисовки SVG
Вышел новый, значительный релиз библиотеки для растеризации SVG - resvg.
( читать дальше... )
>>> Репозиторий (github.com)
Всего сообщений: 210
Вышел новый, значительный релиз библиотеки для растеризации SVG - resvg.
( читать дальше... )
>>> Репозиторий (github.com)
Команда разработчиков Rust рада представить новую версию своего языка: 1.35. Rust - это язык программирования, который позволяет писать надёжные и эффективные программы.
Если у вас уже установлен Rust через rustup,то можно обновиться командой:
$ rustup update stable
Главное в обновлении - это реализиция трейтов замыкания Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно. Добавление возможности приводить замыкания к указателям на небезопасные функции, вызов макроса dbg!() теперь возможен без аргументов, была проведена стабилизация стандартной библиотеки.
( читать дальше... )
>>> Подробности (rust-lang.org)
Вышел релиз 1.34 языка системного программирования Rust, развиваемого проектом Mozilla.
Ключевое-долгожданное:
>>> Полный анонс (rust-lang.org)
resvg — это библиотека для отрисовки SVG, прямыми аналогами которой являются librsvg и QtSvg. Но в отличие от них, resvg поддерживает отрисовку с помощью нескольких бэкендов (Qt и cairo) и обеспечивает более полную поддержку стандарта. Также resvg является модульным, что позволяет использовать лишь нужные функции.
Основные изменения:
marker.baseline-shift, letter-spacing и word-spacing.Результаты тестирования. Сравнительная таблица. Список нереализованных возможностей.
Так как marker был успешно реализован, до полной поддержки static SVG осталось реализовать textPath, Unicode BIDI (left-to-right, top-to-bottom, glyph orientation и т.д.) и несколько фильтров.
>>> GitHub (github.com)
resvg — это библиотека для отрисовки SVG, прямыми аналогами которой являются librsvg и QtSvg. Но в отличие от них, resvg поддерживает отрисовку с помощью нескольких бэкендов (Qt и cairo) и обеспечивает более полную поддержку стандарта. Также resvg является модульным, что позволяет использовать лишь нужные функции.
( читать дальше... )
>>> Подробности (github.com)
Команда Rust объявила о выходе новой стабильной версии Rust 1.31.0, который ознаменует собой также выход новой редакции «Rust 2018». Rust — это язык программирования, который позволяет каждому создавать надежное и эффективное программное обеспечение.
Если у вас установлена предыдущая версия Rust, обновиться до Rust 1.31.0 проще всего следующим образом:
rustup update stable
( читать дальше... )
>>> Подробности (rust-lang.org)
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».
>>> Подробности (rustrush.ru)
Вышла новая версия Pijul — свободной системы управления версиями, основанной на теории патчей и написанной на языке Rust.
Pijul развивает идеи Darcs — Pijul быстрее, лучше, в нём решена проблема экспоненциальной сложности слияния и поддерживаются ветки (для всех, кто спросил и еще спросит «чем оно лучше Git» - ссылка на FAQ)
Слово «Pijul» (произносится «пихуль») — это мексиканское названия Бороздчатоклювого ани, вида птиц семейства кукушковых, чьи особи совместно работают над строительством гнёзд.
Улучшения в версии 0.11:
pijul clone --path и pijul pull --path. При этом скачиваются только те патчи, которые затрагивают указанный подкаталог.
~/.ssh/config — теперь Pijul будет автоматически использовать настройки псевдонимов хостов, SSH-прокси, ключей и т. д.
pijul record, другая в некоторых случаях приводила к изменении содержимого патчей и файлов после клонирования.
Для нужд Pijul автором также развиваются вспомогательные библиотеки:
Автор также разрабатывает Pijul Nest — аналог GitHub на основе Pijul и Rust. К сожалению, Nest пока не является свободным проектом.
>>> Подробности (pijul.org)
В июле этого года начались обсуждения вокруг 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-lang.org)
Что нового:
>>> Подробности (rust-lang.org)
Команда разработчиков 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 включит генерацию документации вообще для всего.
>>> Подробности (rust-lang.org)
Вышла версия 1.0.0 программы для работы с WebSocket-ами из командной строки «websocat». Девиз программы: "netcat, curl и socat для вебсокетов".
( читать дальше... )
>>> Подробности (github.com)
27 июня вышла новая версия Eclipse 4.8.0 Photon. Eclipse - платформа для построения IDE, включающая в себя плагины для поддержки разработки на разных языках. По словам Майка Милинковича, исполнительного директора Eclipse Foundation, задача Eclipse Photon - расширение многоязычных возможностей Eclipse за счет взаимодействия по протоколу LSP (Language Server Protocol), через который предоставляются поддержка редактирования кода на современных языках (в Eclipse поддерживается LSP версии 3.6 и Debug Adapter protocol 1.25).
Обновления плагинов:
В состав Eclipse включен плагин для поддержки разработки на Rust - Eclipse Corrosion 0.1.0 (первый языковый плагин, построенный на взаимодействии по LSP).
>>> Подробности (eclipse.org)
Команда разработчиков языка Rust рада представить новую версию Rust 1.27.0. Rust — системный язык программирования, ориентированный на безопасность, скорость и параллельность.
( читать дальше... )
>>> Подробности (rust-lang.org)
symbol.
svg элементов.
fill="url(#lg1) red"
Ещё не реализовано:
filter, marker, textPath.
Результаты тестирования. Сравнительная таблица.
Если исключить dynamic SVG subset, фильтры и маркеры - resvg предоставляет лучшую поддержку SVG среди всех кроссплатформенных, FOSS библиотек. И, в том числе, является самой быстрой реализацией.
>>> Репозиторий (github.com)
Команда разработчиков языка Rust рада представить новую версию Rust 1.26.0. Rust — системный язык программирования, ориентированный на безопасность, скорость и параллельность.
( читать дальше... )
Основные изменения:
impl Trait в заголовках функций
( читать дальше... )
match, if let, ...)
( читать дальше... )
( читать дальше... )
0..=4, включающие обе границы в диапазон перечисления
( читать дальше... )
i128 и u128
( читать дальше... )
>>> Подробности (rust-lang.org)
Как известно, распространение списков блокировок Роскомнадзора официально запрещено за пределами провайдеров. Но нашлись добрые люди, которые создали проект Zapret-Info и регулярно выкладывают свежие выгрузки реестра заблокированных адресов.
К сожалению, дампы выгрузок выкладываются в неудобном для использования формате (CSV, CP1251, иногда содержит ошибки). Для разбора этого формата была написана библиотека zicsv, позволяющая поточно читать дамп. На основе этой библиотеки разработана утилита командной строки zicsv-tool, с помощтю которой можно:
( читать дальше... )
>>> Репозиторий на гитхабе (github.com)
resvg — библиотека отрисовки SVG.
Основные изменения:
clipPath, mask, pattern и preserveAspectRatio.
Краткую сводку о результатах тестирования можно посмотреть здесь.
В двух словах: на данный момент resvg не хуже librsvg, если вам не нужны фильтры (в любом случае тот же blur реализован в librsvg неверно). Производительность приблизительно одинаковая.
Inkscape, с другой стороны, в среднем в 10 раз медленнее и хотя поддерживает больше возможностей SVG (фильтры, маркеры и прочее редко используемое), при этом содержит массу ошибок в реализации базовых примитивов.
>>> Подробности (github.com)
Сегодня вышел Rust 1.25.0 (2018-03-29).
Rust это системный язык программирования, нацеленный на надёжность, скорость и параллельное выполнение.
Если вы имеете предыдущую версию Rust, установленную через rustup, для получения версии 1.25.0 достаточно ввести в терминале:
$ rustup update stable
Что нового в 1.25.0 stable
Синтаксис
Данный атрибут позволяет указывать выравнивание (alignment) для структур:
struct Number(i32);
assert_eq!(std::mem::align_of::<Number>(), 4);
assert_eq!(std::mem::size_of::<Number>(), 4);
#[repr(align(16))]
struct Align16(i32);
assert_eq!(std::mem::align_of::<Align16>(), 16);
assert_eq!(std::mem::size_of::<Align16>(), 16);
use;Раньше:
use std::fs::File;
use std::io::Read;
use std::path::{Path, PathBuf};
Теперь:
// on one line
use std::{fs::File, io::Read, path::{Path, PathBuf}};
// with some more breathing room
use std::{
fs::File,
io::Read,
path::{
Path,
PathBuf
}
};
enum Foo { A, B, C }
fn main() {
let x = Foo::A;
match x {
| Foo::A
| Foo::B => println!("AB"),
| Foo::C => println!("C"),
}
}
Компилятор
-C lto=val;
i586-unknown-linux-musl.
Библиотека
Стабилизированные API
Наиболее значимое событие — это std::ptr::NonNull<T>. Этот тип похож на *mut T, но является ненулевым (non-null) и ковариантным. Если вкратце, NonNull<T> гарантирует, что никогда не будет равен null, а это означает, что Option<NonNull<T>> имеет тот же размер, что и *mut T. Если вы создаете структуру данных с небезопасным кодом, NonNull<T> зачастую будет правильным выбором для вас.
Следующие функции теперь могут быть использованы в константных выражениях, т.е. например, static MINUTE: Duration = Duration::from_secs(60);:
Cargo
Разное
Примечания по поводу совместимости
>>> Подробности (rust-lang.org)
fselect — это консольная утилита для поиска файлов с помощью выражений, напоминающих SQL. В некоторых случаях может заменить традиционный find.
Преимущества:
Пример:
$ fselect "fsize, modified, path from /home/pupseng depth 3 where size >= 1mb and ( name like '%.jpg' or name like '%.png' )"
1.82 MiB 2018-01-16 13:31:59 /home/pupseng/Pictures/Screenshot from 2018-01-16 13:31:46.png
1.29 MiB 2017-09-05 13:00:02 /home/pupseng/Downloads/Telegram Desktop/image_2017-09-05_12-59-55.png
2.74 MiB 2017-05-31 12:23:31 /home/pupseng/Downloads/Telegram Desktop/IMG_9514.jpg
2.25 MiB 2017-07-28 15:57:44 /home/pupseng/Downloads/Telegram Desktop/image_2017-07-28_15-57-35.png
3.56 MiB 2016-07-04 16:43:13 /home/pupseng/Downloads/fugue.png
7.15 MiB 2016-10-24 12:25:32 /home/pupseng/Natasha/DCIM6807.jpg
Утилита написана на языке программирования Rust и в настоящий момент устанавливается с помощью cargo. Крайне приветствуется помощь в организации сборки пакетов для различных дистрибутивов Linux, а также Mac OS.
>>> Подробности на Github (github.com)
| ← предыдущие | следующие → |