Loo
Alex
тут буквально вчера или позавчера его обсуждали, но не помню название.
Marat
Нашел да
Marat
И не один
Alex
они типы тоже конвертируют?
Marat
Хотя видимо bindgen лучший
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?
Loo
Michael
из описания что там что там KV
Michael
тикв похож на таракан бд, только умеет впридачу ещё олап
Loo
Vladimir
ну я правильно понимаю, что твоя притензия в том, что с бд неудобно работать, так как она не хранит тип ключ/значение?
Vladimir
я не открывал доку, просто сужу по твоим словам
Loo
мм не то чтобы не удобно работать. растовский интерфейс позволяет тебе сделать такое:
Loo
db_handle.set::<String, i64>(&a, &b);
Loo
а после
Vladimir
да позволяет. но это такая база данных
Loo
db_handle.get::<u32, String>(&a, &b);
Vladimir
ты тут ничего не сделаешь, разве что будешь хранить typeid, но где гарантия что тайпайди не сломается в новой версии раста?
Loo
Vladimir
всмысле интерфейс? Покажи как должен выглядеть интерфейс который полностью обезопасит от этого
Loo
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
и все упадет
Loo
Loo
Filipp
я поддерживаю что должна быть возможность указать типы при создании подключения
Vladimir
Эмм, какая связь?
Vladimir
работа с бд априори ансейф
Loo
если интерфейс либы позволяет при гетах
Loo
трансмьютить хоть что в хоть что
Loo
нет смысла
Marat
Вообще я rocksdb для базы, он только байты принимают
Loo
да ты это можешь сделать создав вторую дб
Marat
А сериалайзю вручную
Vladimir
Плюс в таких либах очень часто нужны гетерогенные структуры
Filipp
если указывать типы и при сете и при гете, то их придется указывать два раза
Loo
плюс вероятность ошибиться существенно выше
Loo
если бы я хотел так писать то писал бы на жс
Vladimir
Vladimir
но если тебе нужно работать с одной бд, но у которой будет несколько пар (ключ значения)
Vladimir
то изза Лока ты вообще можешь не открыть их
Vladimir
хз в imdb есть ли лок
Loo
Vladimir
ну вот темболее, тут уж не откроешь инстансы для каждой пары