LINUX.ORG.RU

Rust 1.34

 ,


2

11
  • cargo теперь умеет в сторонние репозитории

  • оператор ? теперь может использоваться в доктестах

  • стабилизированы трейты TryFrom и TryInto

  • стабилизированы типы AtomicU8AtomicU64 и AtomicI8AtomicI64 в дополнение к имевшимся ранее Atomic{Bool,Ptr,USize,ISize}

  • стабилизированы типы NonZeroI8NonZeroI128 и NonZeroISize в дополнение к имевшимся ранее беззнаковым аналогам

https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html

★★★★★

Последнее исправление: MyTrooName (всего исправлений: 3)

Ответ на: комментарий от anonymous

польза инклюдов в расте в том, что их там нет в каждом первом файле

MyTrooName ★★★★★
() автор топика
Ответ на: комментарий от dear_amomynous_v2_1

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

А как в расте с рефлексией/интроспекцией без макросов? В D, например, вообще ничего не нужно добавлять, чтобы сделать тип (де)сериализуемым. Там библиотека сама разбирает тип в компайл-тайме и генерирует нужный код.

yetanother ★★
()
Ответ на: комментарий от RazrFalcon

С помощью процедурных макросов.

Так я же спросил есть ли рефлексия без макросов. Так что в расте совсем не так как в D.

yetanother ★★
()
Ответ на: комментарий от yetanother

Так я же спросил есть ли рефлексия без макросов

Рефлексия, которая подразумевает самомодификацию программы во время выполнения? Кажись такой херни в русте нет и слава Богу!

AntonyRF ★★★★
()
Ответ на: комментарий от red75prim

Рефлексия - это когда можно получить список полей структуры

нет. а в компайл-тайм чем не устраивает, конкретно?

MyTrooName ★★★★★
() автор топика
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от AntonyRF

Рефлексия, которая подразумевает самомодификацию программы во время выполнения? Кажись такой херни в русте нет и слава Богу!

Рефлексия это как сказано выше, возможность в компайл-тайме узнать характеристики обрабатываемых типов. Это точно не хрень, потому что AST макросы раста предоставляют ровно ту же возможность. Это просто разные механизмы. Более того, AST макросы это более мощный инструмент, чем просто рефлексия, так как позволяют именно реализовать тот ужас, что вы описали. Именно по этой причине, что AST макросы слишком мощный инструмент, который позволяет легко стрелять в ногу, их нет в D. Это принципиальная позиция Уолтера Брайта, автора D, хотя его не однократно просили об этом. Просто рефлексия, средствами языка без макросов AST, реализована в D. В принципе, результат тот же самый, но в D рефлексия реализована средствами языка без макросов, т.е. нет необходимости учить какой-то еще один внутренний язык. Что в итоге практичнее - покажет время.

yetanother ★★
()
Ответ на: комментарий от yetanother

нет необходимости учить какой-то еще один внутренний язык

Процедурные макросы в расте пишутся на расте.

RazrFalcon ★★★★★
()
Ответ на: комментарий от yetanother

AST макросы раста

Нигде не используются

Процедурные макросы раста работают над потоком токенов, а не с AST компилятора, в этом и проблема, они например не имеют доступа к внешнему контексту. В кастом дерайве ты видишь что у структуры есть поле data: Buffer, но никакие семантические запросы про этот Buffer сделать невозможно, это просто текст.

AST-плагины тоже есть, но все кто мог уже перекатились на токенстримовые, так как внутренний AST раста нестабилен.

mersinvald ★★★★★
()
Ответ на: комментарий от kirk_johnson

Лол, ты совсем поехавший?

Я б те вдул, мой голый, дряблый кирк.

anonymous
()

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

(1) <i8>::max_value() получили максимальное значение для типа <f32>::max_value() получили ошибку

(2) std::i8::MAX получили максимальное значение std::f32::MAX получили максимальное значение

Вопрос к ситуации (1) это такой архитектурный промах у удобопредсказуемости языка или в этом есть какой-то сакральный смысл?

anonymous
()
Ответ на: комментарий от MyTrooName

есть, но вопрос был не в этом, а именно в том, что странно как-то выглядит эта несогласованность интерфейсов, в варианте (2) мы имеем предсказуемое поведение в этом плане, в варианте (1) - нет. Вот и стало интересно по какой причине так. Были ли какие-то объективные причины делать так?

anonymous
()
Ответ на: комментарий от RazrFalcon

Очень, конечно, по существу.

anonymous
()
Ответ на: комментарий от anonymous

Не вижу проблемы ни в первом ни во втором случае, ну кроме огрехов самого кода, значит ли это что мне осталось жить не так уж долго с такими тяжелыми болезнями?

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

anonymous
()
Ответ на: комментарий от deterok

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

anonymous
()
Ответ на: комментарий от anonymous

ХЗ. Наверно потому что для целочисленных типов - только одно максимальное значение. А у плавающей точки два - плюс бесконечность (правильно, но не очень полезно) и максимальное представимое число.

red75prim ★★★
()
Ответ на: комментарий от anonymous

Были ли какие-то объективные причины делать так?

не знаю. если и были, сейчас трудно найти соответствующие обсуждения. тем более оба варианта стабилизированы в 1.0 - значит, впилены были еще в 0.*

не то чтобы для меня отсутствие <f32>::max_value() выглядит странно, но лучше бы std::f32::MAX был назван MAX_FINITE

MyTrooName ★★★★★
() автор топика
Последнее исправление: MyTrooName (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.