Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
meliafaro
@meliafaro_gitlab
Можно, наверное, и проще, но это придёт с опытом.
Пока не осилил, как сторонние крейты подключать к этому плейграунду.
tanriol
@tanriol:matrix.org
[m]
К плейграунду произвольные никак - у них есть белый список доступных, остальных нет.
Psilon
@Pzixel
я думаю плейграунд тут не нужны особо стороннике крейты, достаточно скопировать пару функций с нужными сигнатурами и показать что оно вот так работает
с другой стороны неудивительно - функа же вызывается для лайфтаймов которых снаружи нет
sobaka_v_kepke
@chabapok_twitter
а скажите мне. Есть такая штука, когда build.rs может сделать println вида cargo:rustc-cfg=KEY[="VALUE"], и частный случай этой формы, это feature="x". И все бы хорошо. Но мне ж для фичих недостаточно просто включить эту фичу. Мне для этой фичи нужна еще и депенденсь. Вот как бы включить депенденсь через build.rs? (или отключить если фичи х нет)
tanriol
@tanriol:matrix.org
[m]
Сколько я знаю, никак (зависимости полностью ресолвятся сильно раньше той фазы, когда выполняется build.rs).
sobaka_v_kepke
@chabapok_twitter
%(
Psilon
@Pzixel
сформулируй задачу более полно
зачем ты в билдрс это задаешь а не в томле и т.п
sobaka_v_kepke
@chabapok_twitter
у меня build.rs берет список фич из внешней xml (которая может быть разной от сборки к сборке). Ну, по крайней мере, в этом был план. И хотелось, "лишние" депенденси поотключать. Если фичих нет - то чтобы и депенденсь не собиралась
Psilon
@Pzixel
image.png
Это не то что ты хочешь?
sobaka_v_kepke
@chabapok_twitter
правильно. И если я в build.rs делаю println!("cargo:rustc-cfg=feature=\"fancy-feature\""); то это не включает зависимости foo и bar. А это дает только то, что в коде можно пользоваться аннотацией #[cfg(feature="fancy-feature")].
Denis Lisov
@tanriol
Почему ты включаешь их в build.rs, вместо того, чтобы пользоваться штатным механизмом с объявлением фич в Cargo.toml?
sobaka_v_kepke
@chabapok_twitter
а мне надо, чтобы включило foo и bar :)

Почему ты включаешь их в build.rs, вместо того, чтобы пользоваться штатным механизмом с объявлением фич в Cargo.toml?

у меня есть внешний xml-конфиг, который обрабатывается build.rs-скриптом, генерирующим код.

и в зависимости от внутреностей моей хмл, мне нужны те или иные зависимости. Ну можно конечно включить сразу все, собственно, наверное, так и придется сделать. Но по большому счету, мои зависимости - взаимоисключающие. Если есть какая-то одна - то какой-то другой точно не будет. И ее можно не собирать.
tanriol
@tanriol:matrix.org
[m]
На мой взгляд, будет более корректно получить из конфига список фич до того, как вызываешь cargo для сборки. Нет, наверняка с определёнными костылями можно и из build.rs, но оно того не стоит.
sobaka_v_kepke
@chabapok_twitter
ну, понятно, что так можно
Psilon
@Pzixel
зачем тебе это в билдрс делать ссерьезно?
делай cargo build --feature ...
sobaka_v_kepke
@chabapok_twitter
проще тогда уж запсускать вторичный cargo как gcc - c нужными ключиками. Но это изврат.
самое простое - чтобы были включены в зависимости все фичи :)
и хрен с ними
Psilon
@Pzixel
зачем тебе карго билд для этого?
сделай mybuild.sh
где читай любые XML и запускай карго с любыми ключами
sobaka_v_kepke
@chabapok_twitter
ну, наверное, если сильно захочется - то как-то так и придется сделать.
или генерить Cargo.toml. Но это тоже изврат
Psilon
@Pzixel
у тебя в томле уже будет описаны от каких фич какие либы зависят
от теба требуется только зпустить карго с нужными ключами
sobaka_v_kepke
@chabapok_twitter
когда-нибудь потом, наверное, так и нужно будет сделать.
nnovikov
@tgz:matrix.org
[m]

а есть чтото автомалическое для вот такого:

.context(format!("error ({}:{})", std::file!(), std::line!()))?;

Psilon
@Pzixel
сделай свой макрос
или функцию
nnovikov
@tgz:matrix.org
[m]
это я могу, но вдруг кто-то уже сделал
Psilon
@Pzixel
никто не сделал, это 1 строчка
sobaka_v_kepke
@chabapok_twitter

Хм. PhantomData ненужен, если параметризируем числом:

struct Foo<const N: u8> {
    x: u8,
    _pd: std::marker::PhantomData<N>,  // <- вот так не пустит. Эта строка вообще ненужна
}

Странно. Для типа нужно - а для числа нет.

Psilon
@Pzixel
прикольно, инетресно
tanriol
@tanriol:matrix.org
[m]
@chabapok_twitter: Вот так очевидно не пустит, поскольку у PhantomData параметр тип, а не константа.
meliafaro
@meliafaro_gitlab
Господа, нигде не могу найти, чем отличается переменная const от немутабельной static
Между ними вообще есть какая-то разница?
Adilet
@sadilet
@meliafaro_gitlab если мы говорим про твой локальный скоуп, то ничем. Константы можно объявлять глобально и использовать в течение всего рантайм.
tanriol
@tanriol:matrix.org
[m]
@meliafaro_gitlab: Разница в том, что static - это переменная, то есть кусок памяти, в котором лежит указанное значение. У него может быть, например, внутренняя мутабельность. Или хотя бы фиксированный адрес.
А const - это значение, а не переменная. Наверное, в терминах плюсов это было бы rvalue. Каждый раз, когда ты его упоминаешь, это логически отдельная копия заданного значения. LLVM в принципе может их объединить где-то (если у него нет внутренней мутабельности), а может и нет. И, например, взятие адреса константы - даёт тебе адрес временной переменной с указанным значением.
meliafaro
@meliafaro_gitlab
Понял, спасибо!\
Psilon
@Pzixel

Между ними вообще есть какая-то разница?

выше уже в целом объяснили

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