告诉你为什么你认为 Python、Perl、Ruby 等最容易插入其他语言的模块,而无需考虑。
为了澄清,一个例子:我想用 Python 编写业务逻辑,但使用作为 Perl 模块方便地存在的功能。
换句话说,哪种语言“适合”最多的模块?
告诉你为什么你认为 Python、Perl、Ruby 等最容易插入其他语言的模块,而无需考虑。
为了澄清,一个例子:我想用 Python 编写业务逻辑,但使用作为 Perl 模块方便地存在的功能。
换句话说,哪种语言“适合”最多的模块?
Perl 通过Inline模块集对其他语言有很好的支持。
Inline::Python允许您将 Python 模块、类和函数导入到您的 Perl 代码中,并从 Perl 调用它们,就好像它们是本机的一样 - 请参阅导入函数。
Inline::Ruby的工作方式几乎相同。
Parrot VM看起来是实现此目的的方法,因为
Parrot 目前在不同完成阶段托管各种语言实现,包括 Tcl、Javascript、Ruby、Lua、Scheme、PHP、Python、Perl 6、APL 和 .NET 字节码翻译器
我认为,您将这些语言中的哪一种用作“主要驱动程序”,以及将哪种语言用作该模块或该模块的“客人”,这并不重要——只需检查您选择的 Parrot 实现是否完整且成熟(因为 Parrot 的一个相当新的项目,其中一些语言实现也是如此)。
如果你想插入一个 Perl 模块,最适合的语言是 Perl。Perl 能够正确地表示用 Perl 编写的代码的语义和功能。这真的不应该令人震惊。
如果你有一个独立的程序,你想在它自己的进程中从另一个程序调用,而不是不断地交互,那么这些语言中的任何一种都可以用任何语言编写的程序来做到这一点。那时,您实际上并没有在程序中使用其他语言,而只是调用了其他问题。
有几个项目可以组合各种对和项目(如 Parrot),旨在为大量语言提供一个平台以实现兼容性,而项目(如 .NET)几乎意外地提供了以前不兼容的语言之间的兼容性。但是,我不认为其中大多数都像您希望的那样健壮、成熟且适合组合普通代码。
大多数脚本语言都可以处理这种事情(通过运行用其他语言编写的外部程序),但似乎最好的选择可能是某种 shell 脚本(Windows 用户称之为“批处理脚本”,但 DOS 语法是太可怕了,不推荐。) UNIX 程序员长期以来一直以这种方式自由混合语言。在 Windows 上,您可以安装 Cygwin 以获得功能齐全的 BASH shell。
shell 最初的目的是作为用户界面,用于启动其他程序或以有趣的方式组合它们。但是,许多 shell(尤其是 Bourne shell 或其现代后代 BASH)也是成熟的编程语言。您的每个“模块”都可以创建为单独的独立程序,这些程序将由 shell 脚本运行。
所有 3 种语言都具有非常好的、清晰的工具,可以调用子进程中的任何可执行文件(包括类似python somethingelse.py
or的可执行文件ruby somethingelse.rb
)。
使用你最了解的。
我将在这里回答更多架构层面的问题。问题是您要做什么...您想用 Python 编写业务逻辑并从 Python 调用 Perl 函数吗?或者您正在寻找执行脚本?如果是这样,两人将如何沟通?
我怀疑但不知道 Parrot VM 可能允许您这样做,但正如 Mike 指出的那样,存在困难。跨语言工作很困难,就像跨程序的 IPC 一样困难,除非您使用某种形式的松散耦合(与语言没有那么紧密的联系)。为此,您可能会考虑使用一种语言设置控制器,并让其他人通过dbus队列或您喜欢的任何机制进行对话,无论您在哪个平台上。你如何做到这一点并不重要(提示关于最佳机制的辩论),但如果设计得当,它可以让跨语言交流和构建插件变得非常容易。例如,您可能有一个队列process_new_user
, 例如。在该队列中注册的任何脚本都可以访问数据,因此新开发人员可以轻松地为他们的程序部分添加功能。将其解释为:您可以轻松地使用不同的脚本语言来实现该位。
动态语言运行时专门设计用于允许一种动态语言使用以另一种动态语言定义的对象和函数。目前 Python 和 Ruby 有 DLR 实现,但我还没有听说过 Perl。
要使用 DLR,您需要 .NET 或 Mono。