The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.54, opennews (??), 29-Июл-21, (0) [смотреть все]

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


92. "Выпуск языка программирования Rust 1.54"  –14 +/
Сообщение от Хан (?), 30-Июл-21, 00:27 
Есть там GC, сказки растоманов про некую магию избавлющую от всех проблем это полная туфта
Ответить | Правка | Наверх | Cообщить модератору

120. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от Aukamo (ok), 30-Июл-21, 01:51 
Приведите ссылку на строку(и) кода, благо Rust на Github есть, показывающего что в расте есть GC. Очень интересно посмотреть. Под GC имеется в виду именно runtime\времени исполнения.
Ответить | Правка | Наверх | Cообщить модератору

154. "Выпуск языка программирования Rust 1.54"  –1 +/
Сообщение от Хан (?), 30-Июл-21, 02:57 
Магия?
Ответить | Правка | Наверх | Cообщить модератору

162. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Aukamo (ok), 30-Июл-21, 03:08 
> Магия?

Да: https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html

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

172. "Выпуск языка программирования Rust 1.54"  –2 +/
Сообщение от Хан (?), 30-Июл-21, 03:24 
Ахахаха вот это да сильно... выдавать за ноухау подобие умных указателей C++ !!! Это фиаско братан
Ответить | Правка | Наверх | Cообщить модератору

237. "Выпуск языка программирования Rust 1.54"  +5 +/
Сообщение от Аноним (246), 30-Июл-21, 05:57 
На плюсах с умными указателями и RAII в смысле управления памятью и получится примерно Rust.
Принципиальных отличий два (и они тесно взаимосвязаны). Первое - это (почти) нулевой оверхед, поскольку проверки в Расте делаются в компайл-тайм (да, в это сложно поверить, видя впервые, надо вникать :). Второе - невозможность нарушения RAII заложена в дизайн языка, просто не скомпилируется.
Ответить | Правка | Наверх | Cообщить модератору

396. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Sem (??), 30-Июл-21, 18:28 
Поздравляю с разморозкой.
Лучше бы доку по расту почитал, чем время тратить на такие комментарии.
Ответить | Правка | К родителю #172 | Наверх | Cообщить модератору

173. "Выпуск языка программирования Rust 1.54"  –1 +/
Сообщение от Хан (?), 30-Июл-21, 03:24 
По секрету... чисто между нами... умные указатели это тоже разновидность GC...прикинь да...
Ответить | Правка | К родителю #162 | Наверх | Cообщить модератору

261. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от Aukamo (ok), 30-Июл-21, 08:09 
Cемейство: Box, Rc, Arc, Cell и т.д. можно отнести к умным указателям, имеющим runtime overhead. Я уже говорил что говоря о GC имеется именно runtime а не механизм чистки. В основном, всё держится на механизме владения, и там никакого overhead-а нету, + ZST https://doc.rust-lang.org/nomicon/vec-zsts.html (о таком раньше вообще не слышал, если кто знает - дайте ссылку, интересно). Если что-то надо подчистить раньше чем это сделает компилятор - есть функция `drop`.
Ответить | Правка | Наверх | Cообщить модератору

281. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от n00by (ok), 30-Июл-21, 09:11 
> + ZST https://doc.rust-lang.org/nomicon/vec-zsts.html
> (о таком раньше вообще не слышал, если кто знает - дайте
> ссылку, интересно).

А для чего нужны эти типы нулевого размера? Какую задачу решают?

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

300. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним (299), 30-Июл-21, 10:11 
Задач несколько, самая простая - это типизация без оберток.
Почитать можно тут
https://www.hardmo.de/article/2021-03-14-zst-proof-types.md#...
https://ferrous-systems.com/blog/zero-sized-references/#diff...
Ответить | Правка | Наверх | Cообщить модератору

315. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от n00by (ok), 30-Июл-21, 12:13 
> Задач несколько, самая простая - это типизация без оберток.
> Почитать можно тут
> https://www.hardmo.de/article/2021-03-14-zst-proof-types.md#...
> https://ferrous-systems.com/blog/zero-sized-references/#diff...

Спасибо, во втором случае увидел практический смысл.

В примере имеется два блока памяти, из которых выделяются элементы. Тут есть нюансы:
1. Информация о принадлежности элемента конкретному блоку содержится в адресе элемента.
2. Для задачи "вернуть элемент куда следует" явная обработка вышеуказанной информации не является необходимой.
3. Информация доступна во время исполнения. ZST (по определению) такое не обеспечивает. Насколько понимаю, инстанциируется (я слышал, что темплейты в С++ это жесть, но они это позволяют без ZST) два экземпляра деалокатора.

Наверное, я что-то упустил?

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

330. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним (299), 30-Июл-21, 13:38 
Если честно, то я с ZST знаком теоретически, на практике в моих задачах они просто не были нужны. Но насколько я понимаю вся фишка что проверки типов идут на этапе компиляции, а не в рантайме и в момент компиляции подставится нужный вызов. Ну или просто не скомпилируется.
Так что сори что не смог ответить на вопросы. Нужно спросить кого-то более знающего.

Еще можно глянуть пример PhantomData как частный вариант ZST.
https://doc.rust-lang.org/stable/core/marker/struct.PhantomD...

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

339. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним (-), 30-Июл-21, 14:41 
> Еще можно глянуть пример PhantomData как частный вариант ZST.
> https://doc.rust-lang.org/stable/core/marker/struct.PhantomD...

Я бы дал ссылку на
https://doc.rust-lang.org/nomicon/phantom-data.html

> PhantomData consumes no space, but simulates a field of the given type for the purpose of static analysis. This was deemed to be less error-prone than explicitly telling the type-system the kind of variance that you want, while also providing other useful things such as the information needed by drop check.

там и пример для ZST более лаконичен и поняте не-рустовцам
https://doc.rust-lang.org/nomicon/exotic-sizes.html
> On their own, Zero Sized Types (ZSTs) are, for obvious reasons, pretty useless.

...
> One of the most extreme examples of this is Sets and Maps. Given a Map<Key, Value>, it is common to implement a Set<Key> as just a thin wrapper around Map<Key, UselessJunk>. In many languages, this would necessitate allocating space for UselessJunk and doing work to store and load UselessJunk only to discard it. Proving this unnecessary would be a difficult analysis for the compiler.
> However in Rust, we can just say that Set<Key> = Map<Key, ()>. Now Rust statically knows that every load and store is useless, and no allocation has any size. The result is that the monomorphized code is basically a custom implementation of a HashSet with none of the overhead that HashMap would have to support values.

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

509. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Aukamo (ok), 31-Июл-21, 10:28 
> А для чего нужны эти типы нулевого размера? Какую задачу решают?

Rust ими активно пользуется в стандартной библиотеке, но в эту сторону я не сильно копал. Задача, на сколько я знаю, это Zero Cost Abstraction, примеры привели выше.

Самое большое впечатление составил этот проект: https://github.com/Rahix/avr-hal , это, грубо говоря, библиотека <Arduino> для Rust. Если посмотреть исходники, становится понятно то как используются ZST. По сути, ZST позволяют управлять потоком исполнения так, как и в случае если у тебя есть объект с данными, т.е. ты можешь обращаться к сущности, задавать или спрашивать некие свойства, хотя, под капотом, сама сущность не хранит никакой информации и её можно было бы заменить на 100500 #define\#if\#ifdef. Это как модуль или область видимости, но в виде объекта и со свойствами объекта. Короче, самое крутое, доведённое до предела использование ZST я, пока что, видел только в avr-hal (за счёт того что для embedded каждый байт на счету).

https://doc.rust-lang.org/stable/embedded-book/static-guaran... не помню где я видел класное описание того как в avr-hal пины\периферия в виде ZST создаются. Там, вроде как, смежный проект для cortex (вместо atmel), книгу написал как ZST можен это обиграть. Может где в issues есть ссылка, я просто, интерес к проэкту на время потерял, не хочу сейчас в нём копаться.

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

278. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от n00by (ok), 30-Июл-21, 09:06 
Умные указатели это разновидность автоматического управления памятью, как и сборка мусора. Путаница возникает, поскольку и там и там есть варианты с подсчётом ссылок.
Ответить | Правка | К родителю #173 | Наверх | Cообщить модератору

561. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним (571), 01-Авг-21, 08:14 
То есть по твоему получается что C++ это тоже язык с GC? Ведь разницы у него с растом по подержке умных кказателей практически нет.
Ответить | Правка | К родителю #173 | Наверх | Cообщить модератору

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

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




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

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