在这里,我也将与事实背道而驰,尝试为C做一个(稍微幽默的)美学案例。尽管有些人可能出于不同的原因将其称为“丑陋的”,例如缺少诸如类或类之类的高级构造。它的指针上的依赖,我觉得这是不适合的情况下我。
TL; DR:在我看来,C很简单,好的C是可读的,并且在敲击中会发现一定的乐趣。
C很简单
标准C仅定义了一些基本类型和机制来创建函数,指针和数组。最重要的是,有少量的组合构造可从基元中生成更复杂的类型(例如结构和联合)。请注意,我是如何用两个句子描述大多数语言的。这意味着您在编码时不必头脑中保留太多的语法规则和形式。
简单就是美丽。
C不是奥术
与许多高级语言不同,在C语言中很难找到很多奇怪的,难以理解的符号。在C语言世界中,抽象和“语法压缩”的主要功能是函数-语义上非常简单且不言自明的构造。良好的C风格会激发出诗意的可读性。为了说明这一点,让我们尝试从Linux内核中读取以下代码段。即使不了解底层的数据结构和实现细节,我们也可以从以下几个方面入手:
bool kthread_freezable_should_stop(bool *was_frozen)
{
bool frozen = false;
might_sleep();
if (unlikely(freezing(current)))
frozen = __refrigerator(true);
if (was_frozen)
*was_frozen = frozen;
return kthread_should_stop();
}
该功能的中间显示为“万一电流冻结,请问冰箱是否确实发生了冻结”。苏斯博士再好不过了。
可读是美丽的。
C是透明的
除非C语句包含函数调用,否则通常可以很好地了解其运行时成本和副作用。C赋予程序员控制权,并最终信任他或她做正确的事。我们可以了解一下strlen()
在GNU C库的实现中运行此片段(针对SE重新格式化)时所发生的情况,因为每个运算符都有明确定义的语义。C中没有重载。
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
出于“可优化性”的目的,此属性很棒。可以说,某些高级语言使高级算法的简洁表达更容易(例如带有类和重载的C ++),但出于C的目的-作为便携式汇编程序的目的,C是理想的。有时,成功执行低级代码后,程序员可能会在某种意义上对机器感到满意(或为零-这是实现细节)。这并不是说其他语言不好,不够“禅”或类似的愚蠢之举,只是因为许多有效的原因,IMO C可能以许多其他语言都没有选择的方式变得有趣。
在我看来,以上三点使创建复杂但高效的系统(在Linux上体现在我的脑海中)易于管理。我发现这个世界吸引了我的审美意识,我建议任何考虑将C作为他或她的下一个目标的人都考虑这些点。我认为通过明确说明它们可以更好地支持有关操作系统及其他方面的争论,因为一个人当然不需要了解内核就可以成为一名成功的程序员,但是人们可能会发现这些领域在主观上令人信服。