【问题标题】:Modern Ada to C/C++ translator [closed]现代 Ada 到 C/C++ 转换器 [关闭]
【发布时间】:2012-06-04 18:01:28
【问题描述】:

是否有从 Ada (95, 2005) 到 C 的源到源转换器(翻译器)? 他们有多满(他们能把 Ada 的每一个特性都转换成 gnu c99 + pthreads + POSIX)吗?

是否可以在关键应用中使用这种 ada-to-c 转换器?

PS:也欢迎翻译成 C++(至 2003 年,带有 gnu 扩展)。

PPS:当说“gnu c99”时,仅表示支持C99+大多数gnu扩展,并不表示GCC。

【问题讨论】:

  • 因为某些硬件没有ADA。
  • @Mat,这似乎是一个常见的误解(我在上个月听过两次 :-) 如果 GCC 以平台为目标,那么您将免费获得 Ada。不,不能那样工作。
  • 如果它是内部硬件,你从哪里得到一个 C 编译器?
  • @Marc C - 不过,如果你有 gnu c99 + pthreads + POSIX,让 GNU Ada 工作应该不是那么大的飞跃。
  • @T.E.D.,我有'c99 with gnu extensions'的编译器,但没有GCC(这真的是不同的东西)。理论上我可以编译 GNU Ada,但它不会为这个硬件发出机器代码。它需要移植 GCC 后端。

标签: c ada code-translation


【解决方案1】:

我不知道有任何开源 Ada-to-C 翻译器。我所知道的唯一一家是 SofCheck's,据说它非常好。

SofCheck 已被 AdaCore 收购,我在 AdaCore 网站上进行了 非常 简短的搜索以寻找翻译器,但没有任何结果。如果寻求商业解决方案对您来说是一个可行的选择,您可以通过 sales@adacore.com 询问他们。 (至少得到一个价格。)

【讨论】:

  • 谢谢。你能说什么:adatoccpp.sourceforge.net(不完整?)和mapusoft.com/products/ada-changer
  • 请注意,该翻译的作者也是 AdaCore 雇佣的,所以那里的人应该有答案。
  • 我确认 MapuSoft 内部确实有 AdaMagic,而且效果很好。此外,Google+ 上的 S. Tucker Taft 告诉 AdaCore 正在开发 SPARK2C
  • 这里也有一些有趣的讨论:computer-programming-forum.com/44-ada/a0b2113cf98dc015.htm -- 引用:可以为 Ada 的子集编写可移植 C 的翻译器。也可以编写从 Ada 的(更大)子集到特定于给定平台/OS/C 编译器组合的 C 的翻译器。 然而,一般来说,不可能编写一个从 Ada 到可移植 C 的翻译器。泛型和异常难以翻译,任务和受保护单元无法翻译成可移植 C。 Jeff Carter PGP:1024/440FBE21
【解决方案2】:

除非有非常充分的理由将 Ada 用于此应用程序(例如,客户需要它,或者您已经有一个用 Ada 编码的大型应用程序想要使用),否则如果您使用 Ada 可能会少很多痛苦咬紧牙关,用精心设计的 C99 或 C++ 编写您认为合适的解决方案。

如果您坚持,Sofcheck 的翻译器可能是最好的;他们已经为此工作了很长时间。

如果做不到这一点,您可能(?)从 Ada 编译器的 ASIS 输出开始构建翻译器。这可能是相当多的挑剔工作,因为 Ada 具有非常精确的语义,如果您只想在 Ada 中粗心地编码、翻译和运行,您最好保留这些语义。如果您希望输出对最终客户来说“漂亮”,那将是更多的工作。 (应考虑长期维护)。我怀疑实现代码来模拟 Ada 的集合点可能相当棘手,同时在语义上既复杂又异步。这种方法的真正缺陷是工作量很大。也许只是继续你的生活并用非 Ada 的方式编写应用程序本身会更省力。

请参阅我对 language translation done poorly 和替代方法的注意事项。

【讨论】:

  • 这是一个正确答案的一半,但是在你不需要的时候重写完美工作的代码真的很愚蠢。我不在乎它是用什么语言编写的,以及新语言的所谓好处是什么。如果您完全无法获得编译器,那是另一回事,但这里没有断言。
  • ...+ 的一半是重写通常比尝试手动翻译要好。您最终仍然会得到一些必须调试和测试的东西,就像原始产品在全新时所做的那样。
  • 我并不打算暗示他应该重写应用程序。事实上,OP 并没有说他是否 Ada 程序,只是说他想使用Ada 编译器;我(错误地?)假设他要写一个新的应用程序。如果他有一个 Ada 程序,那么任何质量的自动翻译都可能比手动重写更好(成本更低、速度更快、风险更低),同意。我修改了答案以使其更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 2018-08-12
  • 2012-05-27
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多