На GitHub опубликована библиотека libOAF/Qt4 (https://github.com/SpectrumSoft/liboaf), предназначенная для разработки на языке С++ с использованием библиотеки Qt4 программ, состоящих из компонентов, связанных между собой небольшим количеством интерфейсов. Библиотека собирается и работает как в разных дистрибутивах Linux, так и в разных версиях Windows, начиная с Windows XP.
В случае libOAF/Qt4 под компонентом понимается разделяемая библиотека, оформленная определённым образом и снабжённая специальным описанием. Изначально libOAF/Qt4 основана на идеях компонентной системы OAF/Bonobo, однако существенно проще неё за счёт того, что мы не пытались сделать супер-универсальный инструмент, а решали вполне ограниченный набор проблем.
Библиотека возникла как внутренний инструмент для решения следующих задач:- Выделение проектирования архитектуры в относительно независимую от кодирования задачу с возможностью описания архитектуры в терминах предопределённых программных интерфейсов;- Разделение разработки на ряд максимально независимых частей, для организации контролируемой совместной работы нескольких программистов над одним проектом;- Реализация возможности подключения дополнительных компонентов к приложению уже после фиксации кода и сборки и фиксации дистрибутива приложения.
URL: https://github.com/SpectrumSoft/liboaf
Новость: http://www.opennet.me/opennews/art.shtml?num=41103
>OAF/BonoboПро такую штуку никогда не слышал, но, думаю, следовало бы написать чем это лучше собственно Qt. Во всяком случае из текста новости это не ясно.
Я уж не говорю о том, что Qt5 вышел не вчера и даже не позавчера.
Bonobo это реализация CORBA, сделанная для первых версий GNOME.Слово "CORBA" ищите в Википедии.
никогда не слышал про CORBA, зато слышал про Кобру и про Кобу (Сталина). Аллак Акбвр
>>OAF/Bonobo
> Про такую штуку никогда не слышал, но, думаю, следовало бы написать чем
> это лучше собственно Qt. Во всяком случае из текста новости это
> не ясно.Когда-то в рамках GNOME пытались развивать универсальную компонентную модель Bonobo. Но сложность её поддержки и развития оказалась неоправданной с точки зрения развития платформы GNOME и составляющих её приложений. В итоге от неё отказались. Однако это не значит, что сама по себе компонентная модель плоха. В рамках большого количества приложений используются и развиваются те или иные плагинные системы, которые по сути являются упрощёнными компонентными моделями.
Мы из OAF/Bonobo взяли только некоторые идеи (в частности некоторые из базовых интерфейсов).
С Qt libOAF/Qt4 сравнивать нельзя, так как данная библиотека является дополнением к Qt и никак её не заменяет.
> Я уж не говорю о том, что Qt5 вышел не вчера и
> даже не позавчера.Это да, но проект делается на Qt4 и переход на Qt5 не оправдан с точки зрения дальнейшего распространения разработанных программ, так как ряд целевых для нас дистрибутивов Linux просто её не включает.
А без Qt это можно использовать?
Нет, библиотека работает только с Qt4 (в дальнейшем мы собираемся адаптировать её для Qt5). Мы специально ввели такое ограничение, так как реализация универсального механизма приводит к неоправданному для нас усложнению библиотеки. Как мне кажется стремление к универсализму сделало и CORBA и Bonobo столь тяжеловесными и неудобными в использовании. На мой взгляд проще реализовывать похожие идеи в рамках каждой из платформ, чем делать один универсальный механизм, работающий под всеми платформами.
В коде комментарии на великом и могучем. Это православная библиотека?
Да, это наша разработка. Поскольку мы не планируем её публикацией переворачивать Мир, то сочли нецелесообразным переводить комментарии и документацию на английский.
Обычно разработчики пишут комментарии на своём родном языке.
Почему функции-члены класса возвращают ссылки на переменные-члены класса?
Что будет с этой ссылкой, если класс умрет?
Если это такая горе-оптимизация(за которую надо настучать по рукам), то почему это применяется к классам кьют(таким как QString), ведь они внутри copy-on-write и при копировании данные не копируются, копирование произойдет, только при изменении одного из экземпляров?
Билиотека не многопоточная! Если вы ссылку используете по месту, то нет смысла возвращать копию. Если вы ссылку присваиваете переменной, то получите копию. Если вы используете переменную ссылку для хранения ссылки на внутреннюю переменную класса, то значит знаете, что делаете. Возвращать ссылки было моим личным решением, мне так удобнее. Данная библиотека не претендует на то, чтобы быть образцом кодирования, защищённости и академичности.
> Билиотека не многопоточная! Если вы ссылку используете по месту, то нет смысла
> возвращать копию. Если вы ссылку присваиваете переменной, то получите копию. Если
> вы используете переменную ссылку для хранения ссылки на внутреннюю переменную класса,
> то значит знаете, что делаете.Многопоточность тут вообще не причем.
Те сторонний разработчик, использующий вашу либу, должен держать в голове, что вот эти 50 функции вернут ссылку, а вот те 40 - нет.
auto a = func1();
auto b = func2();
Будут иметь абсолютно разное поведение. Ладно бы это было великой жертвой ради оптимизаций, так оптимизации нет, а головная боль - есть.
Спасибо, я учту Ваше замечание. Поведение с использованием новых возможностей C++ не анализировалось и Вы правы, здесь могут возникнуть неприятные казусы.
Не совсем понятно назначение библиотеки. Все, что описано выше Qt умеет искаропки.
В кьют есть плагинная система, которая писать плагины, связанные на интерфейсах. Далее эти плагины можно слинковать и динамикой и статикой.
Даже больше. Кьют позволяет связывать компоненты БЕЗ интерфейсов. Для любого класса, отнаследованного от QObject можно запросить задекларированные функции-члены и вызвать их(QMetaObject::invokeMethod).
Из коробки умеет не всё. Например не умеет подбирать компоненты по набору интерфейсов и дополнительных параметров. Это нужно, например, чтобы иметь возможность добавлять новые компоненты для подключения к приложению. Если Вы посмотрите на приложения Qt, которые используют плагины, то увидите, что они в той или иной мере наворачивают свои системы работы с компонентами, даже если в основе лежит плагинная система Qt, так как её в большинстве случаев не хватает. Мы навернули свою и решили ей поделиться.Назначение библиотеки я привёл в новости. Назначение больше организационное чем программистское. То есть технический вопрос следовал из организационного. Нам было нужно так построить работу, чтобы можно было давать задания программистам жёстко обозначая что должно быть на выходе. Для этого мы используем набор интерфейсов и XML-описание компонентов. То есть сначала описывается что должен делать компонент, а затем уже он кодируется. Для нас это оказалось удобно. Но я не говорю, что это будет удобно всем и всегда. Возможно что при написании программы одним человеком использование libOAF будет неоправдано сложно.
> Мы навернули свою и решили ей поделиться.Это правильно. Большинство контор не любит выкладывать код, даже те его части, которые конкурентам нафиг не нужны.
Печалит более другое.
На дворе 2015 год, а тут фейспалмы на школьных стульчиках. http://niiaa.ru/wp-content/gallery/programmist/dsc_0613.jpg Не должно государство держать в таком состоянии НИИ. Простого решения не видно, но и оставлять так нельзя.
Лучше поздно, чем никогда.
Отрадный поворот к Open Source!P.S. Привет от бывшего сотрудника :)