LINUX.ORG.RU

Библиотека алгоритмов и структур данных для C

 , ,


0

4

В который раз наблюдая за велосипедами в одном сишном проекте, задался вопросом, а нет ли относительно «стандартной» библиотеки для алгоритмов и структур данных, хотя бы на уровне крестовой STL?

И даже если есть, то почему почти в каждом проекте(возьмем для простоты открытые) свои велосипеды? На каждый чих. Неужели язык толкает на это(сложно предложить достаточно общее решение)?

Если такой библиотеки просто нет, то возможно есть смысл ее создать? У кого какие мысли, кто какие перспективные разработки знает?

И да, я в курсе существования glibc, queue.h и tree.h, коллекций в glib и пр.

Есть еще какие-то sglib, gdsl. Но их не использовал и их использование не видел.



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от sambist

Нет. Потому что нет. Нет, просто нет библиотеки. Нет. Потому что ненужно.

Это не ты пару месяцев понемногу флудишь в Development нуб-постами? :)

Господин настолько умен, что уже написал все возможные библиотеки?

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

Или господин только на словах Толстой?

Господин настолько опытен, что знает, за какие задачи браться не стоит.

tailgunner ★★★★★
()

Есть крутейшая вычислительная IMSL с документацией и примерами, она на фортране, но это для C-программера не проблема же.

anonymous
()

Ещё гипотеза: положительный цикл обратной связи.

На примере коллекций Java, но можно подставить все что хотите.

Коллекции Java широко используются. Следовательно в их изучении есть потребность. Следовательно, есть книги, статьи, материалы для их изучения. Следовательно, их изучают и осваивают большое число разработчиков. Следовательно, они используются ещё шире. И т.д.

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

Что в этом плане делают разработчики указанных библиотек?

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

А из открытых сишных проектов?

в профиле линк на мой открытый проект. можешь порыться, если интересно. уверен, найдешь много примеров (в т.ч. и плохих :)

Что возьмешь ты и как тут вообще можно что-то выиграть?

зависит от ситуации. вот, например, есть хэш-таблица из reference-counted строк. а так, я и на крестах реализовывал шаблонные хеш-таблицы вместо STL, с намного большей эффективностью. но не в опенсорсе.

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

Второй момент отсутвие шаблонов ограничивает написание аналога STL, попробуй написать на чистом C шаблон очереди/списка/стека который одинаково удобно и без дополнительных расходов по памяти/ЦПУ можно будет применять к сложным структурам и простым типам (int/char/void*).

загляни в код ядра, у них их есть

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

Должен иметь свободу не открыть СВОЙ код. С чего ты должен брать чужой код и иметь какую-то свободу не открыть код основанный на этом(чужом) коде?

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

а GPL ограничивает эту свободу.

Пиши свой код - не юзай чужой гпл-код. Твою свободу никто не отнимает.

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

Основа гпл кода - я не хочу, чтобы кто-то юзал мой код в проприетарщине

Вот это ограничение свобод других. Но это твоё право.

Пиши свой код - не юзай чужой гпл-код. Твою свободу никто не отнимает.

Логично, чёрт возьми.

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

Как это связано с велосипедами? Буст интрузив - вполне обобщенное решение. Почему на си таких не делают, а если и делают, то не используют?

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

Человек должен иметь свободу не открывать код

Такой человек прежде всего обязан сделать вдоль.

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

Я не говорил о велосипедах, только о производительности. На C таких не делают из-за фактически отсутствующей системы типов.

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

Просто признайся, что ты на самом деле жадный ребенок.

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

Почему его массово не используют?

Потому что вот эта каша из макросов:

#include "khash.h"
KHASH_MAP_INIT_INT(m32, char)        // instantiate structs and methods
int main() {
    int ret, is_missing;
    khint_t k;
    khash_t(m32) *h = kh_init(m32);  // allocate a hash table
    k = kh_put(m32, h, 5, &ret);     // insert a key to the hash table
    if (!ret) kh_del(m32, h, k);
    kh_value(h, k) = 10;             // set the value
    k = kh_get(m32, h, 10);          // query the hash table
    is_missing = (k == kh_end(h));   // test if the key is present
    k = kh_get(m32, h, 5);
    kh_del(m32, h, k);               // remove a key-value pair
    for (k = kh_begin(h); k != kh_end(h); ++k)  // traverse
        if (kh_exist(h, k))          // test if a bucket contains data
            kh_value(h, k) = 1;
    kh_destroy(m32, h);              // deallocate the hash table
    return 0;
}

Ни в какое сравнение не идёт с нормальным кодом:

#include <unordered_map>

int main()
{
    std::unordered_map<int, char> h;
    h[5] = 10;

    bool is_missing = h.find(10) == h.end();
    h.erase(5);

    for (auto && kv : h)
        kv.second = 1;
}

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

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

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

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

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

Ну и иди тогда. Подальше. Только проследи, чтобы погромисты, которые тебе будут продухт создавать, не содрали ничего GPL'ного!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от amazpyel

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

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

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

Если уж пользуешься чужим трудом, то будь добр — открой и свой код. Не хочешь — иди в жопу и велосипедь все!

Я бы еще и запретил gcc использовать для компиляции проприетарщины. Хочешь компелять проприетарщину — компеляй говном-каким-то, хочешь gcc — выкладывай код под GPL!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Harald

Решения на макросах (tree.h, queue.h) ok про производительности. Сравнимо с stl. Решения в стиле glib на void * и указателях на функции тормозят, да.

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

Я бы еще и запретил gcc использовать для компиляции проприетарщины. Хочешь компелять проприетарщину — компеляй говном-каким-то, хочешь gcc — выкладывай код под GPL!

gcc и так в стадии гниения, а с таким ограничением его в момент выкинут из дистрибутивов и будет как с xfree86

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

Многое он всё-таки компилирует. Как никак его используют по-умолчанию в mac os и в freebsd. А то, что не компилируется clang-ом, обычно либо говно, которое только gcc может съесть, либо какой-нибудь ассемблер в C коде.

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

вот mplayer в макоси под 32 бита не компилируется шлангом, недавно обнаружил

«unable to allocate registers» или что-то похожее выдаёт

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

и это теперь уважительная причина? )

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

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

в каком месте наличие ассемблерных вставок противоречит стандарту?

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

Я бы еще и запретил gcc использовать для компиляции проприетарщины. Хочешь компелять проприетарщину — компеляй говном-каким-то, хочешь gcc — выкладывай код под GPL!

Кто бы тебе позволил. Иди собири письменные соглашения всех аффторов этого твоего гцц. Жопеель, батенька.

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

Такой компилятор в сишном мире нахрен никому не нужен.

Я тебя удивлю, но все конпеляторы компилируют гнутый код, который «не соответствует» стандарту. И это их основная задача, а уж на «стандарт» всем насрать. Очередной эксперт-крестовик?

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

gcc и так в стадии гниения

Кто это сказал? Маздайский нонейм?

В сишном мире у ггц альтернативы нет, а остальным «конпеляторам» до него прогрессировать ещё лет 5-10. Заменить каким-то образом тот же шланг гцц может только если будет его полным эмулятором, а гцц внезапно загнётся и перестанет развиваться. К этому предпосылок пока нет.

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

а с таким ограничением его в момент выкинут из дистрибутивов и будет как с xfree86

Удачи. Да ты я смотрю просто ахринеть какой илитный эксперт. Я тебя удивлю, но xfree86 выперли именно потому, что он был не гпл-кошерный. И то, его не выперли, а он просто мимикрировал - т.е. банальный ребрендинг.

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

Я тут в 10й раз пеоечитщываю Стивенса, вот же жопа в стандартных очередях! Зачем-то вместо двух файлов создают три, а вместо 12ти доп.байт помимо зарезервированных на очереди, выделяют нахрена-то по 8Б на сообщение + полкБ резерва. Жесть!

судя по всему «Остров сокровищ»

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

Скомпилируют clang'ом

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

Шланг гинерит говно, никаких профитов не даёт, да и не научился ещё вменяемо собирать гнутый код.

версией gcc без анальных ограничений.

Что за анальные ограничения в непоследних версиях гцц? И что это за «непоследние» версии?

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

Понимаешь в чем штука - идеология гнутого кода такая - я пишу код и я не хочу, чтобы мои труды пошли на анальную проприетарщину.

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

Жалкие искатели халявы - это всё, что вами движет. Ну и в основном некомпетентность.

но открывать всё не логично.

Ещё раз, у меня есть моя вещь - я разрешаю тебе её юзать только на моих условиях. Не согласен с условиями? Право юзать тебе никто её не давал, а так же право ныть, ибо на твоё нытьё всем насрать.

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

Утрируешь.

Это факт. Код из под шланга уже научился нормально работать без гццешных либ?

Примитивный прикладушный сишный код шланг собирать осилил, ибо пилят -std=gnu**. Правда работает он как говно и гинерит говно.

Я еще не встречал то, что не собирается clang'ом.

У меня стоит шланг рядом с гцц в генте. Последние попытки собрать что-то не увенчались крайне частичным успехом.

И то, собрать и собрать нормально - это разные вещи. Во многих проектах уже впиливают и впиливали на место нормального гнутого кода сишные заглушки. Не зря же, наверное?

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

Дай пруфец, что ты царь. Царь был папка, а ты анскильный питух!

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

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

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