0

有没有人有这样做的经验?我现在正在使用 C++ 开发 Java 反编译器,但希望使用更高级别的语言来执行内部树的实际转换。我很好奇在语言之间编组数据的开销是否值得使用更具表现力的语言来更好地表达我想要完成的事情(如 Haskell)。这实际上是在“现实世界”中完成的,还是通常在项目开始时选择一种语言并坚持下去?尝试过的人有什么建议吗?

4

3 回答 3

2

我大力提倡始终为每个挑战选择正确的编程语言。如果有另一种语言可以轻松处理一些其他棘手的任务,我会说去吧。

它发生在现实世界中吗?是的。我目前正在开发一个由 PHP 和 Objective-c 代码组成的项目。

正如您所指出的,诀窍在于两种语言之间的交流。如果可能的话,让每种语言都坚持自己的领域,并让两个部分以最简单的方式进行交流。在我的例子中,它是通过 http 发送的 XML 文档。在您的情况下,某种格式化的文本文件可能是答案。

于 2008-11-24T09:47:14.050 回答
1

编组成本取决于您使用的语言和架构。例如,如果您在 CLR 或 JVM 上,则有可用的低成本互操作解决方案 - 尽管我知道您可能正在使用非托管 C++。

另一种途径是嵌入式领域特定语言。树转换通常可以通过模式匹配和应用相对少量的函数来表达。您可以考虑编写一个简单的树模式匹配器 - 例如,看起来像 Lisp s-exprs 但使用占位符来捕获变量的东西 - 具有关联的操作,这些操作是转换匹配的子树的函数。

于 2008-11-24T09:47:29.260 回答
1

Tcl/Tk的发明者John Ousterhout是多语言编程的坚定拥护者,并写了很多关于它的文章。为了做到这一点,您需要在您使用的语言之间建立一个干净的接口机制。有很多机制可以做到这一点。执行此操作的不同机制的示例如下:

  • SWIG(Simplified Wrapper and Interface Generator)可以获取 ac 或 c++(或其他几种语言)头文件,并为 perl 或 python 等高级语言生成一个接口,允许您访问 API。还有其他系统使用这种方法.

  • Java 支持JNI ,而 Python 的ctypes、VisualWorks DLL/C connect等各种其他系统 都是本机机制,允许您显式构造对较低级别子系统的调用。

  • Tcl/Tk 被明确地设计为嵌入的,并且具有用于 C 库的本地 API 以将钩子添加到语言中。它的结构类似于 C 中的 argv[] 结构,旨在使基于命令行的 C 程序与 Tcl 的接口相对容易。这与上面的示例类似,但来自相反的方向。Python、Lua 和 Tcl 等许多脚本语言都支持这种机制。

  • Explicit glue mechanisms such as Pyrex, which are similar to a wrapper generator, but have their own language for defining the interface. Pyrex is actually a complete programming language. Middleware such as COM or CORBA allow a generic interface definition to be built externally to the application in an interface definition language and language bindings for the languages concerned to use the common interface mechanism.

于 2008-11-24T10:18:04.330 回答