6 причин, по которым мы распространяем библиотеки C ++ как исходный код

При написании приложений на C ++ вы неизбежно будете использовать внешние библиотеки. Это хорошая вещь! Повторное использование кода делает нас более продуктивными и позволяет нам создавать более масштабные и качественные продукты. С Buckaroo.pm мы пытаемся сделать это еще проще, с помощью менеджера пакетов только с исходным кодом для C ++.

Только источник? Да, и вот почему:

1. Это кроссплатформенный

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

2. Улучшение отладки

При отладке проекта приятно иметь возможность углубиться в реализацию используемых вами библиотечных функций. Это становится особенно легко, когда вы строите из исходного кода, поскольку точный код, от которого вы зависите, уже находится на вашем компьютере!

3. Нет проблем совместимости с ABI

Пользователи GCC будут осведомлены об std::string изменениях ABI с 4.9 на 5.0. Хотя это изменение было необходимо для перехода на C ++ 11, оно вызвало большое замешательство в сообществе. Если вы уже создаете свой проект из исходного кода, то обновление - простая задача. 😌

4. Исходный код меньше

Из-за особенностей генерации кода это особенно верно для C ++: исходный код библиотеки часто намного меньше, чем соответствующий ей двоичный файл. Фактически, с воспроизводимыми сборками исходный код является отличной формой сжатия!

5. Флаги компилятора могут поддерживаться должным образом

Библиотека с 1 переключателем компилятора имеет 2 возможных скомпилированных двоичных файла. Библиотека с двумя переключателями компилятора имеет 4 возможных двоичных файла. Библиотека с 3 переключателями компилятора имеет 8 возможных двоичных файлов. Библиотека с 4 переключателями компилятора имеет 16 возможных двоичных файлов. А теперь добавим кросс-компиляцию ... Вы уловили идею. Не все эти комбинации значимы, но сложность огромна. При распространении из исходного кода мы можем поддерживать все возможные настройки флагов компилятора, позволяя пользователю управлять процессом.

6. Лучшая оптимизация

С ++ - это построение башен абстракции, которые компилятор может превратить в эффективный машинный код. Эти абстракции теряются после компиляции, а вместе с ними и важная информация, которая может быть использована для оптимизации вашего кода. При использовании бинарных библиотек вы теряете возможность выполнять множество межбиблиотечных оптимизаций. Сборка из исходного кода может дать более быстрый код.

Но как насчет времени компиляции?

Вот где важна хорошая система сборки. Мы выбрали Buck build, воспроизводимую систему сборки, разработанную и используемую Facebook. Поскольку Buck воспроизводится, появляется возможность кэшировать промежуточные артефакты сборки и делиться ими со всей командой!

Прочтите 7 причин использовать Buck Build.

Готовы попробовать Buckaroo?

Buckaroo - это менеджер пакетов C ++ только с исходным кодом. Для начала зайдите в документацию. Вы можете просмотреть существующие пакеты на Buckaroo.pm или запросить дополнительные в Списке желаний.