如果你是一个写程序的老手,你可能用过很多种有着不同基础哲学的程序语言;你用过Perl吗?它的概念跟Algol有很大的不同;直译的Basic语言是如此容易,让很多人能进入这个领域,而Visual Basic则是一头完全不同的“怪兽”。
我的第一种语言(在母语英语之后)是Fortran,我用过不少它的分支语言以及编译程序。汇编语言(Assembly)…嗯,就是汇编语言,不是有太多人能说出个所以然;C语言基本上是汇编语言,在生产力方面有大幅改善。
C++语言在我看来充满了相当的复杂度以及黑暗之处,聪明的人最好不要踩到。还有Java语言是一种有趣的面向对象(OO)方法,但其垃圾回收(garbage collection)机制以及缺乏指标(pointer)等特性,使该语言不适合大多数的嵌入式开发。
C语言多年来在这个产业界是流行语言,调查数据显示(如下图),该语言在嵌入式领域的市占率最高,而且其地位数年来屹立不摇,许多新一代的语言如Python都仍远远落后,C将会在很长一段时间继续是主力语言。
各种程序语言的使用情况统计
(来源:UBM 2014 Market Survey)
但 C语言已经很“老”了,也受到那样的长寿影响;该语言隐藏了迟钝点,批评者指出,C语言开发者似乎厌恶打字;那大多数来自不良习惯,像是使用非常短的变量 名称(variable names)。任何一种语言都会被滥用,但对比典型的C程序,例如Ada程序代码,有人确实会疑惑为何我们看起来如此简洁,该语言本身就很简洁。
假设你可以用魔法改变C语言的某一个方面,你会改变哪里、为什么?我会想要摆脱花括号(即{},又称波型括号);我们都曾经历来自深度套迭的程序代码段落之错误以及编译程序抱怨(compiler complaints),我们会搞混需要多少结束括号以及它们该被放置在哪里。
我比较喜欢需要匹配开始与结束段落,以终结声明(end statement)来指示哪个段落已经结束;例如:
这需要打更多字,但任何一个软件开发者如果打字不够快就是入错行了;其好处是更容易了解段落在哪里开始与结束。当然,谨慎地缩排也能告诉我们相同的事情,但今日有太多程序代码被这么多人修改过,原始工程师精心地缩排通常变成无可救药的错位。可能很难知道哪一个括号是结束哪一个段落,被误放的括号可能会让编译程序发疯。
而深度套迭控制架构当然也可能导致大量连续的“end if”声明,这可能会是例外而不是规则;并没有“银弹”可以拯救我们,但小小的改变,像是利用开始/结束声明而非括号,有可能带来非常大的帮助。
我通常会在批注的地方针对哪个括号是结束哪个段落做记号,但如果程序语言能像我说的,编译程序能指出遗失以及被混淆的“end”声明岂不是更好?其他有的语言指令就包含卷标的结束声明并因而获益,Ada就是一个最佳案例
你呢?如果你可以改变C语言的某一个部分,你会想改变什么?又为什么?
编译:Judith Cheng, EETimes Taiwan
责编:Luffy Liu
(参考原文: Fixing C,by Jack Ganssle,The Ganssle Group总工程师)
- 现在不是有自动化的缩排工具了吗,这个应该不是问题
- (来源:UBM 2014 Market Survey),2021年了,居然引用2014年的调查
- 啊士大夫