tgoop.com/cxx95/84
Last Update:
#opensource
Обзор на GNOME
Я сделал хештег #opensource
, в котором будут обзоры на opensource проекты с уклоном в C/C++. Иногда интересно поисследовать исходники и даже сделать туда патчи, чтобы узнать много нового.
—
GNOME это окружение рабочего стола, одно из двух самых популярных наравне с KDE.
Денисы Поповы наделали кучу его форков: BolgenOS, MATE, Cinnamon, Pantheon, Consort, etc.
GNOME или его форк используются по умолчанию в куче дистрибутивов: Ubuntu, Debian, Fedora, Arch, Linux Mate, openSUSE, etc.
Мое знакомство с GNOME началось с того, что его UI мне очень нравился, а UI у KDE - категорически нет. Поэтому я решил помочь GNOME патчами.
6 лет назад патчи отсылались по голубиной электронной почте. За это время, видимо, у последнего мейнтейнера умер его Pentium, который тянул только почтовый клиент, поэтому сейчас завели GitLab.
Так выглядят патчи в типичный проект Gnome - nautilus (файловый менеджер), на примере моих коммитов туда:
Бездна баттхёрта начинается с того, что почти все проекты Gnome написаны на Си. Так выглядит обычная структура типа очереди:struct NautilusFileQueue
GList выглядит так же стремно со всеми вытекающими:
{
GList *head;
GList *tail;
GHashTable *item_to_link_map;
};typedef struct _GList GList;
Это вызывает флешбеки к задачам с leetcode, там тоже надо было вручную переворачивать списки.
struct _GList
{
gpointer data;
GList *next;
GList *prev;
};
Программирование на Си занятие специфичное. По заветам дедушки Ленина там бесклассовое общество. Поэтому приходится вызывать длинные функции<имя-модуля>_<имя-класса>_<имя-метода>(<аргументы>)
Это мешает автокомплиту, который не может найти нужную функцию из миллиона других.
Активно используется уникальная идиома Си - opaque data type, например для hash table.
В этой идиоме пользователь видит просто объявление структуры struct foo;
и функции которые первым аргументом берут struct foo*
, и на этом всё.
Программировать на Си мне не понравилось, так как все равно нужно сначала думать в терминах ООП (как в C++), а потом переводить мысли в Си как через перевод Гоблина.
Самая страшная вещь это то, что Gnome - радикальные велосипедисты. У них есть такие велосипеды, куда вложено куча усилий, как:
Для Gnome я бы отметил, что там по ощущениям вроде как всё плохо с тестами. По истории коммитов в nautilus видно, что там половина коммитов - переводы (в основном на такие важные языки как Friulian, Occitan, Catalan, Faroese...), другая половина - изменение поведения принципиально без автотестов.