LINUX.ORG.RU

Сообщения dotcoder

 

Carbon — преемник C++ от Google

На конференции Cpp North был представлен экспериментальный язык программирования Carbon – преемник С++ (по заявлению разработчиков). Видео презентации: https://www.youtube.com/watch?v=omrY53kbVoA

Разработчики обещают производительность, соответствующую C++, взаимодействие с существующим кодом C++, от наследования до шаблонов, быстрые и масштабируемые сборки, совместимые с существующими системами сборки C++, двунаправленную интероперабельность с C++ и многое другое.

Пример кода на Carbon:

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

тот же код на С++:

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

Доп. информация: https://9to5google.com/2022/07/19/carbon-programming-language-google-cpp/

 ,

dotcoder ()

Rust 1.59.0

Вышла новая версия языка программирования Rust, Rust 1.59.0. В этой версии стабилизированы следующие возможности:

Встроенный ассемблер

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

use std::arch::asm;

// Multiply x by 6 using shifts and adds
let mut x: u64 = 4;
unsafe {
    asm!(
        "mov {tmp}, {x}",
        "shl {tmp}, 1",
        "shl {x}, 2",
        "add {x}, {tmp}",
        x = inout(reg) x,
        tmp = out(reg) _,
    );
}
assert_eq!(x, 4 * 6);

Встроенный ассемблер стабилизирован для следующих архитектур: x86 и x86-64, ARM, AArch64, RISC-V.

Деструктурирующие присваивания

Теперь можно использовать кортежи, срезы и шаблоны структур в левой части присваивания:

let (a, b, c, d, e);

(a, b) = (1, 2);
[c, .., d, _] = [1, 2, 3, 4, 5];
Struct { e, .. } = Struct { e: 5, f: 3 };

assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);

Примечание: деструктурирующие присваивания с такими операторами как += запрещены.

Значения по умолчанию для константных дженериков и чередование типов параметра

Универсальные типы теперь могут указывать значения по умолчанию для своих универсальных констант:

struct ArrayStorage<T, const N: usize = 2> {
    arr: [T; N],
}

impl<T> ArrayStorage<T> {
    fn new(a: T, b: T) -> ArrayStorage<T> {
        ArrayStorage {
            arr: [a, b],
        }
    }
}

Раньше параметры типа должны были стоять перед всеми константными параметрами. Это ограничение было ослаблено и теперь их можно чередовать:

fn cartesian_product<
    T, const N: usize,
    U, const M: usize,
    V, F
>(a: [T; N], b: [U; M], f: F) -> [[V; N]; M]
where
    F: FnMut(&T, &U) -> V
{
    // ...
}

Предупреждения о несовместимости в будущем

Теперь Cargo будет показывать предупреждение, если та или иная зависимость будет отклонена в будущих версиях Rust. После выполнения команд cargo build или cargo check, можно увидеть примерно такое предупреждение:

warning: the following packages contain code that will be rejected by a future version of Rust: old_dep v0.1.0
note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`

При помощи команды cargo report можно увидеть полный отчёт по коду, который будет отклонён.

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

Теперь Rust поддерживает удаление отладочной информации во время компоновки. Для этого в Cargo.toml надо добавить строку strip:

[profile.release]
strip = "debuginfo"

Можно также указать symbols или просто true для удаления всей символьной информации там, где это поддерживается.

Инкрементальная компиляция отключена по умолчанию

Из-за возможности возникновения ошибок десериализации (и паник) в этой версии отключена поддержка инкрементальной компиляции (можно принудительно включить через переменную среды RUSTC_FORCE_INCREMENTAL=1). Исправление уже присутствует в бета-версии Rust 1.60; если до релиза не будут найдены другие ошибки, связанные с этой проблемой, инкрементальная компиляция будет включена обратно.

Стабилизированные API

  • std::thread::available_parallelism
  • Result::copied
  • Result::cloned
  • arch::asm!
  • arch::global_asm!
  • ops::ControlFlow::is_break
  • ops::ControlFlow::is_continue
  • TryFrom for u8
  • char::TryFromCharError implementing Clone, Debug, Display, PartialEq, Copy, Eq, Error
  • iter::zip
  • NonZeroU8::is_power_of_two
  • NonZeroU16::is_power_of_two
  • NonZeroU32::is_power_of_two
  • NonZeroU64::is_power_of_two
  • NonZeroU128::is_power_of_two
  • DoubleEndedIterator for ToLowercase
  • DoubleEndedIterator for ToUppercase
  • TryFrom<&mut [T]> for [T; N]
  • UnwindSafe for Once
  • RefUnwindSafe for Once
  • armv8 neon intrinsics for aarch64

Следующие стабильные функции теперь являются const:

  • mem::MaybeUninit::as_ptr
  • mem::MaybeUninit::assume_init
  • mem::MaybeUninit::assume_init_ref
  • ffi::CStr::from_bytes_with_nul_unchecked

Другие изменения

Все остальные изменения и новшества можно увидеть по ссылке: https://blog.rust-lang.org/2022/02/24/Rust-1.59.0.html

Более подробный список изменений доступен по ссылке: https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1590-2022-02-24

 

dotcoder ()

Новый редактор — Zed

Авторы редактора Atom представляют своё новое детище — Zed, который является, как они пишут у себя на сайте, «молниеносным редактором кода для совместной работы, написанном на Rust». Основной упор сделан на супер-отзывчивости и возможности совместной работы в реальном времени. Для нового редактора, авторы, вдохновившись Mozilla WebRender, написали новый высокопроизводительный UI-фреймворк — GPUI; для совместного редактирования в реальном времени используются бесконфликтные реплицированные типы данных. Помимо поддержки LSP (Language Server Protocol), авторы создали Tree-sitter — быструю инкрементную библиотеку синтаксического анализа, которая может предоставить Zed деревья синтаксиса для более чем 50 языков. Tree-sitter уже работает и обеспечивает необходимую функциональность на Github.

https://zed.dev/

 , , ,

dotcoder ()

Rust - самый высокооплачиваемый язык программирования в 2021 году

Rust - не только самый любимый язык несколько лет подряд согласно опросу на StackOverflow, но и самый высокооплачиваемый язык программирования в 2021 году (по крайней мере в Великобритании): https://thenextweb.com/news/move-over-python-rust-highest-paid-programming-la...

 , ,

dotcoder ()

Серия видео по Rust для начинающих

Вдобавок к курсу по Rust для начинающих, компания Microsoft опубликовала серию видео по Rust для начинающих. Серия состоит из 35 видео и затрагивает общие концепции. К концу этой серии, по идее, у вас должно быть достаточно знаний, чтобы писать свои собственные программы на Rust.

 ,

dotcoder ()

Если ты работаешь на IBM, то всё твоё время принадлежит им

«As an IBM employee, you are not allowed to use your gmail account to work in any way on VNIC. You are not allowed to use your personal email account as a „hobby“. You are an IBM employee 100% of the time. Please remove yourself completely from the maintainers file. I grant you a 1 time exception on contributions to VNIC to make this change.»

https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=4ac...

 

dotcoder ()

Microsoft опубликовал у себя курс по Rust

Microsoft опубликовал у себя на сайте курс для начинающих по языку программирования Rust.

Курс доступен на русском языке, состоит из 8 модулей и предлагает следующие пункты схемы обучения:

  • Установите средства, необходимые для написания первых строк кода на Rust.
  • Ознакомьтесь с основными понятиями Rust.
  • Узнайте, как обрабатывать ошибки.
  • Научитесь управлять памятью в Rust.
  • Используйте универсальные типы и признаки.
  • Настройте модули для пакетов и крейтов.
  • Пишите и запускайте автоматизированные тесты.
  • Создайте программу командной строки.

 ,

dotcoder ()

Rust теперь будет использоваться для разработки Android

В общем, разработчики запарились с уязвимостями, связанными с ошибками работы с памятью на C и C++, которые стабильно составляют ~70% всех найденных уязвимостей на Android высокой степени опасности. И вместо того, чтобы вкладывать ресурсы и усилия на их поиски, предупреждение и предотвращение, разработчики в первую очередь решили избегать эти ошибки. В связи с этим, разработчики объявили о поддержке языка программирования Rust для платформы AOSP (Android Open Source Project) для разработки самой ОС.

https://security.googleblog.com/2021/04/rust-in-android-platform.html

 , ,

dotcoder ()

wezterm — кроссплатформенный эмулятор терминала и мультиплексор с ускорением на GPU

Хочу познакомить вас с ещё одним кроссплатформенным эмулятором терминала и мультиплексором с ускорением на GPU – wezterm. Написан на Rust.

Возможности:

 , ,

dotcoder ()

Rust в ядре

В общем, сабж. В ядре Linux появились зачатки поддержки языка программирования Rust, пока что в linux-next.

https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/ru...

 , , ,

dotcoder ()

Flutter 2

Разработчики Flutter в рамках мероприятия «Flutter Engage» анонсировали новое крупное обновление – Flutter 2. Также вышла новая версия Dart 2.12.

Flutter известен тем, что позволяет разработчикам создавать портативные приложения для любой платформы, которые компилируются и работают нативно. В Flatter 2 заявлена поддержка 5 операционных систем и веб, теперь один и тот же код может работать на iOS, Android, Windows, macOS, и Linux, а также в виде веб-приложений.

Из важного:

  • появилась надёжная null-безопаность
  • добавлена стабильная реализация FFI
  • новые утилиты разработки и профилирования

P.S. Canonical заявили, что все будущие десктопные и мобильные приложения будут писать на Flutter.

P.P.S. Доклады и презентации с Flutter Engage на YouTube.

 ,

dotcoder ()

Создан Rust Foundation, Microsoft и Google присоединились

Вчера был создан Rust Foundation, новая независимая некоммерческая организация, которая будет поддерживать и всячески продвигать язык программирования Rust: https://foundation.rust-lang.org/

Microsoft и Google присоединились:

https://cloudblogs.microsoft.com/opensource/2021/02/08/microsoft-joins-rust-f...

https://opensource.googleblog.com/2021/02/google-joins-rust-foundation.html

 , ,

dotcoder ()

Языку Rust 5 лет

Сегодня исполнилось 5 лет языку программирования Rust с начала выпуска версии 1.0 в 2015 году. С чем я и поздравляю комьюнити!

Достижения за эти 5 лет можно увидеть по ссылке: https://blog.rust-lang.org/2020/05/15/five-years-of-rust.html

 , ,

dotcoder ()

LabVIEW раздают (Community Edition)

Компания National Instruments сделала бесплатными для некоммерческого использования свои продукты LabVIEW и LabVIEW NXG.

LabVIEW (англ. Laboratory Virtual Instrumentation Engineering Workbench) — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы National Instruments (США). Первая версия LabVIEW была выпущена в 1986 году для Apple Macintosh, в настоящее время существуют версии для Unix, Linux, Mac OS и Microsoft Windows.

LabVIEW используется в системах сбора и обработки данных, а также для управления техническими объектами и технологическими процессами. Идеологически LabVIEW очень близка к SCADA-системам, но в отличие от них в большей степени ориентирована на решение задач не столько в области АСУ ТП, сколько в области АСНИ.

Скачать можно здесь: https://www.ni.com/en-us/shop/labview/select-edition/labview-community-editio...

Подробности тут: https://twitter.com/labview/status/1255134775880192001

 

dotcoder ()

В будущем, возможно можно будет писать модули Linux на Rust

Появление такой возможности в данный момент обсуждают разработчики.

Страница с фреймворком.

 , ,

dotcoder ()

Github и санкции

You may not use GitHub in violation of export control or sanctions laws of the United States or any other applicable jurisdiction. You may not use GitHub if you are or are working on behalf of a Specially Designated National (SDN) or a person subject to similar blocking or denied party prohibitions administered by a U.S. government agency. GitHub may allow persons in certain sanctioned countries or territories to access certain GitHub services pursuant to U.S. government authorizations. For more information, please see our Export Controls policy.

https://help.github.com/en/articles/github-terms-of-service

Чем чревато? Надо уходить от гитхаба?

 ,

dotcoder ()

DeepNude теперь опенсорс

 ,

dotcoder ()

Rust 1.36.0

The Future is here! In Rust 1.36.0 the long awaited Future trait has been stabilized!

With this stabilization, we hope to give important crates, libraries, and the ecosystem time to prepare for async / .await, which we'll tell you more about in the future.

https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html

 

dotcoder ()

Умер Joe Armstrong, автор Erlang

Сегодня утром, в возрасте 68 лет, умер Джо Армстронг (Joe Armstrong), один из создателей языка программирования Erlang. RIP.

 ,

dotcoder ()

Rust 2018, допишите, плз

NB! Кто может, допишите, плз: https://gist.github.com/bakirov/7b4e674683ff2eed23387d5fefca7d9d

Надо проставить везде ссылки и доперевести остальные 25% + пруф-рид + стилистика.

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

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

 
rustup update stable

Если у вас ещё не установлен Rust, то это можно сделать, загрузив с сайта утилиту rustup.

Что нового в Rust 1.31.0

Rust 2018

Данный релиз ознаменует собой выпуск редакции Rust 2018. Впервые Rust 2018 был упомянут в марте, а затем в июле: прочтите их, чтобы понимать для чего нужен Rust 2018. Также есть статья на сайте Mozilla Hacks.

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

  • Инструментарий (поддержка IDE, rustfmt, Clippy)
  • Документация
  • Работа различных рабочих групп
  • Новый веб-сайт

Для обозначения редакций Rust был представлен ключ edition в Cargo.toml:

 
[package]
name = "foo"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]
edition = "2018"

[dependencies]  

Значение 2018 означает, что используется редакция Rust 2018; отсутствие ключа или значение 2015 означает использование редакции Rust 2015.

Важно отметить, что каждый пакет может быть в редакциях 2015 или 2018, и они без проблем могут работать вместе. Проект под редакцией 2018 может использовать зависимости 2015, а проект 2015 использовать зависимости 2018. Это гарантирует целостность экосистемы, сохраняя совместимость существующего кода. Кроме того, существует возможность автоматической миграции кода с редакции Rust 2015 на Rust 2018 при помощи cargo fix.

Non-lexical lifetimes (NLL; Нелексические времена жизни)

В 2018 появились нелексические времена жизни, что на простом языке означает, что проверщик заимствований (borrow checker) стал умнее и теперь не отклоняет правильный код. Например:

 
fn main() {
    let mut x = 5;

    let y = &x;

    let z = &mut x;
}

В старых версиях этот код выдаст ошибку компиляции:

 
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
 --> src/main.rs:5:18
  |
4 |     let y = &x;
  |              - immutable borrow occurs here
5 |     let z = &mut x;
  |                  ^ mutable borrow occurs here
6 | }
  | - immutable borrow ends here

из-за того, что время жизни действует внутри лексического блока; то есть, заимствование будет удерживаться за y, пока y не покинет пределы main, несмотря на то, что y больше не используется. Код правильный, но проверщик заимствований не смог с ним справиться; сегодня этот код скомпилируется правильно.

Другой пример:

 
fn main() {
    let mut x = 5;
    let y = &x;
    let z = &mut x;
    
    println!("y: {}", y);
}

Старый Rust выдаст следующую ошибку:

 
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
 --> src/main.rs:5:18
  |
4 |     let y = &x;
  |              - immutable borrow occurs here
5 |     let z = &mut x;
  |                  ^ mutable borrow occurs here
...
8 | }
  | - immutable borrow ends here

В Rust 2018 вывод ошибки стал лучше:

 
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
 --> src/main.rs:5:13
  |
4 |     let y = &x;
  |             -- immutable borrow occurs here
5 |     let z = &mut x;
  |             ^^^^^^ mutable borrow occurs here
6 |     
7 |     println!("y: {}", y);
  |                       - borrow later used here

Теперь, вместо того, чтобы показывать место, где y покидает пределы лексического блока, показывается место, где происходят конфликтующие заимствования. Это значительно облегчает отладку подобных ошибок.

Изменения в системе модулей

Редакция Rust 2018 привносит некоторые изменения в работу с путями, что в конечном итоге привело к упрощению системы модулей.

Вкратце:

  • extern crate больше не требуется практически во всех случаях.
  • Макросы теперь можно импортировать при помощи use вместо атрибута #[macro_use].
  • Абсолютные пути начинаются с названия пакета, где ключевое слово crate ссылается на текущий пакет.
  • foo.rs и поддиректория foo/ могут сосущестовать вместе; mod.rs больше не нужен при размещении подмодулей в поддиректории.

Полную информацию можно прочесть в руководстве к редакции.

Упрощенные правила синтаксиса для времени жизни

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

 
impl<'a> Reader for BufReader<'a> {
    // methods go here
}
теперь может быть написан таким образом:
 
impl Reader for BufReader<'_> {
    // methods go here
}

'_ всё ещё подсказывает, что BufReader берёт параметр, но больше нет необходимости создавать имя для него.

В структурах времена жизни всё ещё должны быть определены, но теперь не требуют лишнего кода:

 
// Rust 2015
struct Ref<'a, T: 'a> {
    field: &'a T
}

// Rust 2018
struct Ref<'a, T> {
    field: &'a T
}
: 'a добавляется автоматически. При желании, можно продолжать использовать явное определение.

const fn

Существует несколько способов определения функции в Rust: регулярная функция с fn, небезопасная функция с unsafe fn, внешняя функция с extern fn. В этом релизе появился ещё один способ: const fn, который выглядит следующим образом:

 
const fn foo(x: i32) -> i32 {
    x + 1
}
Функции const fn могут вызываться как регулярные функции, но вычисляются во время компиляции, а не во время выполнения. Для стабильной работы, они должны иметь детерминированный результат и в настоящее время ограничены следующим минимальным набором операций:

  • Арифметические операторы и операторы сравнения с целыми числами
  • Все логические операторы, кроме && и ||
  • Построение массивов, структур, перечислений и кортежей
  • Вызов других функций const fn
  • Задание индекса массивам и срезам
  • Доступ к полям структур и кортежей
  • Чтение из констант
  • & и * на ссылках
  • Приведение типов, за исключением необработанных указателей на целые числа

В будущем данный набор будет расширяться, подробную информацию можно посмотреть здесь.

Новые инструменты

Наряду с Cargo, Rustdoc, и Rustup, которые являются ключевыми инструментами с версии 1.0, редакция 2018 представляет новое поколоение инструментов: Clippy, Rustfmt, и поддержку IDE.

Clippy является статическим анализатором кода в Rust, достиг версии 1.0 и теперь доступен в стабильной версии Rust. Установку можно произвести следующим образом: rustup component add clippy, запуск: cargo clippy.

Rustfmt является инструментом для автоматического форматирования кода Rust в соответствии с официальной стилистикой Rust. В этом релизе он достиг версии 1.0; начиная с этой версии гарантируется обратная совместимость для Rustfmt: отформатированный сегодня код останется неизменным в будущем (только с опциями использованными по-умолчанию), и несёт практическую ценность при использовании с системами непрерывной интеграции (CI). Установить Rustfmt можно следующим образом: rustup component add rustfmt, использовать: cargo fmt.

Поддержка IDE - одна из наиболее востребованных возможностей в Rust. Работы над поддержкой IDE ещё не закончены, но на данный момент уже существуют несколько высококачественных опций:

Tool lints

В Rust 1.30 были стабилизированы атрибуты инструментов, такие как #[rustfmt::skip]. В Rust 1.31 стабилизированы

 

dotcoder ()

RSS подписка на новые темы