您为什么或不使用多语言解决方案?

时间:2008-09-17 18:27:51

标签: programming-languages polyglot

Polyglot或多语言解决方案允许您将语言应用于最适合的问题。然而,至少根据我的经验,软件商店往往希望将“超级”语言应用于他们试图解决的问题的所有方面。即使有另一种语言可以简单而自然地解决问题,坚持使用这种语言会变成“地狱或高水”。为什么或者你没有使用多语言解决方案?

6 个答案:

答案 0 :(得分:2)

我几乎总是在解决方案领域提倡超过1种语言(实际上,超过2种语言,因为SQL是这么多项目的一部分)。即使客户喜欢具有明确键入和大量人才的语言,我也提倡使用脚本语言进行管理,测试,数据清理等。

多语言的优势归结为“适合工作的正确工具。”

但是有合理的缺点:

  • 更难拥有集体代码所有权(并非所有人都精通所有语言)
  • 集成问题(托管平台减少)
  • 从基础架构库增加运行时开销(这通常很重要)
  • 增加工具成本(IDE,分析工具等)
  • 从一个切换到另一个时,认知“颠簸”。这是一把双刃剑:对于那些精通的人来说,不同的范式是相辅相成的,当一个问题出现时,通常有一个“但在X中我会用Z来解决这个问题!”问题迅速得到解决。然而,对于那些不太了解范式的人来说,当试图理解“这是什么?”时,可能会有一个真正的减速。

我还认为应该说,如果你要使用多种语言,我认为你应该选择采用截然不同的语言。我不认为你在解决问题方面获得了很多,例如,在一个项目中使用C#和VB。我认为除了主流语言之外,您还希望拥有一种脚本语言(小型和一次性任务的高效率)和认知风格严重不同的语言(Haskell,Prolog,Lisp等)。

答案 1 :(得分:1)

我很幸运能够在小项目中工作,有可能为我的任务提出合适的语言。例如,C作为低级语言,为高级/原型设计扩展Lua已经很好地工作,在新的嵌入式平台上快速上手。对于任何更大的项目,我总是更喜欢两种语言,一种特定于域的特定项目。它为快速尝试新功能增添了很多表现力。

然而,对于敏捷开发方法而言,这可能最适合您,而对于更传统的项目,要克服的第一个障碍是选择使用哪种语言,当脚本语言倾向于立即显得“新手”时,营销推动力较低或“严肃” “在他们的形象中。

答案 2 :(得分:1)

多语言解决方案的最大问题是涉及的语言越多,找到具有适当技能的程序员就越困难。特别是如果任何一种语言甚至有点深奥,或者来自完全不同的设计学派(例如 - 功能与程序与面向对象)。是的,任何优秀的程序员都应该能够了解他们需要什么,但是管理层经常需要能够“开始运转”的人,无论多么不切实际。

其他原因包括代码重用,不同语言之间的复杂性增加,以及特定代码应该属于哪种语言的不可避免的草皮战。

所有这些都说明了,许多系统都是设计上的多语言 - 任何使用数据库的东西都会有SQL以及其他语言。并且通常还涉及脚本,无论是实际代码还是构建系统。

几乎所有的专业编程经验都属于上述类别。通常有一种核心语言(C或C ++),不同程度的SQL,shell脚本,以及外围的perl或python代码。

答案 3 :(得分:1)

我的雇主的态度一直是使用有效的方法。

这意味着当我们找到一些有用的Perl模块(比如实现“Benford定律”,Statistics::Benford)时,我必须学习如何使用ActiveState的PDK

当我们决定在我们的项目中添加区间数学时,我必须学习Ada以及如何同时使用GNATObjectAda

当请求高速字符串库时,我不得不重新学习汇编程序并习惯MASM32WinAsm

当我们想要一个libiconv的COM DLL(基于Delphi Inspiration的代码)时,我重新认识了Delphi

当我们想要使用Bill Poser博士的libuninum时,我不得不重新学习C,以及如何使用Visual C++ 6的IDE。

我们仍在VB6VBScript中对原型进行原型设计,因为它们很擅长。

也许有时候我会最终在Forth,或者Eiffel,或者D,或者天堂帮助我,Haskell(我没有任何反对语言的东西,它只是一个非常不同的范例。)

答案 4 :(得分:0)

我遇到的一个问题是Visual Studio不允许在一个项目中混合使用多种语言,这迫使您将每种语言抽象为单独的DLL,这不一定是理想的。 / p>

我怀疑主要原因是认为在许多不同语言之间来回切换会导致程序员效率低下。有一些事实,我在JavaScript,C#,VBScript和VB.NET之间不断切换,当我从一种语言切换到另一种语言时,有一些时间浪费,因为我混合了我的语法。

尽管如此,还是有更多“多语言”解决方案的空间,特别是超越了使用JavaScript和任何后端编程语言。

答案 5 :(得分:0)

好吧,现在所有的网络都是多语言,后面是Java / PHP / Ruby,前面是JavaScript ...... 其他想到的例子 - 一个灵活的复杂系统,用低级语言(C或C ++)编写,内置高级语言(Python,Lua,Scheme),提供自定义和脚本界面。 Microsoft Office和VBA,Blender和Python。

一个可以用脚本语言完成的项目,例如Python,具有在C中完成的性能关键或操作系统相关的部分。

JVM和CLR都在使许多新的有趣的脚本语言兼容。 Java + Groovy,C#+ IRonPython等。