多编程语言项目的最佳实践

时间:2008-11-24 09:40:40

标签: multilingual

有没有人有这方面的经验?我现在正在使用C ++编写Java反编译器,但是想要更高级别的语言来进行内部树的实际转换。我很好奇,如果在语言之间编组数据的开销值得更有表现力和语言的好处,以便更好地阐明我想要完成的事情(比如Haskell)。这实际上是在“现实世界”中完成的,还是通常在项目开始时选择一种语言并坚持下去?那些尝试过它的人有什么提示吗?

3 个答案:

答案 0 :(得分:2)

我总是主张为每个挑战选择正确的编程语言。如果有另一种语言可以轻松处理一些其他棘手的任务,我会说要去做。

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

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

答案 1 :(得分:1)

编组费用取决于您正在使用的语言和架构。例如,如果您使用的是CLR或JVM,则可以使用低成本的互操作解决方案 - 但我知道您正在使用可能不受管理的C ++。

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

答案 2 :(得分:1)

John OusterhoutTcl/Tk的发明者是多语言编程的坚定拥护者,并且对此进行了相当广泛的撰写。为了做到这一点,您需要在您使用的语言之间建立一个干净的接口机制。这有很多机制。这样做的不同机制的例子是:

  • SWIG (Simplified Wrapper and Interface Generator可以带c 或c ++(或其他几种语言) 头文件并生成一个 高级语言的界面 比如允许的perl或python 您可以访问API。有 其他使用它的系统 方法

  • Java支持JNI,各种各样 其他系统,如Python的 ctypes,VisualWorks DLL/C connect是本机机制 允许你明确地 构建对下层的呼叫 等级子系统。

  • Tcl / Tk明确设计为 嵌入,并有一个native API 为C库添加钩子 语言。的结构 这类似于argv []结构 C,旨在实现它 相对容易接口a 基于命令行的C程序进入 TCL。这与上面类似 例如,但来自相反的 方向。许多脚本语言 比如Python,Lua和Tcl支持 这种机制。

  • 明确的胶水机制,如 Pyrex,类似于a 包装发电机,但有他们的 用于定义的自己的语言 接口。 Pyrex实际上是一个 完整的编程语言。 中间件,例如COMCORBA允许通用 要构建的接口定义 在外部的应用程序 interface definition language 和语言绑定 有关语言使用 通用接口机制。