LINUX.ORG.RU

Обновилась библиотека uthash

 ,


3

5

Собственно, в обновлении пофиксили баг с xxx_INORDER функциями. Если вы их у себя в коде их не использовали - не стоит беспокоиться, код не рухнет. Но на будущее обновиться имеет смысл.

Код библиотеки uthash на гитхабе:
https://github.com/troydhanson/uthash

Для новости это сильно мало, но библиотека в мире C популярная, поэтому на всякий случай пишу в Development.

★★★★★

Вопиющее неуважение к Ъ.

Для Ъ:

a hash table for C structures

Deleted
()

А интересная библиотека. Я так понял, строит хэш-таблицу прямо на предоставленных данных, без лишних вызовов malloc().

Интересно было бы сравнить производительность хэш-таблиц glib2 vs uthash vs моя самописная.

Deleted
()
Ответ на: комментарий от Deleted

да, она строит списки без копирования юзерских данных.

и этой библиотеке сто лет в обед. по-моему, она общеизвестна.

можешь сравнить. но зачем писать самописные, когда есть куча реализаций?

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

но зачем писать самописные, когда есть куча реализаций?

Из любви к искусству. Просто нравится оптимизировать алгоритмы. Надо бы причесать код моей хэш-таблицы и залить на гитхаб, кстати. Всё времени нет заняться.

Deleted
()
Ответ на: комментарий от Deleted

ну, если ты уверен, что ты их оптимизируешь :) а то чаще я вижу просто велосипеды. причём велосипеды, реализованные через пень-колоду. зато своё, родное.

Iron_Bug ★★★★★
() автор топика
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

Хых, напомнило вот это:

simple — It solves my use case.

opinionated — I don’t believe that your use case exists.

elegant — The only use case is making me feel smart.

lightweight — I don’t understand the use-cases the alternatives solve.

configurable — It’s your job to make it usable.

minimal — You’re going to have to write more code than I did to make it useful.

Особенно актуально про «lightweight». Обычно в какой «легковесный» софт не заглянешь, там под капотом обязательно алгоритмы со сложностью O-квадрат, если не похлеще.

Deleted
()
Ответ на: комментарий от Deleted

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

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Sorcerer

Да потому что для Си типонезависимые алгоритмы - это боль. Макрособоль.

Сейчас ты нам сделаешь аналог на темплейтах?

Макрособоль.

Макро-Соболь. %-)

Deleted
()
Ответ на: комментарий от Iron_Bug

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

Ну бывают еще промежуточные варианты. Выслать патчи, например.

Deleted
()
Ответ на: комментарий от Sorcerer

Да вроде нет

Нет кода - нет и предмета спора.

Deleted
()
Ответ на: комментарий от Sorcerer

скажу тебе по секрету, что в системах никакой типонезависимости нет. есть разные костыли, которые скрывают это от слабонервных юзеров. C - нормальный инструмент разработки. он не предлагает свистелок и перделок искаропки. но на нём можно написать что угодно.

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Deleted

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

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

Но нападки плюсовиков на сишные макросы при этом вполне обоснованы. Я люблю Си и всю сознательную жизнь пишу на нём, но недостатки любимых инструментов надо тоже уметь признавать.

Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

понимаешь, это не недостаток. это просто реальность. если какие-то юзеры её не осознают - это их проблемы. просто С ставит разработчика перед реальностью, как она есть. поэтому многие неосиляторы его не любят. но это их проблемы, а не проблемы С. плюсы тоже неосиляторы не любят, как правило. потому что в синтаксис темплейтов, в общем виде, нужно тоже вникать. но это не проблема плюсов. я использую С и иногда плюсы, не вижу никаких минусов ни там, ни там. просто это разные инструменты.

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

понимаешь, это не недостаток. это просто реальность.

Если невозможность отладки без извращений и жуткий костылесинтаксис в многострочных макросах - это не недостаток, а реальность, то ну её нафиг, такую реальность. :)

Sorcerer ★★★★★
()
Ответ на: комментарий от Iron_Bug

я использую С и иногда плюсы, не вижу никаких минусов ни там, ни там. просто это разные инструменты.

Для полноты картины нужно написать, какие инструменты ты ещё знаешь. А то если ты знаешь только C и иногда плюсы, неудивительно, что минусов не видишь. Просто сравнивать не с чем.

i-rinat ★★★★★
()
Ответ на: комментарий от Iron_Bug

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

Хм, ну мы друг друга не совсем поняли. Я имел в виду в основном прикладной софт, который часто совсем не такой «легковесный», как думают авторы.

Что касается этой библиотеки, полагаю, она вполне профессионально написана.

Ну а мой велосипед в основном исследовательские цели преследует.

Deleted
()
Ответ на: комментарий от i-rinat

а зачем мне другие? я пробовала С#, lua, perl, Clisp, PHP. сто лет назад даже паскаль и бейсик. также ассемблеры под разные архитектуры. но я могу написать что угодно на С. зачем мне всё прочее? С невероятно распространён, поддерживается почти на всех архитектурах и платформах. он не тащит с собой кучу барахла, которое нужно установить на систему. это самый главный плюс. он универсален.

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

Iron_Bug ★★★★★
() автор топика
Последнее исправление: Iron_Bug (всего исправлений: 2)
Ответ на: комментарий от Iron_Bug

я пробовала С#, lua, perl, Clisp, PHP. сто лет назад даже паскаль и бейсик
я могу за пару недель выучить любой язык программирования

Да, почти на любом языке можно писать на С.

anonymous
()
Ответ на: комментарий от Sorcerer

Но нападки плюсовиков на сишные макросы при этом вполне обоснованы.

Нападки плюсовиков обычно сводятся к синдрому утёнка. Редко - что-то большее.

Я люблю Си и всю сознательную жизнь пишу на нём, но недостатки любимых инструментов надо тоже уметь признавать.

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

Поэтому недостаток из разряда «в вашем гоночном болиде спойлер не в тот цвет покрашен».

Deleted
()
Ответ на: комментарий от Deleted

на то и нужны библиотеки. обычно библиотеки решают конкретные задачи.

плюс от использования библиотек в том, что тебе не надо отлаживать уже отлаженные вещи. когда ты довёл программу до совершенства и выяснил, что производительность упирается именно в библиотеку - ты можешь начать писать свой велосипед, только под конкретное применение. а до этого момента не стоит переусложнять себе жизнь. в крайнем случае, если ты на этапе разработки знаешь временные и прочие требования к задаче, ты можешь написать пару бенчмарков и прогнать на разных библиотеках. я обычно так и делаю, чтобы убедиться, что библиотека подходит для моих целей.

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Нападки плюсовиков обычно сводятся к синдрому утёнка. Редко - что-то большее.

У плюсовиков в языке те же сишные макросы, так что это именно боль от убогости языка.

anonymous
()
Ответ на: комментарий от Deleted

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

обычно их там просто нет. и даже С иногда бывает урезан. но диванные войска не учитывают, что бывают сферы применения, где все их скриптики и супер-пупер автоматизированные высокоуровневые языки просто пустое место. они также забывают, что всё это барахло не работает без С, на котором написаны системы и многие библиотеки, поверх которых крутится вся эта попсня.

Iron_Bug ★★★★★
() автор топика
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от anonymous

ты путаешь убогость мышления со средствами разработки. убогость проявляется лишь в неспособности осилить. именно отсюда все проблемы. ты испытываешь «боль». а нормальные разработчики пишут на С и на плюсах огромные библиотеки. так что проблема не в языках.

чем меньше мозга - тем меньше шансов освоить С. хотя с точки зрения синтаксиса он очень прост, даже слишком прост.

Iron_Bug ★★★★★
() автор топика
Последнее исправление: Iron_Bug (всего исправлений: 1)

Ребят, во что вы /dev превращаете? Сначала эти готичные новасти, потом толксы в обсуждениях.

anonymous
()
Ответ на: комментарий от Iron_Bug

ты путаешь убогость мышления со средствами разработки. убогость проявляется лишь в неспособности осилить. именно отсюда все проблемы

Осилить что? Написание большего кол-ва кода для решения одних и тех же задач? Возьмем банальнейший пример:

macro_rules! max {
    ($x:expr) => ( $x );
    ($x:expr, $($xs:expr),+) => {
        {
            std::cmp::max($x, max!( $($xs),+ ))
        }
    };
}
...
max!( a.size(), b.size() + c.size(), d.count_of( 0 ), 1024 );
max!( 1, 2, 3 );

Напиши подобный макрос на С и покажи пример использования.

anonymous
()
Ответ на: комментарий от Deleted

А зачем ржавчина в сраче о крестах?

Во-первых топик изначально о сишке. Во-вторых макросы в С и С++ - одно и тоже. А значит, если и сравнивать с чем-либо, то с близким по назначению. А это именно Rust.

anonymous
()
Ответ на: комментарий от anonymous

макросы в С и С++ - одно и тоже

А можно этот момент поподробнее? Плюсовые темплейты и сишные макросы одно и то же имеется в виду?

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 2)
Ответ на: комментарий от makoven

Вангую, что он имел ввиду именно макросы. В C++ тоже есть макросы, практически индентичные с сишными.

anonymous00 ★★
()
Ответ на: комментарий от anonymous

А значит, если и сравнивать с чем-либо, то с близким по назначению. А это именно Rust.

Оно конечно ага. Но есть такое дело:

Десятилетия идут, убийцы си крестов и всё множатся, а воз и ныне там. В итоге, если хочешь писать что-то кроссплатформенное или просто очень оптимизированное, то выбора особо нет.

Мощный макропроцессор - это отлично. Но его надо пинками протолкнуть в спеку си - тогда будет толк. Иначе это всё получается история с картинки про 15 стандартов.

Вумные люди вместо этого ковыряют в носу и глубокомысленно добавляют в си комплексные числа и прочие свистоперделки. Ну. Такой у нас судьба.

Deleted
()
Ответ на: комментарий от makoven

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

От академического оберона, до наколеночного seed7.

Deleted
()
Ответ на: комментарий от tailgunner

А египтяне построили пирамиды.

А мы, слабаки, — не можем.

Так что пишите софт на си, пока еще можете. ^_^

Deleted
()
Ответ на: комментарий от Deleted

Десятилетия идут, убийцы си крестов и всё множатся, а воз и ныне там. В итоге, если хочешь писать что-то кроссплатформенное или просто очень оптимизированное, то выбора особо нет.

Да я и сам на крестах пишу, и тоже аналогов не вижу для отдельных задач (при этом используя достаточно большой зоопарк языков). Просто меня удивляют те, кто пытается с умным видом заявлять, что это, например, не макросы в С и С++ убогие, а те, кто их «не осилил» (с).

anonymous
()
Ответ на: комментарий от anonymous

Напиши подобный макрос на С и покажи пример использования.

Я правильно понимаю, что этот макрос строит портянку из вложенных вызовов std::cmp::max() ?

Почему просто нельзя вызвать std::cmp::max() с любым количеством аргументов? Почему макрос сам не находит максимум?

deadskif
()

не кормите троллей и не разводите срач. тема про uthash, про обновление библиотеки. на этом всё.

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от deadskif

Я правильно понимаю, что этот макрос строит портянку из вложенных вызовов std::cmp::max() ?

Да, но компилятор все инлайнит и выдает в итоге эффективный код без лишних вызовов (проверено). Это если не нравится сам факт вызова функции.

Почему просто нельзя вызвать std::cmp::max() с любым количеством аргументов?

Потому-что std::cmp::max имеет два параметра. В Rust нет аналога variadic template из С++ и потому безопасно (безопасней чем в С) сделать это без макросов не получится.

Почему макрос сам не находит максимум?

А зачем? Если ты подозреваешь, что макросы в Rust этого не могут, то ты ошибаешься, точно так же они могут построить «портянку» из вложенных if и выражений произвольной сложности. Но если уже есть часть готового кода - почему бы его не переиспользовать.

anonymous
()
Ответ на: комментарий от anonymous

вот и иди отсюда в тему про свою ржавчину. недавно только обсуждали, что она непригодна для программирования. там и пиши всё это.

Iron_Bug ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

вот и иди отсюда в тему про свою ржавчину. недавно только обсуждали, что она непригодна для программирования. там и пиши всё это.

А зачем мне ржавчина, если я все еще жду пример мастер-класса от истинного гуру С, который знает как правильно писать на нем макросы.

anonymous
()
Ответ на: комментарий от Iron_Bug

но мне это просто не нужно

Ты так никогда и не узнаешь, что что-то было нужно.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.