GObject против C ++: Какие преимущества предлагает GObj и как он соотносится по скорости / размеру? - PullRequest
5 голосов
/ 05 ноября 2011

Что он предлагает объектно-ориентированному языку, такому как C ++? или нельзя без него использовать GTK +?

Имеет ли реализация объектов GObject качество, аналогичное C ++, с точки зрения размера и скорости исполняемого файла, если предположить, что оба примера используют один и тот же компилятор? Или есть некоторые компромиссы, в которых GObject будет медленнее из-за дополнительных возможностей, которые он предоставляет?

Ответы [ 3 ]

6 голосов
/ 05 ноября 2011

GObject (немного похожий на COM в мире Windows) - это API-интерфейс C, разработанный с учетом межязыковой совместимости.

Это означает, что вы можете использовать GObjects на любом языке, который поддерживаетвызов функций C, но это очень затрудняет написание GObject-ов на языке, отличном от C, который действительно многократно используется на любом языке (если вы пишете производный класс GObject, скажем, Python, вам придется каждый раз вставлять интерпретатор PythonВы хотели использовать объекты этого класса в C).

Возможно полуавтоматизировать создание привязок для многих языков (например, Python, Perl, JS и т. д.), и в этом заключается одна из сильных сторон.объектаЭто объясняет несколько непрозрачный API, предоставляемый GObject, который, я признаю, довольно сложно понять полностью.

К сожалению, он не очень хорошо вписывается и в язык C ++.GObject не имеют тривиальных отношений с классами C ++, и даже если доступны привязки (Gtkmm), невозможно легко написать класс C ++, «наследующий от GObject», и представить его миру.Для этого вы должны написать C.

[Что понадобится миру, так это какие-то расширения языка C ++, которые позволят легко взаимодействовать с GObject, немного похоже на C ++ Cxв Windows, но 1) это трудная задача, возможно, достижимая с помощью плагина GCC, и 2) нет никакого импульса к C ++ в мире Gnome или вообще в мире Linux (KDE является заметным исключением).Пока мы застряли с привязками Gtkmm.]

1 голос
/ 05 ноября 2011

Статья о GObject из Википедии включает сравнение с C ++ . Некоторые из вещей, которые они упоминают, это отсутствие множественного наследования и наличие сигналов. Кроме того, GObject извлекает выгоду из того факта, что имена экспортируемых функций C, в отличие от C ++, не зависят от вашего выбора компилятора. Так что, если бы вы разрабатывали объектно-ориентированную библиотеку с использованием GObject, вероятно, было бы легче с ней связываться, чем с C ++.

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

0 голосов
/ 12 февраля 2016

Просто небольшая проработка того, на что намекнул Влад: главный аргумент в пользу C состоит в том, что он делает возможной (гарантированной) совместимость между компиляторами или языками, поскольку он стандартизирует ABI. Это (извините, если я упрощаю) дает гарантии того, что вызывающие программы из любого компилятора C или другого языка могут использовать экспортированные символы. Следовательно, почему GTK + имеет привязки к различным другим языкам - включая C ++ в GTKmm. Последний является лучшим из обоих миров ИМХО: хорошо зарекомендовавший себя API GTK +, но с языковыми особенностями C ++.

C ++ пока не имеет официального стандарта ABI, хотя еще не все потеряно, так как A-Team работает над этим: https://isocpp.org/files/papers/n4028.pdf

...