Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
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
Evgeniy Tatarkin
@estin
@IncSW привет! пытаюсь подружить ntex + и geoip2 (думаю вы автор)
пытаюсь добиться того что бы Reader создался один раз при старте приложения.
Так как Reader<'a, T> и ntex хочет 'static для того что бы расшарить "состояние"
Опыт у меня маленький и по большей части с Owned структурами )
вот попытка вторить ошибку https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f9657a7956591e111170496fe0d73844
как правильно организовать код? или не ужели на каждый запрос надо инициализировать Reader<'a, T>?
Denis Lisov
@tanriol
А это дорого? Выглядит так, словно инициализация Reader - дешёвая операция...
Evgeniy Tatarkin
@estin
нет, но там читается Metadata, как миниум вот это делается https://github.com/IncSW/geoip2-rs/blob/master/src/metadata.rs#L26
т.е. данные одни и те же, и перечитывать metadata не нужно
Denis Lisov
@tanriol
А необходимость обновлять эти данные по ходу работы может возникнуть?
Evgeniy Tatarkin
@estin
нет, загрузили все на старте и сервим запросы.
Хочу прикрутить geoip2 к https://github.com/estin/geosuggest и тогда можно город определять по координатам и/или по IP
Denis Lisov
@tanriol
Если "всё на старте", то есть такая неприятная, но иногда полезная штука, как Box::leak. Позволяет вместо владения получить ссылку с любым временем жизни, в том числе 'static. Недостаток один - штатных способов освободить эту память до завершения программы не существует. Да, и valgrind будет ругаться на утечку памяти.
Evgeniy Tatarkin
@estin
спасибо! попытаюсь её использовать!
Evgeniy Tatarkin
@estin
@tanriol Спасибо! компилятор доволен, я доволен )
Andréy Lesnikóv
@ozkriff
если тут еще есть вдруг кто-то живой, кого нет в телеге - открыта подача заявок на декабрьскую московскую растоконфу https://rustcon.ru/cfp
tanriol
@tanriol:matrix.org
[m]
Есть, спасибо. Докладывать, правда, нечего :-)
sobaka_v_kepke
@chabapok_twitter

Скажите, пожалуйста. Вот лежат в examples собственно, экземплы. И для работы экземпла обязательно нужна определнная феатура. Как это правильно указать? то, что я нашел - это что можно так

[[example]]
name = "my_cool_example"
required-features = ["my_feature_name"]

Но суть в том, что логика этого поля - обругать тебя, если ты не указал в строке запуска --features="my_feature_name". А вроде как логично, чтобы феатура просто включалась, когда компилишь этот пример. Такое есть?

sobaka_v_kepke
@chabapok_twitter
вроде делали такое rust-lang/cargo#2056
но - так не работает
%(
sobaka_v_kepke
@chabapok_twitter
изучаю код этого PR.. Как-то у них все наоборот. Cекция features=["a"] не включает феатуру, а просто говорит, что фатура может быть или не быть. А включать ее всеравно надо ключиками для cargo
tanriol
@tanriol:matrix.org
[m]
А какой логики ожидал бы ты - включить все фичи, которые используются хотя бы одним примером?
sobaka_v_kepke
@chabapok_twitter
Мне для компиляции примера нужна фича. И логично прописать эту фичу сразу в cargo. Чтобы когда пример собираешь - эта фича всегда была включена. И чтобы либа шла с этой фичей.
когда мы используем либу как либу - мы говорим в карго, мол "я хочу использовать вот эту либу с этими фичами". То же самое я ожидаю, когда компилю примеры
Этоже очевидно
Дмитрий Федоренко
@c0va23:matrix.org
[m]
Если я правильно понимаю, то текущее воведение сделано так, что бы при запуске cargo test --examples --features my_feature не запускало лишнего. Для такого случая, если у каких-то примеров будет форсировано включение конкретных фич, то не ясно как дейстовать : запускать их всегда или незапускать когда не передана явно фича. А если не указывать явно список фич, то, на сколько я понимаю, будет использовать список стандартных фич, и в таком случаи тоже логично не запускать примеры, у которых требуют не стандартных фич.
sobaka_v_kepke
@chabapok_twitter
я запускаю так cargo run --example my_exmpl_name --features my_f_name, и я вынужден указывать фичи, иначе будут ошибки компиляции.
на счет запуска cargo test... - фиг его знает.
может действительно для тестов оно должно работать так, как работает
Дмитрий Федоренко
@c0va23:matrix.org
[m]
Для падения при запуске одного примера падать, когда не ключены все фичи, я тоже вижу сценарий использования. Так можно проверять что пример не будет рабоать при отсутствии нужной фичи. Плюс унификация, для заупска одного примера и для всех - поведение будет одинаковым. Плюс поведение примера может зависеть от списка переданных фич. В теории можно написать обётрку, которая будет запускать примеры с минимальным необходимым набором фич. Что-то типа cargo run-example <example_name>.
sobaka_v_kepke
@chabapok_twitter
ну да. Тогда поле required-features - это что нужно. Не указал нужные фичи - досвиданья. Получается так.
ildar
@ildar:matrix.org
[m]
Есть ещё ‘default-features‘ или что-то вроде того
sobaka_v_kepke
@chabapok_twitter
не, то для другого
Дмитрий Федоренко
@c0va23:matrix.org
[m]

Если я правильно понял суть проблемы, то такой скрипт должен помочь решить её:

#!/usr/bin/env bash

example_name=$2

jq_query=".packages | map(select(.source == null)) | map(.targets) | flatten | map(select(.kind | contains([\"example\"]))) | map(select( .name=\"$example_name\"))[0][\"required-features\"] | join(\",\")"
features=$(cargo metadata --format-version=1 | jq -r "$jq_query")

echo "Run example $example_name with features $features"

cargo run --features "$features" --example $example_name

Нужно сохранить файл (например, cargo-example где-нибудь в $PATH и сделать ему chmod u+x cargo-example. Для работы требуется jq.

Использовать его можно так cargo example <example_name>.

sobaka_v_kepke
@chabapok_twitter
хех %) Это понятно. Спасибо конечно...