Size: a a a

Rust — русскоговорящее сообществo

2020 September 02

K

Kitsu in Rust — русскоговорящее сообществo
Dmitry
Кто-нибудь знает опенсорс проекты по крипте на расте? Интересно поковырять этот хайп, посмотреть какие задачи люди решают
libp2p, substrate, exonum
источник

p

pickle 🥒 in Rust — русскоговорящее сообществo
Dmitry
Кто-нибудь знает опенсорс проекты по крипте на расте? Интересно поковырять этот хайп, посмотреть какие задачи люди решают
Собери тестнет на субстрате, будет тебе опыт, но по моему опыту расту там особо не научишься. Научишься фреймворку 🤷
источник

D

Dmitry in Rust — русскоговорящее сообществo
Спасибо
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Roman
Обычно, при наличии обоих lib.rs и main.rs, либа используется в бинаре как зависимость. Импорт одного модуля и туда и туда кажется странным.
Там такая ситуация, что главное приложение - это бинарь, но для других внешних инструментов нужно использовать те же типы, что есть в главном приложении. Поэтому та часть, что либа - она меньше, из нее торчит наружу только то, что нужно для внешних инструментов. И кое-какие методы в отдельных типах нужны только внешним тулзам, поэтому сборка бинаря на них ругается...
источник

R

Roman in Rust — русскоговорящее сообществo
Разделить на крейты
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Можно, но в воркспейсе уже и так крейтов под два десятка. А там понадобится выносить не один крейт, если по-хорошему делать (потому что экспортируется не один модуль, и даже подмодули экспортируются выборочно). Проект большой. Придется городить иерархию вложенных крейтов/директорий, и пока не очевидно, что с этим будет удобнее работать, чем с иерархией модулей..
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Александр Мещеряков
Кто-нибудь сталкивался с таким: один и тот же модуль используется из lib.rs и main.rs, при этом функция в модуле используется только в случае библиотеки, когда она подключена как внешняя зависимость. В результате при компиляции бинаря, компилятор предупреждает, что функция не используется. Можно ли как-то настроить сборку так, чтобы это предупреждение было только если код не используется в бинаре *и* библиотеке, а не *или*?
А зачем ты включаешь один модуль в 2 места, вместо того, чтобы включить его только в билиотеку (lib.rs) и оттуда реэкспортировать?
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Хотя я вроде прочитал ответ, но все равно не понял
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Vlad Beskrovnyy
А зачем ты включаешь один модуль в 2 места, вместо того, чтобы включить его только в билиотеку (lib.rs) и оттуда реэкспортировать?
Ну вот смотри, один из примеров: есть модуль http, внутри у него етcь dto. В бинаре используется и тот и тот функционал, а для внешних тулзов нужен только http/dto. Типа инкапсуляция. Если выносить все в либу, то нужно либо разделять эти два логически связанных модуля, либо все выносить в либу, даже то, что ей не нужно.
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Но я все равно не понял. Какой из этих модулей в итоге есть в библиотеке? А в бинаре? Какой из этих модулей включен и туда и туда? Почему нельзя положить его только в библиотеку как pub и оттуда использовать в бинаре, а не включать в 2 места?
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Фичи - был бы неплохой вариант, если бы не воркспейс. В воркспейсе они всегда по-максимуму врубаются для всех зависимостей.
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Vlad Beskrovnyy
Но я все равно не понял. Какой из этих модулей в итоге есть в библиотеке? А в бинаре? Какой из этих модулей включен и туда и туда? Почему нельзя положить его только в библиотеку как pub и оттуда использовать в бинаре, а не включать в 2 места?
dto используется и там и там. Можно его вынести в отдельный крейт, но тогда он оторвется от модуля http, просто будет лежать в другом месте, а сейчас лежит все в одном.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Александр Мещеряков
dto используется и там и там. Можно его вынести в отдельный крейт, но тогда он оторвется от модуля http, просто будет лежать в другом месте, а сейчас лежит все в одном.
Ну используется, и что?
./lib.rs

pub use http::dto;
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Ну, звучит не очень резонно. Если dto есть в библиотеке, то там его и оставь, в бинаре импортируй из зависимости. Когда ты включаешь модуль 2 раза, ты буквально компилируешь его 2 раза, когда вообще это может быть хоть чем-то оправдано?
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Эрик
Ну используется, и что?
./lib.rs

pub use http::dto;
Так сейчас и сделано, и это вызывает проблемы, обсуждаемые тут )
источник

Э

Эрик in Rust — русскоговорящее сообществo
Александр Мещеряков
Так сейчас и сделано, и это вызывает проблемы, обсуждаемые тут )
Для такого придумали allow(dead_code)
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Александр Мещеряков
Так сейчас и сделано, и это вызывает проблемы, обсуждаемые тут )
Так нет же, если бы было сдалено так, то обсуждаемых тут проблем не могло бы быть. Ну или я все-таки так ничего и не понял
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Эрик
Для такого придумали allow(dead_code)
Вот этого и не хочется делать...
источник

Э

Эрик in Rust — русскоговорящее сообществo
Александр Мещеряков
Вот этого и не хочется делать...
В std::sys полно такого.
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Ну я склоняюсь все же к разбиению на крейты, но пока думаю, как их лучше организовать. В любом случае - всем спасибо за советы!
источник