在这个多语言的时代,几乎每一项任务似乎都有一种很好的语言,而且我发现自己在专业上正在努力克服" 除了C很快 "之外的咒语,其中快速的意思是"足够快".我和非常理性的思想开放的人合作,他们喜欢比较数字,而我所拥有的只是想法和意见.你能帮助我找到主观意见并进入"现实世界"吗?
您是否可以帮我找到关于嵌入式和(Linux)系统编程可以使用其他任何语言的研究?我很可能会推动一个错误的假设,并非常感谢研究向我展示这一点.您可以链接或包含好的数字,以帮助将"这只是他/她的意见"评论保持在最低限度.
所以这些是我的特殊要求
记忆不是一个严重的约束
便携性不是一个严重的问题
这不是一个实时系统
Reed Copsey.. 49
根据我的经验,使用C进行嵌入式和系统编程不一定是性能问题 - 它通常是一个可移植性问题.C往往是几乎所有平台上最便携,最受支持的语言,特别是在嵌入式系统平台上.
如果您希望在嵌入式系统中使用其他东西,通常需要确定哪些选项可用,然后确定性能,内存消耗,库支持等是否"足够好"适合您的情况.
根据我的经验,使用C进行嵌入式和系统编程不一定是性能问题 - 它通常是一个可移植性问题.C往往是几乎所有平台上最便携,最受支持的语言,特别是在嵌入式系统平台上.
如果您希望在嵌入式系统中使用其他东西,通常需要确定哪些选项可用,然后确定性能,内存消耗,库支持等是否"足够好"适合您的情况.
"除了C很快[足够]之外,其他任何东西都是早期优化,而且早期优化错误的原因都是错误的.如果您的系统具有足够的复杂性以至于需要C之外的其他东西,则系统的某些部分必须"足够快"并且部件具有较轻的约束.如果编写代码(例如,在Python中)可以更快地完成项目,减少错误,那么您可以使用一些C或汇编代码来加速时间关键部分.
即使事实证明整个代码必须用C或汇编语言编写以满足性能要求,使用像Python这样的语言进行原型设计可以带来真正的好处.您可以使用正在运行的Python原型并逐步用C代码替换部件,直到达到必要的性能.
因此,使用可以让您最准确,最快速地完成开发工作的工具,然后使用实际数据来确定您需要优化的位置.可能有时候C是最合适的工具,但有时并非总是如此,即使在嵌入式系统中也是如此.
将C用于嵌入式系统有一些很好的理由,其中"性能"只是次要的一个.嵌入式非常接近硬件,您需要手动内存地址来与硬件进行通信.所有API和SDK主要适用于C语言.
只有少数平台可以为Java或Mono运行VM,这部分是由于性能影响,但也是由于昂贵的实施成本.
除了性能之外,还有另一个考虑因素:您很可能正在处理旨在用于C或C++的低级API.
如果你不能使用某些SDK,你只会遇到麻烦,而不是节省使用更高级语言开发的时间.至少,你最终会重做一堆函数声明和常量定义.
对于C:
C通常是处理器编译器支持的唯一语言.
大多数库和示例代码也是C中的概率.
大多数嵌入式开发人员拥有多年的C经验,但在其他任何方面都缺乏经验
允许直接硬件接口和手动内存管理.
易于与汇编语言集成.
C将会存在很多年.在嵌入式开发中,它是垄断企业,可以扼杀任何改变的企图.需要像Java或Lua这样的VM的语言永远不会成为嵌入式环境中的主流.如果编译语言提供了超过C的引人注目的新功能,它可能会有机会.
不同语言之间的网络有几个基准.其中大多数你会在顶部找到一个C或C++实现,因为它们可以让你更好地控制真正优化的东西.
示例:计算机语言基准游戏.
很难与C(或Pascal,Modula-2,Ada等其他程序语言)和嵌入式程序集进行争论.这些语言有很大的成功历史.通常,您希望消除未知的风险.在我看来,尝试使用除C或汇编之外的任何东西都是未知数.话虽如此,混合模型没有任何问题,您可以使用其中一个转到C的方案,或者使用Python或Lua或JavaScript作为脚本语言.
你想要的是能够在必要时快速轻松地转到C语言.
如果你说服团队去做一些未经证实的事情,项目就是你的cookie.如果它崩溃了,它可能会被视为你的错.
在某些情况下,您需要实时性能,尤其是在嵌入式系统中.您还有严重的内存限制.像C这样的语言可以让您更好地控制执行时间和执行空间.
所以,根据你的工作,C可能会"更好"或更合适.
查看以下文章
http://theunixgeek.blogspot.com/2008/09/c-vs-python-speed.html
http://wiki.python.org/moin/PythonSpeed/PerformanceTips(特别是参见Python不是C部分)
http://scienceblogs.com/goodmath/2006/11/the_c_is_efficient_language_fa.php
本文(由Michael Barr 撰写)讨论了嵌入式系统中C,C++,汇编程序和其他语言的使用,并包含了显示每种语言的相对用法的图表.
这是另一篇文章,恰当地称为拒绝C++的不良理由.
Ada是一种高级编程语言,专为嵌入式系统和关键任务系统而设计.
它是一种快速安全的语言,可以在任何地方内置数据检查.这就是飞机上的自动驾驶员编程的原因.
在此链接中,您可以比较Ada和C.