也许这个问题听起来有点奇怪,所以我会解释一下背景。
目前我正在Y大学做一个项目,这将是一个完整的卫星机载软件。该系统是在实时操作系统的基础上用C++编程的.然而,目前只有在Matlab/Simulink中实现姿态控制系统、故障检测和空间仿真等子系统,才能有效地实现算法的原型化。经过验证后,它们将被翻译成c++。
完整的车载软件变得非常复杂,只有少数人知道整个系统.此外,许多学生还没有用C++编程,C++的手动内存管理使得编写任务关键软件更加困难。
当然,主系统必须用C++实现,但我问自己是否可以使用嵌入式语言来实现目前在Matlab中编写的子系统。这种嵌入式语言应该具有以下特点:
我搜索了一下,但只找到了Lua。它看起来不错,但我不会在关键任务软件中使用它。你有没有遇到过这样的情况,或者你知道什么语言可以满足这些条件?
编辑:澄清一些事情:嵌入式意味着它应该能够将语言嵌入到现有的C++环境中。所以没有像Ada或Haskell这样的编译语言
发布于 2011-11-15 21:08:03
使用C++,不要使用任何嵌入式/分层的东西。
我将用否定的方式回答这个问题,并告诉你使用C++,雇佣适当的资源,不要在上面添加其他的东西。您的大多数条件无论如何都适合C++:强输入、最小运行时等(键入不如Haskell强,但比大多数脚本语言好)
如果不愿意,甚至不需要使用许多类和对象。编写一种更实用的样式,除非您需要更高级的函数和运行。使用C++作为一个更好的C没有特殊的罪过,除非您是偶然地这样做的。如果你有目的地这么做,那就全速前进。
考虑到假定的任务关键性,您可能不想拥有嵌入式语言所带来的额外的复杂性和故障点。
这就是说:请尽可能使用现代的C++,特别是使用适当的智能指针(如果使用堆内存)。C++已经走了很长一段路,尤其是大多数手动内存管理任务现在使用shared_ptr、unique_ptr等更好地自动化了。如果你不得不写删除,你是在做错事。
如果你被困在想要嵌入什么东西,看看Boost 原语。
发布于 2012-02-07 09:57:35
我不确定什么是“关键任务”,但我有10+多年的安全关键嵌入式系统软件开发经验。
无论你选择哪种语言,你都一定需要一个编码标准。也就是说,关于如何编写程序、允许哪些机制以及哪些机制被禁止的规则。规则应该采用“不使用goto”、“不使用类似函数的宏”等方式。
如果项目中有初级程序员参与,这一点尤其重要。因为他们可能不知道哪些机制被认为是好做法,哪些机制是坏的。而且他们几乎肯定不知道语言所包含的数以百计的不明确和微妙的行为案例,以及其他类似的高级但极其重要的话题。例如,人们很可能只写一本关于C++中所有未定义/未指定/实现定义的行为的很厚的书。
此外,工业安全标准(如DO178B或IEC 61508 )强制使用编程语言的一个定义良好的子集,然后您必须有一个编码标准。
如果您没有编码标准的经验,那么明智的做法是选择一个预先制作的、得到广泛认可的行业事实上的标准: MISRA-C、MISRA-C++、already、Cert C等等。这类行业编码标准的优点是已经有了软件测试工具,也就是支持它们的静态/动态代码分析器。如果没有适当的代码分析器工具,甚至不要考虑这个项目!
(关于技术细节的括号:您将在任何高完整性系统的编码标准中使用粗体字母禁止任何形式的动态内存管理,无论语言如何。一般来说,这样的系统以非确定性的方式运行是没有意义的,而动态内存只有在非确定性的情况下才有意义。)
发布于 2011-11-15 19:49:55
我建议Haskell作为思考的食粮,尽管它不符合你所有的标准:
优点:
缺点:
不确定:
https://softwareengineering.stackexchange.com/questions/119933
复制相似问题