Loo
и то что ты можешь сделать get::<u32, String> а за ним к той же базе get::<i64, u8>
Loo
неужели не видно что абсракции протекают?
Marat
не понял при чём тут это
У тебя есть одна база где ты хочешь хранить несколько разных типов, как ты ее несколько раз откроешь
Marat
Не выйдет так
Marat
Сделай обёртку над db
Vladimir
блин, база данных позволяет в каждой ячейке иметь разную пару (ключ, значения). Ты просишь поменять её семантику, на использование только для одной пары (ключ, значения)
Vladimir
биндинг тут не причем
Loo
это
Vladimir
Ну это имдб такой, биндинги не должны ломать интерфейс
Loo
в расте идиоматика накладывает определённые требования
Marat
Я не понимаю, что мешает то сделать обёртку которая будет с нужным интерфейсом?
Marat
И более того это правильно будет
Loo
Я не понимаю, что мешает то сделать обёртку которая будет с нужным интерфейсом?
ничего, я говорю о реализации в lmdb-rs, а не о сложности реализации какой-либо обёртки
Marat
ничего, я говорю о реализации в lmdb-rs, а не о сложности реализации какой-либо обёртки
Так она правильная. Она разрешает тебе сделать бд которая хранит разные типы
Marat
Поверх нее можно построить абстракцию бд которая будет хранить только определенный тип
Marat
Можно даже её в либу предложить
Marat
Чтобы не каждый делал
Маjко
Ну дак и речь о том что API говно и могли бы сразу сделать нормальную идиоматичную обертку
Маjко
Это и есть абстракция, ну
Маjко
Это не голый *-sys биндинг с ансейфами
Loo
Так она правильная. Она разрешает тебе сделать бд которая хранит разные типы
на мой взгляд идиоматичный интерфейс это тот интерфейс который статически типизирован. да может в другом языке это ок было бы - но не тут. если говорить о гетерогенных структурах данных в качестве Value - то пример можно взять из serde_json::Value где это Enum и таким образом ты можешь чекать какой там тип. это тру вэй на мой взгляд который вписывается в концепцию языка. а то что они сделали - это сырая обёртка над сишкой которая не соответствует идиоматике
Marat
Ну я лично считаю что наоборот сделали правильно. Дали минимальную абстракцию и дали возможность строить поверх нее как надо. То есть было бы хуже, если бы дали только типизированный, который не позволяет нетипизированный базы
Vladimir
не, возможно они все-таки не правы что сделали возможность пихать туда любые ключи, а не просто "байты"
Нави
А легко строку в число преобразовать? Числа целые, только из цифр строка систоит
Vladimir
https://doc.rust-lang.org/std/str/trait.FromStr.html
Marat
Хочешь типы, сам делаешь
Vladimir
да, просто я к тому, что интерфейс с определенным типом для бд, будет не эргономичный.
Vladimir
и к тому же не убирает возможность юзать вещи не правильно
Vladimir
т.е. еще хуже имхо
Loo
да, просто я к тому, что интерфейс с определенным типом для бд, будет не эргономичный.
я за то чтобы пользователь сам на этапе создания хэндла базы определял типы
Vladimir
ну база эта не для того создана, еще раз. Ты нарушаешь семантику базы, в угоду какой-то выдуманной идиоматичности
Маjко
Давно ORM стал нарушением семантики базы?
Marat
т.е. еще хуже имхо
Вот да, типизированную абстракцию построить это очень легко впринципе
Маjко
ORM не так работает
ORM мапит байтики от базы в реальные типы. Типизированные get и put делают то же самое. Где ты видишь нарушение семантики?
Маjко
ORM - это блять абстракция поверх реляционных бд, это KV
В KV нельзя хранить типизированные данные? Только байтики без семантики?
Vladimir
В KV ты можешь хранить что угодно, но это будет надстройка поверх
Vladimir
по умолчанию в KV нет никакого отношения
Vladimir
и структуры данных
Маjко
Блин, хранишь ты там в любом случае не байты, а структурированные данные
Маjко
Если ты не на ассемблере пишешь
Vladimir
Хранишь ты там байтики
Маjко
Нет
Vladimir
а то как ты их интерпретируешь это уже твоя абстракция
Маjко
Ты хранишь структурированные данные, представленные байтиками
Vladimir
еще раз, почитай, что такое реляционная бд, и посмотри почему KV онной не является
Маjко
а то как ты их интерпретируешь это уже твоя абстракция
Да, а в интерфейс БД ты пихаешь типизированные структуры энивей
Vladimir
молодец, тогда почему предлагаешь абстракции для реляционной натянуть на чистый KV?
Маjко
Указатели на голые данные и байтоебство -- это сишный подход и там он актуален. Тут принято оперировать типизированными данными, по этому интерфейс, оперирующий байтами там, где очевидно идет обмен структурированными данными, не идиоматичен
Маjко
молодец, тогда почему предлагаешь абстракции для реляционной натянуть на чистый KV?
Потому что в KV ты пишешь и получаешь структурированные данные. Массив байт -- тоже тип, если что
Vladimir
Понятно, что когда ты пишешь в KV ты знаешь что за ТД ты пишешь. Но это не значит, что у твоей бд есть структура. Потому что KV существуют в том числе для динамики, когда человеку нужно разнородные структуры пихать и как-то хендлить forward compatibility.
Vladimir
Т.е. вернулись к тому с чего начали, абстракций поверх KV может быть много. Даже реляционную бд сверху можно натянуть ( в неком урезанном виде). Но не существует единственно верной идеологической абстракции.
Vladimir
да что такое идиоматично
Маjко
это не значит, что тут подходит ORM
Что ж ты прикопался к словам то?) Ты не находишь что некоторые концепции ORM тут применимы?
Vladimir
Линк мне как идиоматично
Маjко
Не тут, а только в определенной задачи
В любой задаче, где нужно сдать типизированные данные и получать их из KV, лол, да
Маjко
Hyper::header
По сети тоже шлется поток байт, знаешь ли) Но тем не менее операции над хэдерами статически типизированы
Vladimir
https://prnt.sc/gl1nmn
единственная ссылка которая подходит описанию это ссылка на гитхаб? Это не та где собраны разные статьи, которые к создателям языка не имеют отношения?
Маjко
И был емнип репозиторий со сборником статей по idiomatic rust
Vladimir
У нас не комитет, у нас коммунити
так в этом коммунити, если почитать совершенно разные мнения по поводу идиоматичности
Vladimir
может стоит перестать апеллировать к этому термину