网站开发招聘职位,wordpress改回旧版编辑器,网站建设 嘉兴,开发定制电商平台C的哲学思想 文章目录 C的哲学思想#x1f4a1;前言#x1f4a1;C的哲学思想☁️C底层不应该基于任何其他语言#xff08;汇编语言除外#xff09;☁️只为使用的东西付费#xff08;不需要为没有使用到的语言特性付费#xff09;☁️以低成本提供高级抽象#xff08;更…C的哲学思想 文章目录 C的哲学思想前言C的哲学思想☁️C底层不应该基于任何其他语言汇编语言除外☁️只为使用的东西付费不需要为没有使用到的语言特性付费☁️以低成本提供高级抽象更高级的目标是0成本提供高级抽象 ⭐END跋交流方式 前言
在很多领域有些东西是永恒的。而在 C 中有下面三条哲学思想便属于这一类
C底层不应该基于任何其他语言只为使用的东西付费以低成本提供高级抽象 向我们的 C之父 Bjarne Stroustrup 致敬 Bjarne Stroustrup’s Homepage 注意本文并不攻击其他任何语言。
C的哲学思想
☁️C底层不应该基于任何其他语言
汇编语言除外
如果一个语言的目标就是成为正真的高级那他就必须把做系统程序的设计工作让给其他语言。比如javapython等。这就不得不同时记住两种语言的原语和准则。
C 试图给出另一条路它提供了低级特性和抽象机制支持这两种东西构造混合的系统。
☁️只为使用的东西付费
不需要为没有使用到的语言特性付费
对于规模较大的语言有一种论断人人皆知说它们会产生大而慢的结果代码。 如 由于支持某种特性使得这个开销遍布于整体如 java 的很多类型必须开启在堆区而 C 可以自由的在堆或栈创建需要的对象。 还有比如在 C11 推出的std::thread没有自动join的机制在 C20 推出了std::jthread弥补了这一缺陷。而不是直接在原有的std::thread中修改。因此在以往的代码中使用者应该清晰的知道自己使用std::thread的代价如效果内存大小等不能因为被后续的规定影响以往的代码。保证十年前的代码在十年后编译还能表现一致的效果。 这个规则在 C 的设计决策中不断成为最关键的考虑。虚函数多重继承运行时的类型识别异常处理和模板都是与此有关的特性实例。
☁️以低成本提供高级抽象
更高级的目标是0成本提供高级抽象
如果像拒绝人们建议一个特性0开销原则可能是所有规则中最锋利的一个。
但一切都是折中的这正是设计的美妙所在。 下面是0开销原则的一个经典应用这是一个时间单位转换问题的小例子。 以第一段代码的风格写更容易出错。 而第二段代码更抽象且不会付出格外的代价。两者生成的汇编代码可以达到一致的效果。 struct Duration {int millis_;
};void example() {auto d Duration{};// 毫秒d.millis_ 100;// 秒auto timeout 1;// 直接将秒在没*1000情况下直接赋值到毫秒上d.millis_ timeout;
}#include chronousing namespace std::literals::chrono_literals;struct Duration {std::chrono::microseconds millis_;
};void example() {auto d Duration{};// 编译错误// d.millis_ 100;// 效果一致且表达更清晰d.millis_ 100ms;// 或者写 std::chrono::seconds(1)// 但1s能更抽象清晰简洁auto timeout 1s;// 由程序自动帮你做转换d.millis_ timeout;
}⭐END
跋 ref: 现代C软件架构方法与实践 (豆瓣) (douban.com) 《现代C软件架构》 1.6 C的哲学思想 p7 C语言的设计和演化 (豆瓣) (douban.com) 《C语言的设计和演化》 4.5 低级程序设计支持规则 p117 (C语言的设计和演化) C的设计理念-CSDN博客 交流方式
⭐交流方式⭐ |C/C|算法|设计模式|软件架构-CSDN社区 关注我学习更多C/Cpython算法软件工程计算机知识 B站 主页天赐细莲 bilibili