我们将C ++库作为源代码分发的6个原因

我们将C ++库作为源代码分发的6个原因
它是JavaScript…作为源代码分发! (照片由Markus SpiskeUnsplash拍摄

编写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个可能的已编译二进制文件。 具有2个编译器开关的库有4个可能的二进制文件。 具有3个编译器开关的库有8个可能的二进制文件。 具有4个编译器开关的库包含16个可能的二进制文件。 现在将交叉编译放入混合中...您明白了。 并非所有这些组合都是有意义的,但是复杂性却是巨大的。 从源分发时,通过允许用户控制过程,我们可以支持所有可能的编译器标志设置。

6.更好的优化

C ++旨在构建抽象塔,编译器可以将其分解为有效的机器代码。 这些抽象将在编译后丢失,并带有重要的信息,这些信息可用于优化代码。 使用二进制库时,您将失去执行许多跨库优化的机会。 从源代码构建可以产生更快的代码。

但是编译时间呢?

这是一个好的构建系统至关重要的地方。 我们选择了Buck build ,这是Facebook开发和使用的可复制构建系统。 由于Buck具有可复制性,因此可以缓存中介构建工件并在您的团队*享它们!

阅读使用Buck Build的7个理由

准备尝试袋鼠了吗?

Buckaroo是仅源C ++程序包管理器。 首先,请转到文档 您可以浏览Buckaroo.pm上的现有软件包,或在愿望清单上请求更多。

From: https://hackernoon.com/6-reasons-why-we-distribute-c-libraries-as-source-code-2dc614d5ef1e