LINUX.ORG.RU

Как выбрать существующую библиотеку для проекта?

 , ,


0

1

Наша крупная корпорация получила крупный заказ на программу для перемножения 2 на 2, потому мы ищем библиотеку для этого.

Вася советует взять библиотеку XXX, мотивируя это тем, что это старая и известная либа, которую используют многие проекты. Петя считает, что XXX - это древнее говно мамонта, которое совершенно не поддерживается, монструозно и вообще не современно, особенно когда есть библиотека YYY - новая, быстрая, молодежная, с шаблонной магией C++. Да и не библиотека это, которая предназначена для перемножения двух чисел, а целый фреймверк, с поддержкой криптографии и квантовых вычислений. Коля же считает, что надо взять любую библиотеку, выдрать из нее те 15 строк, что требуются и запилить свою библиотеку ZZZ. Это не только позволит не раздувать проект, но даст полный контроль над библиотекой, что облегчит дальнейшее портирование проекта на BeOS, OS/2 и ZX-Spectrum (хотя это и не требуется на сегодняшний день).

Из спора выше можно выделить следующие особенности библиотек, которые можно использовать для выбора:

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

А какие аргументы для выбора библиотек знаете вы? Помогите Васе, Пете и Коле не поубивать друг друга. Хотя я больше болею я Колю.

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

Класс задач: покрытие психологических проблем автора, развитие прокрастинации, эскапизм.

Э... Кислота+ковер, не? :)

Код самой графики написан на GLES

А у трояна ничего нет, даже внятного прогресс-бара. Звук генерируется из картинки при помощи ffmpeg и какой-то магии. Все параметры захардкожены в говнокоде, что крайне неприятно.

Ну либо, рисуешь гуй на самом GLES, либо на тулките, который его использует... либо рисуешь своей прогой в окне Qt/Gtk.

Это интеграция — можно решать двумя способами: либо библиотечить свой код, чтоб его можно было дергать с разных фронтендов, либо, если не хочется — пайпить это дело или IPCить. Либо, в более упоротом варианте — втаскивать гуй как плугин (тоже решаемо, просто нужно прокачивать события гуя через свой цикол или в потоке рядом).

К генерации шейдеров это отношения уже не имеет

Ну однажды можно захотеть целиком на шейдерах, как дум, который чувак на них написал :)

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

Так тут скорее вопрос как обиблиотечить твой код. Вариантов несколько: никак, тупо лончеры, врапперы и пайпы/IPC. Либо выставлять API.

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

Это не больно, когда ты продумал интерфейс для интеграции :) Иногда достаточно пайпов. А если обратная связь не вперлась — тупо строка параметров, созданная руками или через гуй, и фпирет.

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

Э… Кислота+ковер, не? :)

Я нищий, потому шейдеры и OpenGL

Ну либо, рисуешь гуй на самом GLES, либо на тулките, коорый его использует… либо рисуешь своей прогой в окне Qt/Gtk.

Опыт создания своего GUI внутри OpenGL тоже имеется. Рисуем треугольнички и все такое. Но это опять изобретение своего фреймверка. А чтобы его изобрести, надо понять что мы изобретаем. И мы снова возвращаемся в первый пост!

Ну однажды можно захотеть целиком на шейдерах, как дум, который чувак на них написал :)

В моем видео есть кусочек игры Вольфенштейн - это все полностью на шейдерах

Так тут скорее вопрос как обиблиотечить твой код. Вариантов несколько: никак, тупо лончеры, врапперы и пайпы/IPC. Либо выставлять API.

Короч, ты предлагаешь перевернуть архитектуру: не я буду использовать графическую либу, а некий лаунчер будет запускать меня?

Алсо, см. предыдущий пост, у меня боль от всей верстки гуя. Особенно если он интерактивный, или как нынче говорят, «реактивный».

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

Но это опять изобретение своего фреймверка

Не обязательно :) Просто нужно погуглить, вдруг готовый есть :)

Короч, ты предлагаешь перевернуть архитектуру: не я буду использовать графическую либу, а некий лаунчер будет запускать меня?

Это один из вариантов. Но я уже упарывался в дергание Qt в виде библиотеки — сначала враппер написал. Потом что-то вроде редактора, который плугин, но «прога» как бы внутри его окна. Так вышло что вначале это сделал под виндой. Там это получилось на ура — старый трюк с processEvents(). Потом они где-то в очередной версии пятого Qt это сломали (на линуксах не стало работать, зависало внутри дров, но тоже решилось — нужно просто чуть больше телодвижений). А проще конечно сразу делать либу, которую можно дергать из разных фронтендов: из cli, из гуев, в виде «дочки» через пайп. Но способ через плугины позволяет делать другие вещи: пристегивать к любой проге с интерфейсом плугинов почти любой гуй, Qt/Gtk... Даже внедрять .Net в проги, которые про него ничего не знают (было время делал .Net плугин для downloadmaster — он вообще на Delphi и про дотнет ничего не знает).

Наскока это нужно тебе — смотри по трудоемкости :) Если переделок много или интерактивность не нужна — просто пускалку напиши.

у меня боль от всей верстки гуя.

Qt не заставляет тебя делать на QML. Можешь накидать в дизайнере. У Gtk вроде аналогично, в Glade накидай.

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

Не обязательно :) Просто нужно погуглить, вдруг готовый есть :)

И мы возвращаемся в САМЫЙ ПЕРВЫЙ ПОСТ. И въетнамские флешбеки при мысле о изучении очередного фреймверка, физическая боль во всем теле. Желание взять Электрон.

Qt не заставляет тебя делать на QML. Можешь накидать в дизайнере. У Gtk вроде аналогично, в Glade накидай.

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

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

И мы возвращаемся в САМЫЙ ПЕРВЫЙ ПОСТ. И въетнамские флешбеки при мысле о изучении очередного фреймверка, физическая боль во всем теле. Желание взять Электрон.

Чтоб перстать хотеть электрон, может и нужно его разок взять :)

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

Ну это уже философия. Про спеку своего компьютера ты ничего не писал. Опять же никто не запрещает писать гуй на более старом фреймворке :) Или придерживаться «версионно независимого» подмножества, ограничивая себя стабильными фичами фреймворка.

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

Чтоб перстать хотеть электрон, может и нужно его разок взять :)

Я пока только лифчик для программирования заказал, колготочки пока не купил, рано мне за Электрон браться. Да и откуда у меня макбук для запуска всего этого? У меня комп из 2012-го года.

ruzisufaka
() автор топика

Чтобы не поубивать друг друга процесс выбора необходимо формализовать.

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

Каждому критерию присвойте свой вес, например, от 0.0 до 1.0, зависящий от важности конкретного критерия для вас. Можно нормировать до 1, если хочется думать в процентах.

Затем в ячейки таблички проставьте баллы, скажем, от 1 до 5 насколько библиотека соответствует каждому критерию. Тут нужно найти компромисс между субъективными оценками друзей, или просто выбирать большую или меньшую.

Просуммируйте все баллы с умножением итогового значения на вес критерия.

Поздравляю! Победитель определён, причём выбор математически обоснован.

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

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

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

Каждому критерию присвойте свой вес, например, от 0.0 до 1.0, зависящий от важности конкретного критерия для вас. Можно нормировать до 1, если хочется думать в процентах.

А вот это реально очень ценный совет, я бы сказал «киллер фича», за это особенно спасибо!

ruzisufaka
() автор топика

Что это за бред? Очевидно, что никакая с++ библиотека не нужна. Надо написать на руст, чтобы было всё blazing fast, memory safe и lightweight. А за одно и весь проект на руст переписать.

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