The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Доступен язык программирования Rust 1.19 , opennews (??), 23-Июл-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


25. "Релиз языка программирования Rust 1.19 "  –1 +/
Сообщение от Аноним (-), 24-Июл-17, 13:35 
Так завезут когда-то зависимые типы или как выше написали, будут и дальше копировать фичи с алгола68?
Ответить | Правка | Наверх | Cообщить модератору

27. "Релиз языка программирования Rust 1.19 "  –1 +/
Сообщение от Comdiv (ok), 24-Июл-17, 14:03 
> Так завезут когда-то зависимые типы или как выше написали, будут и дальше
> копировать фичи с алгола68?

Можете раскрыть тему чуть подробней?
Опишите, пожалуйста, какие потребности это должно удовлетворить. Почему Вы считаете, что зависимые типы долждны появиться в Rust? Это активно обсуждалось у разработчиков?

Ответить | Правка | Наверх | Cообщить модератору

32. "Релиз языка программирования Rust 1.19 "  +2 +/
Сообщение от Orduemail (ok), 24-Июл-17, 20:12 
Обсуждалось. https://github.com/rust-lang/rfcs/pull/1933

Это очень удобная фишка, которая позволяет, например, объявлять типы параметризованные значением. Не другим типом, а значением.

Там в rfc неплохой пример есть:

impl<const n: usize, T: Clone> Clone for [T; n] {
    fn clone(&self) -> [T; n] {
        // Clone it...
    }
}

Так могла бы выглядеть реализация трейта Clone, создающего копию объекта, для всех возможных типов слайсов. Сейчас в стандартной библиотеке rust'а, есть *33* реализации трейта PartialEq (это операция ==) для слайсов с размерами от 1 до 32. Да, конечно, там не 33 раза написано impl PartialEq for ... бла-бла-бла..., там ради такого написано макрос принимающий в качестве параметра значение типа usize.
Собственно за подробностями можно сходить сюда: https://doc.rust-lang.org/src/core/array.rs.html
И найти там строчки https://doc.rust-lang.org/src/core/array.rs.html#213-218 :

array_impls! {
     0  1  2  3  4  5  6  7  8  9
    10 11 12 13 14 15 16 17 18 19
    20 21 22 23 24 25 26 27 28 29
    30 31 32
}

Это, так сказать, квинтэссенция всего предыдущего макрописания. Раскрытие этого макроса компилятором приводит к появлению 33*16 отдельных блоков impl (33 значения для N, и, если я не сбился со счёта, 16 трейтов, типа AsRef, AsMut, Borrow, BorrowMut, PartialEq...), каждый из которых реализует 1-2 функции.

Можно такие штуки делать макросами, но это раздувает код. И это работает только для конечного числа значений n. С зависимыми типами можно будет обойтись без макросов и написать 16 блоков impl, по одному на каждый трейт реализуемый слайсом, а затем компилятор уже будет инстанцировать эти реализации _по_мере_необходимости_.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру