哪种动态语言可以轻松使用其他语言的库?

时间:2010-03-20 17:06:57

标签: python ruby perl module dynamic-languages

告诉你为什么认为Python,Perl,Ruby等最容易从其他语言中插入模块而且思路很少。

澄清一个例子:我想用Python编写业务逻辑,但使用方便存在的功能作为Perl模块。

换句话说,哪种语言“适用于”大多数模块?

7 个答案:

答案 0 :(得分:9)

Perl通过Inline模块集对其他语言提供了很好的支持。

Inline::Python允许您将Python模块,类和函数导入到Perl代码中,并从Perl中调用它们,就像它们是本机代码一样 - 请参阅Importing Functions

Inline::Ruby的工作方式几乎相同。

答案 1 :(得分:6)

Parrot VM看起来就像是为了达到这个目的,因为

  

Parrot目前拥有各种各样的   各种语言实现   完成阶段,包括Tcl,   Javascript,Ruby,Lua,Scheme,PHP,   Python,Perl 6,APL和.NET   字节码翻译器

我认为,重要的是,您使用哪种语言作为“主要驱动程序”以及哪一种只是作为此模块的“访客”或者只是检查您选择Parrot实现完整且成熟的语言(因为Parrot是一个相当新的项目,其中一些语言实现也​​是如此)。

答案 2 :(得分:3)

如果要插入Perl模块,最适合的语言是Perl。 Perl能够正确表示用Perl编写的代码的语义和功能。这真的不应该是一个震惊。

如果你有一个自包含的程序,你想在其自己的进程中从另一个程序调用,而不是经常交互,那么这些语言中的任何一种都可以用用任何语言编写的程序来实现。那时,你并没有真正在程序中使用其他语言,而只是调用其他问题。

有几个项目可以组合各种对和项目(如Parrot),这些项目旨在为兼容性和项目(如.NET)提供各种语言的平台,几乎意外地提供了以前不兼容的语言之间的兼容性。但是,我不认为其中大部分都是健壮的,成熟的,并且适合组合普通代码,如你所愿。

答案 3 :(得分:0)

所有3种语言都有非常好的,清晰的工具,只需调用子进程中的任何可执行文件(包括python somethingelse.pyruby somethingelse.rb等可执行文件。)

使用你最了解的东西。

答案 4 :(得分:0)

我将在这里以更具架构性的方式回答。问题是你想要做什么...你想用Python编写业务逻辑并从Python调用Perl函数吗?或者您是否想要执行脚本?如果是这样,两者将如何沟通?

我怀疑,但不知道,Parrot VM可能允许你这样做,但正如迈克指出的那样,有困难。除了使用某种形式的松散耦合(与语言无关)之外,跨语言的跨语言工作很难,就像IPC一样。为此,您可以考虑使用一种语言设置控制器,让其他人通过dbus队列进行通话,或者根据您所使用的平台优先选择任何机制。你如何做到并不重要(提出关于最佳机制的辩论),但正确设计它使得跨语言交谈和构建插件变得非常容易。例如,您可能有process_new_user的队列。在该队列中注册的任何脚本都可以访问数据,因此新开发人员可以轻松地为其部分程序添加功能。将其解释为:您可以轻松使用不同的脚本语言来实现该位。

答案 5 :(得分:0)

动态语言运行时专门设计为允许一种动态语言使用另一种动态语言定义的对象和函数。目前Python和Ruby都有DLR实现,但我没有听说过Perl。

要使用DLR,您需要.NET或Mono。

答案 6 :(得分:0)

大多数脚本语言可以处理这种事情(通过运行用其他语言编写的外部程序),但似乎你最好的选择可能是某种类型的shell脚本(Windows用户称之为“批处理脚本”,但是DOS语法很糟糕,不推荐使用。)UNIX程序员长期以这种方式自由地混合语言。在Windows上,您可以安装Cygwin以获得功能齐全的BASH shell。

shell最初是用作用户界面,用于启动其他程序或以有趣的方式组合它们。但是,许多shell(特别是Bourne shell或其现代后代BASH)也是完全成熟的编程语言。您可以将每个“模块”创建为独立的独立程序,这些程序将由shell脚本运行。

相关问题