多种语言编程:用多种语言构建应用程序是一种好习惯吗?
我正在考虑构建一个将动态语言(python或者ruby)和编译语言混合在一起的应用程序,并且需要一些帮助以使自己确信这是一个好主意。
我的想法是,我可以使用动态语言来快速编写大量代码,然后使用诸如c / c ++之类的编译语言来实现对性能至关重要的代码。
我可以看到这种方法的很多好处:
- 通过主要使用动态语言进行编码来提高生产力
- 两种语言的库的可用性
但是也有一些缺点:
- 维持两种语言之间的桥梁
- 依赖于两种语言和语言/库错误,而不是一种
这种方法的其他优点/缺点是什么?有人知道与此相关的任何资源和/或者最佳做法吗?
解决方案
是的。许多程序将高级语言(如Python或者Ruby)和低级语言(如C)混合在一起。我们可以获得使用垃圾回收的OO语言进行逻辑编码的好处,并且仍然可以在紧密的内部循环中手动管理寄存器。
我认为做法非常明智。解决弊端的方法是提前确定将动态语言与C或者C ++交互的难易程度,然后再决定是否将其用于项目。
此外,我们还需要考虑是否希望应用程序是跨平台的。与编译语言相比,动态语言可能对平台的依赖性要小得多。这可能是决定应使用C或者C ++完成应用程序的哪些部分的一个因素。
我认为这是个好主意。
由于大多数(几乎所有?)操作系统都是用C或者C ++编写的,因此每种动态或者解释语言都在某种程度上回落到针对低级内容的经过编译,优化的语言。
Ja,bien sur,mein freund。的确是美人鱼。蟒蛇
我当然是在开玩笑。 Web开发人员每天都会做这些事,甚至没有注意到:Java,JSP,EL / OGNL,HTML,CSS,Javascript,ant,XML,XSLT ...
我认为多语言编程是自然的,强大的,高效的,而且比其他工具还酷。当然,必须以正确的方式使用它,以发挥每种语言的最大威力,并且不要使团队中的其他人感到困惑。
我们可能会发现,直到以后再不需要执行任何对性能至关重要的工作。因此,在我们确实确定需要执行此操作之前,我将与这些性能至关重要的重大更改之一进行斗争。
否则,只需选择一种根语言,perl和ruby使用c,因此它们的合并非常简单。我们还可以在Java VM上运行python(jython)或者ruby(jrunby),这将为我们提供java作为后端。尽管它可能会带来其他一些问题,但是由于我不熟悉针对相应语言的这些版本进行开发。
并非所有的性能问题都需要我们使用低级语言,因此在尝试使用另一种语言之前,请尝试先解决它,然后再快速使用另一种语言。
祝你好运,
我赞成使用最好的工具来完成这项工作。在软件工程的情况下,这意味着会说多种语言。我们永远不会指望木匠只用锤子,无论他/她正在建造什么。为什么对我们来说会有所不同?
这很普遍,但是请确保我们知道为什么要按自己的方式进行架构。
一个例子是游戏编程。在许多游戏中,性能至关重要的游戏引擎都是用C语言编写的,而关卡脚本之类的事情则是用Python,Scheme,本地语言或者其他语言完成的。
这意味着性能极客正在使用他们喜欢的语言进行工作,这为他们提供了所需的低级控制,而级设计人员可以使用无需担心内存管理等的高级语言进行工作。
@佐克曼
我有Jython和JRuby的经验,还有更多有关JRuby的经验。
我必须说它们是很棒的平台,我们将获得动态语言的巨大好处,加上Java丰富的3rd和1st party库支持,再加上高度独立于平台的基本编译语言,再加上这两种语言的垃圾回收(了解这一点很重要内存管理,但我建议我们最好避免使用它,除非我们真正需要它,例如我们正在做驱动程序或者内核级的工作,或者需要我们可以召集的每一盎司性能的工作)。
我只想简单介绍一下。我最近正在构建一个ruby脚本来为Solr实例建立索引,并且我需要访问DB2数据库(要建立索引的数据源)。 Straight Ruby惨遭失败...它具有可怕的DB2支持,需要完整安装的DB2 Express版本...仍然不能像宣传中那样工作(完成安装后,我无法编译Ruby驱动程序)。解决方案是只切换到JRuby并从Ruby端使用JDBC,使用几个易于安装的jar(比DB2安装大得多的小文件)。
我绝对会强烈建议考虑使用JRuby或者Jython而不是使用C作为后端...我发现算法和资源性能通常对应用程序性能的影响要比我们选择的语言大得多,而Java平台具有提供了这么多的东西(自从人们谴责它比C / C ++慢得多以来,它已经走了很长一段路)。除非我们要进行非常繁重的计算密集型工作,并且无法通过算法进行重构,否则无论我们选择哪种方式,我们都极有可能无需使用编译后的语言。
PS在JRuby中与Java的集成非常无缝(无论如何从JRuby到Java端),因此维护桥接不是问题。我认为Jython是一样的,但是我的经验却少了很多。
我只是重新阅读问题,关于使用C编写对性能至关重要的代码的建议。任何值得一提的动态语言都具有可让我们有效访问本机代码的工具。因此,首先要用动态语言编写整个内容。我们可能会发现我们根本不需要C。
但是,如果这样做,请中断探查器,仔细选择要优化的内容,然后继续进行。
值得注意的是,Gambit Scheme和Chicken(以及其他一些实现)在解释模式下运行,然后可以编译为C。
有些人认为我们程序员必须掌握太多的语言。他们认为增加一种语言是一件坏事。
SQL中的整个数据访问,HTML / CSS中的表示似乎是不可逆的。
XML有点累:有些人试图用XML做所有事情,好像XML具有使软件变得更好的神奇力量。
另外,由于使用多种语言,因此存在大量的冗余。所有的语言间绑定意味着事物被编写两次,每种语言编写一次。