我会投入我的想法。快速背景:我目前正在Ada的一家大公司工作(不是洛克希德,但足够接近)。我是核心的C程序员。 (也使用C ++,C#和Java)
阿达作为一种语言很好。它有一些很好的东西,你不能用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访问一些优秀的调试器,那么它确实可以推动开发速度。
通常,在某些情况下我更喜欢C ++。如果你的程序没有任何并发性,并且有一些C ++(不是C而是 C ++ 那里的库真的很有用,那么C ++可能就是这样。
但是,如果您将并发作为系统设计的一部分,Ada就是一个 的 巨大 强> 获胜,因为它原生支持它。我所做的一项工作实际上是编写了一个完全可移植的实时调度程序。我们在大约2个小时内将整个模拟(> 100KSLOC)从vxWorks移植到完全不同的供应商的Windows编译器(所有这些都用于处理不同的源代码库系统)。
任何具有C链接的库在Ada中都是完全可用的,尽管有时您可能会发现自己必须编写绑定。这是一个更多的工作,但你会经常发现其他具有相同库的人已经为你完成了工作。例如,我相信有可用的所有Win32绑定。尽管如此,制作新的很容易,我经常发现自己这样做只是为了提供一个我更喜欢的界面。
Ada还有一些功能,恕我直言使其成为低级系统编程的首选语言。例如,该语言允许您指定 的 究竟 强> 记录中每个字段的位置和大小。这对于处理与其他平台通信的硬件或数据至关重要。 C ++目前只允许您指定每个字段的大小。我现在正在处理这个问题,发现它非常令人沮丧。
系统编程的另一个杀手级功能是默认情况下会检查所有数组的边界。如果需要,可以将其关闭以提高效率,但默认为安全。恕我直言这是默认应该是什么。在C ++中,如果你想要安全,你必须自己编写代码,或者使用像std :: vector这样更安全的类(和 只使用 .at() 方法 。你有多少次见过有人这样做过?决不?我也是。)
.at()
因为Ada不是一部轰动一时的语言(尽管从我读到的内容,我实际上对学习更多感兴趣)是因为大多数程序员都想要快速而肮脏。只看一下Microsoft Windows。他们用C编写了第一个版本(还有一些x86汇编程序)。花了两年时间才完成整个怪物,即使现在也很脆弱。病毒和蠕虫很容易渗入系统是非常糟糕的,他们试图远离Windows 8中的Win32 API。我敢肯定,如果操作系统是用Ada编写的,那么它会更多强大而且比现在更安全
如果你写航空电子软件,你通常不能使用很多的库。通常,您必须遵循许多编码规则。例如,禁止使用recrusive函数或动态内存分配。因此,库在认证方面会造成很多麻烦(例如,DO-178C)。
我更喜欢Ada而不是C ++,因为它阻止你做许多愚蠢的编码错误。原则上你可以用Ada和C ++做同样的事情。但是,您必须定义许多编码规则以符合认证要求。而且你必须证明遵守这些规则。
你对Ada也有同样的看法,但与C ++相比,它的工作量更少。
(来自实际Ada开发者的回复)
与其即将消亡的预测相反,阿达仍然很顺利。该语言的当前版本是 Ada 2005 ,和更新 Ada 2012 正在最后确定。
Ada继续进行现代化改造,并融入行业开发的新软件工程特性和实践。 (反过来也是如此 - 内建的 自1983年以来,并发一直是Ada的核心功能,现在它只是进入“现代”编程语言。 :-)
Ada不会采用任何新的功能和实践,例如,Ada不会变身为功能语言。但是,那些提高软件生产力,可靠性和安全性的功能的合并方式与Ada的底层架构和意图一致。
Ada确实不是一种广泛使用的编程语言,但它确实拥有一个忠诚的开发者社区,他们几乎总是愿意帮助那些开发项目和学习语言的人提出问题,关注和建议。这里的资源包括StackOverflow(查看 阿达标签 ) comp.lang.ada 甚至 书签交易 。
至于Ada开发人员的可用性,它有点像“Catch-22”的情况。因为它没有被广泛使用,所以开发人员较少。由于开发人员较少,公司不愿在项目中使用它,并且因为它没有用于项目,开发人员不会去寻找工作。
不过,我可以证明,有许多知识渊博的现任和前任Ada程序员喜欢使用这种语言,并且对于你所描述类型的应用程序特别感兴趣 - 如果他们知道的话 。如果你承诺与Ada合作,然后毫无歉意地为Ada开发者做广告 - 在Monster上,无论你在其他地方做广告,还是在comp.lang.ada或Reddit上有品位 - 我认为Ada开发人员的可用性会给你带来惊喜其他怀疑论者。
祝你的项目好运。
您可以使用pragma限制来限制语言的某些功能。可能是使用火花的替代品。