代码之家  ›  专栏  ›  技术社区  ›  dacracot

你为什么不使用polyglot解决方案?

  •  3
  • dacracot  · 技术社区  · 17 年前

    polyglot或多语言解决方案允许您将语言应用于它们最适合的问题。然而,至少以我的经验来看,软件商店倾向于在他们试图解决的问题的所有方面应用一种“超级”语言。即使有其他语言可以简单自然地解决问题,坚持使用这种语言也会带来“地狱或高潮”。你为什么不使用polyglot解决方案?

    6 回复  |  直到 13 年前
        1
  •  2
  •   Larry OBrien    17 年前

    在一个解决方案空间中,我几乎总是提倡多于1种语言(实际上,由于sql是许多项目的一部分,所以多于2种)。即使客户喜欢一种具有显式类型和大量天赋的语言,我还是提倡使用脚本语言进行管理、测试、数据清理等。

    许多语言的优点归结为“适合工作的工具”。

    但也有一些合理的缺点:

    • 很难拥有集体代码所有权(不是每个人都精通所有语言)
    • 集成问题(在托管平台中减少)
    • 增加了基础设施库的运行时开销(这通常很重要)
    • 增加的工具成本(IDE、分析工具等)
    • 从一个到另一个的认知“颠簸”。这是一把双刃剑:对于那些深谙此道的人来说,不同的范式是互补的,当一个范式出现问题时,常常会有一个“但在x中,我会用z来解决这个问题!”问题解决得很快。然而,对于那些不太熟悉范式的人来说,当理解“这是什么”时,会有一种真正的减速。

    我还认为应该说,如果你要使用多种语言,在我看来,你应该使用具有显著不同方法的语言。我认为,在解决问题方面,比如说,在一个项目中同时使用c和vb,并没有什么好处。我认为除了你的主流语言之外,你还需要一种脚本语言(对于小任务和一次性任务来说效率很高)和一种认知风格截然不同的语言(haskell、prolog、lisp等)。

        2
  •  1
  •   jjrv    17 年前

    我很幸运在小项目中工作,能够为我的任务推荐一种合适的语言。例如,c作为一种低级语言,在一个新的嵌入式平台上,将lua扩展到高级/原型设计中已经取得了很好的效果。对于任何更大的项目,我总是喜欢使用两种语言,一种特定于特定领域的语言适合于特定的项目。它为快速尝试新功能增加了很多表现力。

    然而,这可能对敏捷开发方法最有帮助,而对于一个更传统的项目来说,首先要克服的障碍是选择使用哪种语言,这时脚本语言往往会立即看起来像是“新来者”,在他们的形象中没有那么大的市场推广力或“严肃性”。

        3
  •  1
  •   Zathrus    17 年前

    polyglot解决方案的最大问题是,涉及的语言越多,就越难找到具有适当技能集的程序员。尤其是如果任何一种语言甚至有点深奥,或者来自完全不同的设计流派(例如,函数式与过程式与面向对象)。是的,任何优秀的程序员都应该能够学习他们所需要的东西,但是管理者通常希望有人能“一帆风顺”,不管它多么不切实际。

    其他原因包括代码重用,不同语言之间接口的复杂性增加,以及不可避免的争夺某一特定代码位所属语言的地盘。

    尽管如此,要意识到许多系统在设计上是多语言的——任何使用数据库的系统都会有SQL和其他语言。而且还经常涉及到脚本编写,无论是针对实际代码还是针对构建系统。

    我几乎所有的专业编程经验都属于上述范畴。通常有一种核心语言(C或C++)、不同程度的SQL、shell脚本,以及可能的一些Perl或Python代码。

        4
  •  1
  •   bugmagnet    17 年前

    我老板的态度一直是用有用的东西。

    这意味着当我们发现一些有用的 Perl 模块(比如实现“本福德定律”, Statistics::Benford ,我必须学会如何使用activestate的 PDK .

    当我们决定在我们的项目中添加区间数学时,我必须学习ada和如何使用两者 GNAT ObjectAda .

    当需要一个高速字符串库时,我必须重新学习汇编程序并习惯于 MASM32 WinAsm .

    当我们想要一个 libiconv (基于Delphi Inspiration的代码),我重新熟悉了 Delphi .

    当我们想用比尔·波瑟医生的 libuninum ,我不得不重新学习 C ,以及如何使用 Visual C++ 6的IDE。

    我们还在做原型 VB6 VBScript 因为他们很在行。

    也许有一天我会在福斯,艾菲尔,或者D,或者,上帝保佑我,哈斯克尔(我没有任何反对这种语言的东西,只是 非常 不同的范例。)

        5
  •  0
  •   foxxtrot    17 年前

    我遇到的一个问题是visual studio不允许在一个项目中混合多种语言,这迫使您将每种语言的内容抽象成单独的dll,这并不一定是理想的。

    然而,我怀疑主要原因是人们认为在许多不同语言之间来回切换会导致程序员效率低下。这是有道理的,我经常在javascript、c、vbscript和vb.net之间切换,当我从一种语言切换到另一种语言时,当我稍微混合我的语法时,会浪费一些时间。

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

        6
  •  0
  •   MK.    13 年前

    所有的Web都是多语言的,现在Java和PHP/Ruby在前面,JavaScript在前面… 想到的其他例子是一个灵活的复杂系统,用低级语言(C或C++)用嵌入式高级语言(Python,Lua,Stand)编写,提供定制和脚本接口。Microsoft Office和VBA、Blender和Python。

    可以在脚本语言(如Python)中执行的项目,其性能关键或依赖于OS的部件在C.完成。

    jvm和clr都得到了许多新的有趣的兼容脚本语言。java、Groovy、C语言等。