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 ()

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

Вы меня оба таки вынудили сходить и посмотреть, какая там лицензия.

Для Ъ: GPLv3.

Странно, почему это не указано в тексте новости.

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

Qt нужен там, где одни крестовики сидят, которые в полноценном вебе не бум-бум и у которых начальству на UX насрать

А ты можешь рационально, объяснить, что у Qt не так с UX?

Да, и не забывай, что Qt - это не только QML (если ты его имел в виду под «JS-средствами»).

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

Неужели это правда даже в контексте QT5?

cvv ★★★★★ ()

Представляет собой связный набор классов, макросов и функций

Связный код на C++ это как четкий лепет.

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

Сам подход к написанию гуя в Qt - «не так». Никто не сомневается, что на Qt возможно написать красивый и удобный UI с высокой отзывчивостью и низким потреблением памяти. Только так «сделать хорошо» возможно и на голых X11 или на голых Win32 написать.

А на практике, «сделать хорошо», особенно в части фронтендных формочек, - никому не нужно, а нужно «дешево и сердито». В Qt это выливается в кривосбокуприлепленные недовебтехнологии вроде QML, которые вроде как «лучше» чем нормальные веб-технологии белого человека только тем, что с существующими Qt формами интегрируются.

А вебе пейсбук и гугл, двигают прогресс, развивая UI инструменты (реакт с ангуляром в смысле), которые позволяют «сделать достаточно хорошо и быстро», даже тогда, когда это не требуется специально. В электроне все еще куча проблем, но перспективы более чем радужные - VSCode тому подтверждение. Можно как угодно относиться к оффтоп-софту в общем, и к Гамме и Хейлсбергу в частности, но VSCode явно показывает, что они знают с какой стороны браться за клавиатуру.

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

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

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

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

Ком-порты никуда не делись, просто стали виртуальными (USB).

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

Вам не подошёл qt только из-за таймеров? Что-то вы недоговариваете.

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

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

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

В Qt5 можно задать повышенную точность таймера Qt::PreciseTimer.

anonymous ()

И правда библиотека под GPLv3. Мудрый ход.

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

Это был вопрос. Последняя КТ с которой я имел дело - 4.5 и там все было именно так как ты написала. Судя по твоим словам ты в курсе о пятой. Просто я надеялся на хорошее, на чудо :-)

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

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

Видимо, технологии несовременные - это ускорение и высвобождение памяти?

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

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

Святая толстота

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

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

А буст - систематическая свалка не связанных кросс-платформенных библиотек, систематически тянущих друг друга по зависимостям. Да и половина этой кучи - бред графоманов с раздутым ЧСВ

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

Но это же правда! У него даже 💩компилятор💩 свой есть! Ну и что, что он компиляет в плюсы? valac же в С компиляет, но это не лишает Vala статуса языка.

А когда эти слоупоки соизволят выкинуть этот 💩 костыль в угоду последним стандартам, тогда никто не будет говорить, что культи это отдельный язык. А если Qt такой идеальный, то почему в стандарт тянут фичи из буста, а не из куте?

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

Это ты слоупок. moc можно заменить на макросы и шаблоны, но код получается страшненьким: https://woboq.com/blog/verdigris-qt-without-moc.html Новые стандарты не особо помогают, пока метаклассы Саттера не заапрувят: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0707r0.pdf Так то.

fluorite ★★★★★ ()

И никого не волнует, что 2014-06-23 17:08:27 последний коммит. Или я где-то не доглядел?

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

Ebuild для Gentoo

Ebuild-а нет? Странно... Может я просто искать не умею ?

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

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

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

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

Будто что-то плохое.

Да и половина этой кучи - бред графоманов с раздутым ЧСВ

Например? Это вам не hackage, буст ориентирован на продакшн.

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

культя же - завязанное в единый узел жуткое нагромождение откровенно гуёвого кода

Неправда, у них приличная модульность, гуевые штуки отделены.

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

Но это же правда! У него даже 💩компилятор💩 свой есть!

Не компилятор, а генератор вспомогательного кода, такие есть во многих больших проектах на «Ъ-С++»

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

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

Да, но они заразы тянут друг друга, и в результате не успеешь оглянуться, а уже половина буста у тебя....

культя же - завязанное в единый узел жуткое нагромождение откровенно гуёвого кода.

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

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

Если разрабатывать негуевые приложения, то тут уже Qt может быть не лучшим выбором, а то и весьма паршивым (смотря какая область)

плюс ещё и IDE

никто не заставляет. А многие прутся и пользуют с не-Qt проектами

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

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

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

Написал народ serial port - ну что же его выкидывать теперь? отдельный модуль, не хочешь - забудь что он есть

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

Зато код читаемый

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

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

При таком отношении к гую, понятен такой негатив Qt. Но что делать если в конкретной программе все же нужен гуй? Реализовать гуй при помощи всемогущего буста?

Qt Creator - это не просто IDE для Qt, а фактически база с качественной документацией и большим количеством примеров.

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

Например?

ASIO тот же. По сравнению с сишными evenloop'ами (libev, libevent, ..) - та еще наркомания

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

Qt Creator - это не просто IDE для Qt, а фактически база с качественной документацией и большим количеством примеров.

Это не просто IDE для Qt, это IDE для С++ (и некоторых других языков) с опциональной поддержкой Qt-специфичных вещей, а документацию можно импортировать, хоть маны для системных вызовов

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

В доке чётко указано что таймеры срабатывают не менее чем через N милисекунд. Qt отлично подходит для гуя, и мы им отлично пользуемся в связке со своей библиотекой (для чего ещё написана связующая библиотека и всяческие тулзы и плагины). Но Qt ни коем образом не подходит если вы хотите например чётко отправлять UDP пакет каждые 10 мс. Потому что на Qt это будет то 10 мс то 11мс, а если пошевелить формочкой то и все 120мс. И не помогает даже Qt::PreciseTimer. И кроме того в нашей библиотеке есть дополнительный слой абстракции над IO устройствами (PIConnection) который позволяет не думать о реальных устройствах (занятых ресурсах) а оперировать логическими устройствами, и вынести всю зависимость от физических устройствах в конфигурационный файл.

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

К слову мы сделали примерно так) Получился аналог Qt'шных слотов сигналов на шаблонах и макросах В этом есть и плюсы, например, проверка на этапе компиляции.

blizer ()
Ответ на: Ebuild для Gentoo от perestoronin

Ebuild есть, правда только в моём оверлее, но могу поделиться

blizer ()

С++17 будет эффективнее этого врэймворка. Как вообще на трезвую голову можно использовать стандарт ниже 11?

Забавно читать комменты от хейтеров Qt, которые, видимо, познакомились с библиотекой на уровне hello world и жалуются, что там чего-то нет или что-то плохо работает. Qt избыточен и самобытен, сделали свою обертку для всего, что можно, а это не есть хорошо. Гуй у них довольно гибкий: виджеты, графические элементы, эффекты, анимация, arthur, opengl, qstyle, qss, qlayout, система сигналов, событий и много чего еще. С единицами измерений есть проблемы, но и инструменты, чтобы реализовать подходящую, тоже есть. А в стандарт от библиотеки ничего не берут, потому что в boost появляются новые, проверенные и полезные инструменты, а Qt занимается развитием qml, но никак не C++, да и их moc тащить никто не будет - я уже писал о самобытности.

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

Но Qt ни коем образом не подходит если вы хотите например чётко отправлять UDP пакет каждые 10 мс. Потому что на Qt это будет то 10 мс то 11мс, а если пошевелить формочкой то и все 120мс.

Нужно делать в другом потоке. В одном потоке сигналы (и таймеры) ставятся в очередь и вызываются последовательно. Конечно же графика повлияет на таймеры в том же потоке.

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

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

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

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

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

moc можно заменить на макросы и шаблоны

вообще-то нет. и это именно из-за макросов: красивая запись в диалекте «Qt С++» в обычном С++ нереализуема никак. только по уродски и то есть ряд нереализуемых фич, в частности тэги слотов и сигналов.

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

Есть минимум две работающих замены moc на макросах и шаблонах, copperspice и verdigris.

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

замены на макросах

вот так с помощью нехитрых приспособлений буханку черного хлеба можно превратить в троллейбус. но зачем?

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

Что? Конечно, тебе виднее, чем разработчикам Qt, которые его написали. Пишу, что SSH - Secure Shell, он мне пишет про аргументацию уровня IP - Interesting Package. Сильно.

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

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

Святая толстота

Это реальность. Qt-программисты не знают C++.

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

Давайте все-таки не обобщать. Иногда в Qt приходят из C++.

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

Давайте все-таки не обобщать.

Я и не обобщаю. Qt-программисты - «программисты», которые за пределы Qt выйти не могут и не хотят.

Иногда в Qt приходят из C++

Бывают, конечно, C++-программисты, волей случая вынужденные использовать Qt.

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

Вот вы тут ошибаетесь, я своё программирование как раз начинал с Qt не зная никакого C/C++ и очень рад этому, потому что так было легче войти в мир C++. И потом было легче изучать другие библиотеки, и я не страдал от невозможности использовать Qt в каких-то проектах.

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

Qt-программисты не знают C++.

Сейчас бы писать на фреймворке для C++ и не знать C++... Толсто.

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