Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
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

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

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

но если в двух словах то константа всегда инлайнится по месту использования
а статик значение используется по ссылке
Vital Leshchyk
@itcreator
Всем доброго времени суток
не могу понять умеет ли cargo перепаблишить нестабильные версии по нескольку раз (например 0.1.0-dev) ?
и возможно ли запушить с версией не из манифеста (например cargo publish --version=0.1.0-dev.2 ?
tanriol
@tanriol:matrix.org
[m]
Сходу мне кажется, что на оба вопроса ответ "нет".
Vital Leshchyk
@itcreator
грустно
а как принято паблишить пакеты?
не хочется каждый раз руками править версию, паблишить и делать отдельный комит с версией
ну или заранее апать версию
хочетсся делать тулзу (впрочем уже сделана) которая сгенерит версию и останется её только паблишить
nnovikov
@tgz:matrix.org
[m]
cargo release
Vital Leshchyk
@itcreator

cargo release

а точно не cargo publish ?

nnovikov
@tgz:matrix.org
[m]
если апать версию, то точно
publish оно тоже умеет, но я не пробовал
Vital Leshchyk
@itcreator
Vital Leshchyk
@itcreator
Всем бобра
Понадоедаю ещё немного )
Буду признателен, за ревью, советы как делать/как не делать вот в этой штуке
https://gitlab.com/rusty-argentum/argentum
Anton Sinitsyn
@sinitcin
trait AddressFormat {
    type PubkeyFormat;
    type AddrFormat;

    fn new(addr: &str) -> Self;

    fn addr_to_pubkey(addr: Cow<&str>) -> Self::PubkeyFormat;

    fn pubkey_to_addr(pubkey: Self::PubkeyFormat) -> Self::AddrFormat;
}

struct AddressConvertor<'a, T_IN: AddressFormat, T_OUT: AddressFormat> {
    phantom_in: PhantomData<&'a T>,
    phantom_out: PhantomData<&'a T_OUT>,
}

impl <T_IN: AddressFormat, T_OUT: AddressFormat>AddressConvertor<'_, T_IN, T_OUT> {

    pub fn convert(address: T_IN) -> T_OUT {
        unimplemented!()
    }
}

fn main() {

    let addr: Bech32 = AddressConvertor::<'_, ss58, Bech32>::convert(ss58::new());
}

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

Суть в том, что мне из одного формата адреса надо преобразовать в другой, однако они реализуют один и тот же трейт.

Количество форматов и их функции преобразования заранее не известны
Anton Sinitsyn
@sinitcin
Блин, это оказалась просто опечатка в phantom_in
Roman
@kpp