LINUX.ORG.RU

Platform-Independent Primitives (PIP)

 , , , ,


3

6

PIP — кроссплатформенная легковесная библиотека под C++ (99), упрощающая написание консольных программ. Представляет собой связный набор классов, макросов и функций, которые значительно упрощают написание кода во многих прикладных областях. Основной упор в библиотеке сделан на функциональность, конфигурируемость и минимизацию конечного кода.

Основной класс PIObject предоставляет механизм «событие — обработчик», реализованный на макросах.

Предоставляет классы:

  • контейнеров;
  • строк;
  • потока;
  • таймера;
  • устройств ввода-вывода (файлы, UDP, TCP, COM-порт, разделяемая память, конфигурационные файлы и пр.);
  • консоли или терминала (отрисовка интерфейсов и обработка пользовательского ввода);
  • шифрования;
  • сжатия;
  • математики;
  • и другое.

Также даёт возможность сгенерировать файлы с метаинформацией С++ сущностей при помощи утилиты, входящей в состав библиотеки.

Интеграция с системой сборки CMake (поиск, инклюды, макрос для генерации метафайлов).

Опциональная зависимость от внешних библиотек:

  • libicu — поддержка кодировок (для Windows очень желательна);
  • libusb — поддержка работы с USB-устройствами;
  • libsodium — поддержка шифрования;
  • libfftw3 - поддержка БПФ;
  • libz — поддержка сжатия.

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

Документация находится в папке doc/html, на данный момент ещё в разработке.

Проверялась на ОС:

  • Windows XP, 7, 8, 10;
  • Linux (Ubuntu, Debian, Gentoo, Raspbian)l
  • Android;
  • Mac OS X;
  • проверялось давно:
    • FreeBSD;
    • Blackberry OS;
    • QNX.

>>> Скачать



Проверено: Shaman007 ()

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

круто, а еще она программы собирает и ставит под питон.

AVL2 ★★★★★ ()

C++(99)? Это что за С++ такой?

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

Это здоровый C++ 20 века. В 21м (C++14, C++17) курить уже начал

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

Не существует С++99, существует С++98, ну может ещё С++03 как корректирующий релиз.

Tujh ()

Родина им дала Qt - пользуйся! Не хочу, хочу велосипед с педалями.

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

Qt - это вкус Java в C++. Нет уж, пейте это сами

PtiCa ★★★★★ ()

Спасибо, но меня libpoco полностью устраивает.

no-such-file ★★★★★ ()

1. github - там виднее код и можно патчи слать. 2. unit test-ы - у вас мало тестов и трудно доверять глядя на исходники. 3. code coverage

xor2003 ()

Предоставляет классы:
- контейнеров

Чем плохи стандартные?

- шифрования

Кто предпочтёт неизвестно что общепринятым openssl/libressl?

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

И лицензию хотелось бы BSD/MIT для библиотеки, но Вам виднее

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

И лицензию хотелось бы BSD/MIT для библиотеки

Когда люди заводят речь про BSD/MIT-лицензии для чужих библиотек, то сразу же возникает желание спросить: «А кто будет оплачивать банкет?»

Так что да, автору библиотеки виднее.

eao197 ★★★★★ ()

На дворе 21-й век, а они в компорты лазят.

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

Компилятор механический, обыкновенный

имеет два режима: Сцы++ и НеСцы++

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

C++(99)? Это что за С++ такой?

Такой ISO C++ для мазохистов с особыми девиациями.

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

Qt это отдельный язык, который к C++ никакого отношения не имеет. Жирный и некрасивый. Нет уж, не надо его. Лучше уж буст с другими нормальными либами.

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

1. github как-то не зашёл... но можно 2. Тестов пока действительно мало, хотя они проводились. Однако до нормальных Unit test`ов ещё не добрались

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

На самом деле библиотека как раз писалась для работы с множеством внешних устройств, подключённых по различным интерфейсам. И да, в 21веке есть куча устройств которые с точки зрения программиста выглядят как COM порт, например bluetooth GPS, различные контроллеры типа Arduino, да и на Raspberry Pi есть UART (тот-же COM порт)

blizer ()

Если для гуи приходится использовать Qt, ака C++, то для консольщины есть 100500 либ для любого языка. Зачем бодаться с C++ - не ясно.

RazrFalcon ★★★★★ ()

Ну и это, PIP уже есть, и это не ваша либа.

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

Буст красивее Qt?

Хрен редьки не слаще, и тому и другому на свалку пора, оба монстры из прошлого века. Вместо буста: --std=c++17 и standalone либы, вместо культей - на «нормальном» (насколько он может быть нормальным) JS можно UI делать, без QML мусора.

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

Использовать Electron вместо Qt может только наркоман.

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

Ога, вместо того, чтобы для веб-бибизянов (фулстакеров с зп 1.5x - 2x от моей) завернуть нативную либу, к которой они качественный UI сделают за пару часов используя обкатанный подход (Electron, или Node прослойка для прокидывания в веб), я буду их в Qt-мирок с его калечными JS-средствами зазывать.

Qt нужен там, где одни крестовики сидят, которые в полноценном вебе не бум-бум и у которых начальству на UX насрать - заказчик и так сожрет (фгупниихз и т.д.). Ну или на горах легаси (с этим случаем все понятно). А там где нужен достойный результат - извольте использовать современные технологии по назначению: вычисления - на крестах, UI - на JS/TS.

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

На дворе 21-й век, а они в компорты лазят

Микроконтроллеры.

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

Qt это отдельный язык, который к C++ никакого отношения не имеет

Упоролся чтоли? Это просто набор библиотек который компилируется gcc

LinuxDebian ★★★ ()

Щяз бы в 2k17 велосипедить комбайн-аналог куте, глиб и буста под сишечку. Самозакопайтесь.

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

ISO кстати об этом ничего не знает, не открыли ли бы вы им глаза?

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

Вместо буста: --std=c++17 и standalone либы

Да щас. Многому аналогов нет, и даже те либы что включили в стандарт, включили в урезанном виде.

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

Буст красивее Qt?

Да, но это ж надо было учить C++ а не java.

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

Тьфу, то С с 99 годом мутил. А C++ для мазохистов — ISO/IEC 14882:1998

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

Верно, в бусте много полезностей. Но во первых не все они нужны, а во вторых есть N способов их использовать без установки «полного монолитного буста».

Можно boost.system настроить в header-only и подтянуть только нужные хедеры остальных засивимостей. Можно аккуратно собрать нужные не-хедер-онли кусочки так, что сборка будет переносимой.

А «пустили b2 в корне буста, и погнали кодить» - почти всегда неоптимальное решение для любого С++ проекта.

anonymous ()

C99? Серьезно? На дворе уже С++17 (ну, вот уже совсем скоро), хотя бы С++14. Да и вообще, есть же либы для этого. Хотя бы тот же буст (но я его не перевариваю, работы с матрицами явно не его фишка). Есть Qt, в котором можно пилить cli свободно. Впрочем, не читал, но осуждаю. Хотелось бы примеров работы с этой либой

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

«современные технологии» это торможение и жор памяти изза говнокода, написанного распонтованными «программистами»

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

поддержу. буст стократ стройнее культи. культя - безобразное и несистематично спроектированное поделие типичных гуеписателей. когда они это лепили, они думали только над конкретной конечной задачей, а не над реализацией в целом. в итоге закономерно получили УГ со своим исключительно корявым велосипедом для обработки событий внутри и приколоченным к нему гвоздями всему остальному. потом много раз пытались всё это дополнить/исправить. в результате наросло много жира, но лучше не стало. а буст - просто набор полезных кроссплаформенных библиотек, которые (хотя иногда и зря) постепенно мигрируют в стандарт. и главное, что для буста не нужно никаких левых тулзов, его можно использовать без «компиляции» какого-то псевдокода. он просто доступен сразу и легко интегрируется в любое приложение.

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

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

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

качественный UI

обкатанный подход

Electron, или Node

достойный результат

современные технологии

по назначению

UI - на JS/TS

Сцццуууко, так это из-за тебя такой цирк творится на десктопе? Ты даже не представляешь как же сильно, как воды в пустыне, мне хочется взять новенький молоток, и со вкусом отбить тебе все пальцы и руки до кровавого кожно-костного фарша, чтобы ты, ленивая идиотина хипстерская, никогда больше написания софта не касался, ходил с катетером и сдох зимой в -25°C на московской помойке.

Но это не всё. Чтобы искупить всю боль которую ты нёс пользователям, в аду тебя посадят голышом в железный куб с гвоздями и булавками на полу, там будет ПК с 4 Гб RAM и всегда открытым браузером с сотней вкладок на котором ты будешь писать софт на Node и Electron, и стоит только потреблению памяти превысить 70% или активироваться свопу, как в твою собачью клетку польется кипящее масло, ты будешь не теряя сознания, покрываясь волдырями и ожогами вариться в нем до состояния слепого мясного куска, плавая пока масло не остынет, а то что от тебя останется кинут чертям дабы они сгрызли это кусая ровно по одному кусочку в день. А затем всё повторится заново.

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

Библиотека создавалась для написания разного рода систем управления. Поэтому тот-же Qt не подходил, ибо имеет глобальный недостаток кривых таймеров (они не придерживаются реального времени, и имеют плохую точность). Наши же таймеры пытаются насколько возможно придерживаться Real-time, и для этого используется несколько различных подходов к увеличению точности, используются posix timers где это возможно, используются настройки таймеров в win-API для windows, и даже в случае реализации таймера на потоках считается реальное время работы чтобы компенсировать задержку. При этом были требования в виде слабого железа и всяких старых ОС (поэтому C++ 98). При этом хотелось написать удобную библиотеку, которая требовала бы минимального кода в твоей программе (в отличие от того же boost) и при этом этот код был максимально управляемым и гибким.

Пример использования можно посмотреть в утилитах, которые идут в поставке с библиотеками. Например udp_file_transfer и system_daemon.

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

а почему не подошёл, например ACE? там более чем адекватные таймеры и есть всякие нашлёпки в виде самопального STL (намного лучше стандартного, кстати).

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

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

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