Alex
тут буквально вчера или позавчера его обсуждали, но не помню название.
Marat
Нашел да
Marat
И не один
Alex
они типы тоже конвертируют?
Marat
Хотя видимо bindgen лучший
Маjко
Хотя видимо bindgen лучший
А я как дурак сам писал :/
Marat
они типы тоже конвертируют?
Ну они генерируют структы если надо как я понимаю
Alex
да, структуры нужны
Alex
просто у меня в одном проекте хер поймешь с этими макросами что за структура.
Маjко
Ну по хорошему биндген запускается из build.rs
Маjко
и генерит биндинг на месте
Loo
хотите пример трэш-раст интерфейса над сишной либой?
Loo
вот
Loo
https://github.com/vhbit/lmdb-rs
Маjко
Давай
Loo
http://vhbit.github.io/lmdb-rs/lmdb_rs/core/struct.Database.html#method.get
Loo
смотрите на ахуенную функцию get
Loo
и её сигнатуру
Loo
http://vhbit.github.io/lmdb-rs/lmdb_rs/core/struct.Environment.html#method.get_db
Loo
и смотрите на сигнатуру получения базы из энва
Loo
при создании базы не указывается тип Key и тип Value
Loo
при get ты уже указываешь
Loo
какой хочешь
Loo
вот это не идиоматичный интерфейс на мой взгляд
Loo
над сишным lmdb
Loo
там так мало строк кода в lmdb что переписывание на раст не кажется такой безумной идеей
Loo
но лень офкозе
Michael
а если вместо ламбады заюзать tikv?
Michael
из описания что там что там KV
Michael
тикв похож на таракан бд, только умеет впридачу ещё олап
Vladimir
при get ты уже указываешь
Может там база может работать с разными ключами и значениями?
Vladimir
ну я правильно понимаю, что твоя притензия в том, что с бд неудобно работать, так как она не хранит тип ключ/значение?
Vladimir
я не открывал доку, просто сужу по твоим словам
Loo
мм не то чтобы не удобно работать. растовский интерфейс позволяет тебе сделать такое:
Loo
db_handle.set::<String, i64>(&a, &b);
Loo
а после
Vladimir
да позволяет. но это такая база данных
Loo
db_handle.get::<u32, String>(&a, &b);
Loo
да позволяет. но это такая база данных
это не база такая. а интерфейс над ней.
Vladimir
ты тут ничего не сделаешь, разве что будешь хранить typeid, но где гарантия что тайпайди не сломается в новой версии раста?
Vladimir
всмысле интерфейс? Покажи как должен выглядеть интерфейс который полностью обезопасит от этого
Vladimir
окей, а теперь я создаю другое дб let db_handle = env.get_db::<i64, String>("some-db", DbFlags::new());
Vladimir
работаю с теми же данными
Vladimir
но уже безопасно??
Marat
Кстати да, странная претензия
Loo
смысл в том что ты создаёшь db с указанными типами K и V и на этапе компиляции чекаешь что ты туда SET-ишь и PUT-ишь
Loo
Кстати да, странная претензия
не странная, абсолютно
Loo
естественно ты можешь создать другую db над теми же данными
Loo
с другими типами
Loo
но ограничения на типы будут действовать
Loo
это главное
Vladimir
толку с них, если я могу тоже самое сделать?
Filipp
толку с борроучекера если я могу unsafe написать
Filipp
и все упадет
Filipp
я поддерживаю что должна быть возможность указать типы при создании подключения
Vladimir
Эмм, какая связь?
Vladimir
работа с бд априори ансейф
Loo
если интерфейс либы позволяет при гетах
Loo
трансмьютить хоть что в хоть что
Loo
нет смысла
Marat
Вообще я rocksdb для базы, он только байты принимают
Loo
да ты это можешь сделать создав вторую дб
Marat
А сериалайзю вручную
Vladimir
Плюс в таких либах очень часто нужны гетерогенные структуры
Filipp
если указывать типы и при сете и при гете, то их придется указывать два раза
Loo
плюс вероятность ошибиться существенно выше
Loo
если бы я хотел так писать то писал бы на жс
Vladimir
но если тебе нужно работать с одной бд, но у которой будет несколько пар (ключ значения)
Vladimir
то изза Лока ты вообще можешь не открыть их
Vladimir
хз в imdb есть ли лок
Vladimir
ну вот темболее, тут уж не откроешь инстансы для каждой пары