从前,一个男人被一根绳子,被告知它会在很多方面都很有用。大多数任何能做的绳子。人试过,发现了一些容易做的事情——把一个弓,例如-和一些复杂的猫的摇篮,为例。他发现,他可以把大螃蟹陷阱在这样一个绳子和运行以后他们出海和检索。但他也知道,在他的脚在一个线圈的锅都可能是致命的。他发现可以悬挂重物绑一个循环结束时绳子和运行在一个分支,或者,更好的是,一个滑轮。他还发现,把他的头通过循环不是一个好主意。他决定名字这根绳子,他称之为“c”
然后他获得了一种新的绳子——不是三维的,但六维。这根绳子可以做任何旧的绳子可以做等等。更难理解,能够做些什么的影响并不总是显而易见的。和观察到的行为的三个或四个标准尺寸可能隐藏意想不到的和未被注意的行为在第五或第六维度。但它给了他伟大的力量去做伟大的事情,远远超出实际与C,即使他并不总是知道自己在做什么。他叫“c++”。
当然,C多年来一直默认主流编程语言,在桌面和嵌入式。你可以做任何事在C语言中,这意味着最简单的事情之一是系统崩溃。更精细的c++在桌面和服务器领域取得了巨大的进展,但在嵌入式领域。首先,c++,当管道的全部潜力的神秘特性,可以让你觉得你在一个旅行穿过镜子而颠倒,旋转,在酸。*从更实际的角度来看,c++代码太大一个足迹在内存中,可以使用堆内存太多,和它的一些结构可以产生不可预测的结果;正式的正确性很难证明。
早期努力统治之一广泛的C + +是通过嵌入式c++,或EC + +努力。本标准定义了一个完整的必要且充分的子集用于嵌入式c++语言,与专用的意图EC + +编译器可以创建生成的代码将更有利于嵌入式环境。具体来说,异常,名称空间、模板、多个/虚拟继承,运行时类型识别的类型id特性,将“新风格”,可变的类型限定符被消除。虽然这听起来像是一个可能有用的运动,它不出现,多吸收:最新的“更新”EC + +官方网站是在2002年。(从2002年仍有一项“新”旁边,库拉索岛的最新会议。甜蜜的!也许他们只是决定查克和呆在那里。)
同时,有两更集中努力为更具体的嵌入式市场建立更好的编程实践。这些是20年前的老汽车行业软件可靠性协会(MISRA),和被称为MISRA C,这建立了一系列规则和建议使用C汽车、后一般零顺从直觉,以每小时70英里的速度可以管别人的一天。第一版于1998年竣工,并有93规则和34的建议。修订2004年,改为121规则和21个建议,添加了一些新规则,一些现有规则被澄清,和一些旧的规则被取消是不可行的。
虽然这工作最初是与汽车驱动的,它最终是被其他行业安全是一个问题,特别是铁路、医学和核。的高跟鞋,c++得到同样的待遇,有兴趣的一个更广泛的行业。第一轮MISRA c++最近宣布。令人沮丧的是,实际上是没有免费信息。甚至激励的概述和总结了MISRA c++要花钱;就像看到一个广告的产品。这就引出了一个问题:如果这个作家支付概述,然后总结了信息,有一些知识产权法律被侵犯吗?大部分的免费信息包括snarkfest随后通过计算机科学的宝贵贡献决定哪些是适合MISRA c++文章列表。
单独的努力是通过资金由美国国防部和协调卡内基梅隆大学软件工程研究所,颁布编程不太容易干预的那些不该爱管闲事。这导致了CERT C和c++ CERT安全编码标准,识别方法来消除(或减少)漏洞的代码。这些也是结构化规则和建议。他们很容易在网络上访问,和它们的数量大;有一个清晰的试图组织和分类。所有已发表在一个表单,从观众那里征求评论;规则调整输入的结果,这一过程还在继续。清理和全面标准化预计今年夏天完成。
无论是MISRA还是CERT有特定的官方合规认证标准。预期的方法是商业工具供应商将提供工具,分析代码和报告一段代码的基础是好是坏坚持标准。这些工具最近宣布LDRA CERT C和MISRA c++;事实上,LDRA CERT C工具用作CERT C网站上参考实现。当前版本似乎完全覆盖78“标准”(使用CERT的术语)和部分覆盖7标准,与86年标准没有实现和30标准根本根据他们写的方式。但是这些数字实际上包括规则和建议,和LDRA一直关注的规则;事实上,一个标准的分离规则的建议是能够自动检查规则。LDRA预计完全覆盖所有规则的夏末。CERT c++检查器还对未来的计划。
确定安全的和/或安全的编码实践,一个显而易见的问题是,为什么每个人都不想检查代码,代码是否被用于一个特别脆弱的应用程序。这个问题的答案让我们直接的克星所有静态分析工具:假阳性。方法用于执行这些规则常常需要假设编码的意图,和这些假设可能是也可能不是适合一个给定的行代码。因此,许多报道的“缺陷”(用行业术语)可能事实上不是缺陷。静态分析工具运行后,下一步是分流,编码器研读报告问题和决定哪些是合法的。工具提供商努力减少假阳性——它可以这样一个问题,他们有时有更好的竞争(即低)假阳性利率,但最后,他们从未完全消失。这些工具的使用结果,并准确的成本足够高的用户,这些工具并不是通常使用在他们的目标应用程序领域。
当然还有其他的编程语言或多或少在这些应用领域中广泛使用。艾达是著名的语言的防御,但工程师的池太小,更多主流语言正在使用——大概是国防部的动机的一部分资金安全编码方案对其他语言。Java是上升的,但不像C和c++,是一种解释语言,所以虚拟机可以捕捉很多潜在的不安全行为的实时执行程序。此外,Java和它包含的一些漏洞主要表现在用户界面,不流行广泛(或更少)的嵌入式应用程序,减少紧迫感。规模的另一端成熟度,Fortran也可能是这些应用程序——特别是在国防中找到。但是他们倾向于实现特定单位的功能,最终被包裹在C或c++或Ada与系统的其余部分。如果包装代码是安全的,那么小的Fortran群岛仍将分离出恶意的恶作剧。
这几乎让C和c++作为主要的重点领域。这是没有真正的惊喜,真的,因为这些语言——尤其是和C——是如此出名负责很多意想不到的麻烦。
*作者并没有表示对任何特定的个人经历,验证这个比喻的适当性。