我们目前正在为基于Atom的航空电子设备开发一种非关键的移动地图类型navcomm解决方案。原型已经在Python / Qt中完成,现在我需要决定用于“真实”应用程序的语言。 Ada或C / C ++。我已经做了12年的C ++开发人员并厌恶这种语言。 Ada似乎很有希望,但我有点担心它支持基础设施,可用库,开发人员可用性等等。以前有人经历过这个吗?你的结论是什么?
答案 0 :(得分:36)
(来自实际Ada开发者的回复)
与其即将消亡的预测相反,阿达仍然很顺利。该语言的当前版本为Ada 2005,Ada 2012的更新正在最终确定中。
Ada继续进行现代化改造,并采用行业开发的新软件工程特性和实践。 (反过来也是如此 - 内置并发自1983年以来一直是Ada的核心功能,现在才进入“现代”编程语言。: - )
Ada不会采用任何新功能和实践,例如,Ada不会变身为功能语言。但是,那些提高软件生产力,可靠性和安全性的功能的整合方式与Ada的底层架构和意图一致。
Ada确实不是一种广泛使用的编程语言,但它确实有一个忠诚的开发者社区,他们几乎总是愿意为那些开发项目和学习语言的人提供问题,关注和建议。 。资源包括StackOverflow(查看Ada tag),comp.lang.ada,甚至Reddit。
至于Ada开发者的可用性,它有点像“Catch-22”的情况。因为它没有被广泛使用,所以开发人员较少。由于开发人员较少,公司不愿意在项目中使用它,并且因为它没有用于项目,开发人员不会去寻找工作。
我可以证明,有许多知识渊博的现任和前任Ada程序员喜欢使用该语言,并且对于您所描述的类型的应用程序特别感兴趣 - if他们知道这件事。如果你承诺与Ada合作,然后毫无歉意地为Ada开发者做广告 - 在Monster上,无论你在其他地方做广告,还是在comp.lang.ada或Reddit上有品位 - 我认为Ada开发人员的可用性会给你带来惊喜其他怀疑论者。
祝你的项目好运。
答案 1 :(得分:13)
我会投入我的想法。快速背景:我目前正在Ada的一家大公司工作(不是洛克希德,但足够接近)。我是核心的C程序员。 (也使用C ++,C#和Java)
Ada作为一种语言很好。它有一些很好的东西,你不能用C / C ++。对于实时关键系统,这非常好。它需要一点时间习惯,但它很容易学习。
缺点是语言感知真的。我认识的大多数喜欢和选择Ada的工程师都比较年长(45岁以上)。其中有两种类型的程序员:实际上非常擅长Ada并且可以做得对的人,以及那些“知道”Ada的人,但是以70年代代表70年代的方式/风格用旧语言编程。那些优秀的Ada程序员在这里受到高度重视。对于一家小公司抢夺他们,我认为你需要减少一些主要的现金。他们有4-5周的假期,6个数字的工资(即使在更便宜的地方居住)和各种好处。我希望这看起来并不像年龄一样,但它只是它的方式,可以作为一家小公司来考虑。如果你在达拉斯/沃斯堡这样的主要技术领域,它可能没问题。正如你在评论中提到的,大多数年轻的程序员都不会兴奋地学习Ada。它可能会很好并且作为一种语言很好,但它几乎没有市场价值或令人兴奋。
如果我正在启动一个实时嵌入式系统项目,我会坚持使用C(如果需要OO则使用C ++)。对于嵌入式我更喜欢C实际上超过C ++,因为根据我的经验,工程师试图强制嵌入式系统进入OO并使用功能因为它们在那里,但你的里程可能会有所不同。使用C或C ++: 1.巨大的程序员可供选择。 2.人类已知的每一种工具都可以使用它(许多是免费的)。 3.网上资源无穷无尽。
它可以让你开始工作。如果您可以使用像Green Hills和VxWorks这样的JTAG访问一些优秀的调试器,那么它确实可以推动开发速度。
答案 2 :(得分:12)
通常,在某些情况下我更喜欢C ++。如果你的程序没有任何并发性,并且有一些C ++(不是C但 C ++ )库那些真正有用的库,那么C ++可能就是这样。
但是,如果你将并发作为系统设计的一部分,Ada是一个巨大的胜利,因为它本身支持它。我所做的一项工作实际上是编写了一个完全可移植的实时调度程序。我们在大约2个小时内将整个模拟(> 100KSLOC)从vxWorks移植到完全不同的供应商的Windows编译器(所有这些都用于处理不同的源代码库系统)。
任何具有C链接的库在Ada中都是完全可用的,尽管有时您可能会发现自己必须编写绑定。这是一个更多的工作,但你会经常发现其他具有相同库的人已经为你完成了工作。例如,我相信有可用的所有Win32绑定。尽管如此,制作新的很容易,我经常发现自己这样做只是为了提供一个我更喜欢的界面。
Ada还有一些功能,恕我直言使其成为低级系统编程的首选语言。例如,该语言允许您指定完全记录中每个字段的位置和大小。这对于处理与其他平台通信的硬件或数据至关重要。 C ++目前只允许您指定每个字段的大小。我现在正在处理这个问题,发现它非常令人沮丧。
系统编程的另一个杀手级功能是默认情况下会检查所有数组的边界。如果需要,可以将其关闭以提高效率,但默认为安全。恕我直言这是默认应该是什么。在C ++中,如果你想要安全,你必须自己编写代码,或者使用像std :: vector这样更安全的类(并且只使用.at()
方法你有多少次见过这样的人?从来没有?我也是。)
答案 3 :(得分:6)
Ada不是一部轰动一时的语言(尽管从我读到的内容,我实际上对学习更多的兴趣)是因为大多数程序员都想快速而肮脏。只看一下Microsoft Windows。他们用C编写了第一个版本(还有一些x86汇编程序)。花了两年时间才完成整个怪物,即使现在也很脆弱。病毒和蠕虫很容易渗入系统是非常糟糕的,他们试图远离Windows 8中的Win32 API。我敢肯定,如果操作系统是用Ada编写的,那么它会更多比现在更强大,更安全
答案 4 :(得分:5)
您可以使用pragma限制来限制语言的某些功能。可能是使用spark的替代方案。
答案 5 :(得分:2)
如果你写航空电子软件,你通常不能使用很多的库。通常,您必须遵循许多编码规则。例如,禁止使用recrusive函数或动态内存分配。因此,库在认证方面会造成很多麻烦(例如,DO-178C)。
我更喜欢Ada而不是C ++,因为它阻止你做许多愚蠢的编码错误。原则上你可以用Ada和C ++做同样的事情。但是,您必须定义许多编码规则以符合认证要求。而且你必须证明遵守这些规则。
你和Ada一样,但它的工作量比用C ++少。
答案 6 :(得分:0)
这是一个很好的问题。
我从事Ada以及C和C ++的工作已有多年的专业经验。我都一样享受。
使用Ada或C / C ++等任何语言都可以将其意大利化。
您更有可能找到便宜的编译器并提供C / C ++支持。只需在您的编码实践中运用纪律即可。