因此,我怀疑这些语言是否在现实世界中被用于实际应用,或者现实世界中的实时系统是使用其他语言制作的,例如DSL。
如果第二个选项对您来说是正确的,那么您使用的语言有哪些突出特点?
我是一名航空电子软件工程师。我曾参与过几个开发项目的工作。我在这些项目中使用的语言是: C,C ++ 和实时Java。
C很棒。C ++也还不错,但由于安全考虑,如DO-178B,需要严格的编码标准来编写C / C ++代码。
我认为实时Java是未来的趋势,但目前似乎还没有太多应用于航空电子领域。
韩国喷气式教练机T-50将使用运行RT Java应用程序的任务计算机来服务于HUD和MFD显示器,并管理所有关键任务功能。
Java实时规范现在有几个商用级别的实现:
这些产品涵盖从编译到本地代码(Aonix)到J2ME(aicas、apogee),再到完整的J2SE(Sun、IBM)的整个领域。大多数,如果不是全部,已经在少数安全或任务关键系统中进行了部署,但势头正在增长。示例包括Eglin空军基地的空间监视雷达现代化和美国海军在DDG-1000/Zumwalt驱逐舰中使用RTSJ。Sun还声称在金融交易处理领域进行了部署。
如果您对RTSJ感兴趣,我建议阅读Peter Dibble的《实时平台编程》或Wellings教授的《Java并发和实时编程》。
相关的是,目前也有人在进行工作,提供了Java编程语言的安全关键性配置文件,并构建为RTSJ的子集。此外,还组建了一个专家小组来探索分布式RTSJ(DRTSJ),但工作已经停滞不前。
这本书没有提到Matlab,但在过去的几年中,它已经从一个模拟工具发展成为了实时系统的模型驱动开发系统。实际上,Matlab/Simulink是用于线性编程、状态机和算法的DSL。Matlab可以生成C或HDL以用于实时和嵌入式系统。很少看到航空电子学、电子战或其他防卫行业的实时工作广告不要求一些Matlab经验。(我不是Matlab的员工,但难以过分强调它在工业中的普及程度)
我曾经接触过的所有实时系统主要都是用C语言编写的,有一些部分使用汇编语言,或者主要是用汇编语言编写,只有少量的C语言代码。(具体取决于是90年代以及之后还是80年代)然而,我所接触的一些实时系统使用了特殊的自制代码生成器,而不是完全符合DSL标准的语言。
首先,我们必须定义什么是实时。
当然,取决于你的工具如何与物理环境交互,纯实时可能无法有效完成,因为会有很多第三方依赖。
如果你正在使用像arduino这样的微控制器构建嵌入式系统,则要使用的语言将受到硬件限制,但对于像Raspberry Pi这样更复杂的系统,语言选择非常广泛。
这取决于你正在测量的内容,如果你正在处理:
我无法相信没有人提到LabVIEW编程语言,它广泛用于实时安全关键系统。它具有广泛的库和知名的设计模式,可用于架构和实现实时系统。
此外,国家仪器公司制造各种硬件(cRIO、PXI等),专为实时应用而设计。
我们在水力压裂(Fracking)中使用LabVIEW,该技术在安全关键环境中得到应用。
可编程逻辑控制器(PLCs)运行梯形图和功能块图代码,这实际上是一种实时DSL,因为您的选项非常有限,难以以可能导致不可预测运行时性能的方式进行编程。