Programming languages 在一个项目中使用多种语言

Programming languages 在一个项目中使用多种语言,programming-languages,language-design,complexity-theory,Programming Languages,Language Design,Complexity Theory,从我对语言设计的讨论来看,似乎很多人都认为没有,也永远不会有“一种真正的语言”。根据这些人的说法,另一种选择是熟悉几种语言,并为这项工作选择合适的工具。这在整个项目或大型子项目的级别上是非常有意义的,这些子项目只需要通过一个非常狭窄、定义良好的接口与项目的其余部分进行交互 另一方面,当试图优雅地解决许多小的子问题时,使用许多不同的语言似乎是一件非常尴尬的事情。换句话说,IMHO,通用语言,在任何方面都是合适的,仍然很重要。举个简单的例子,假设您需要执行以下操作: 从文件中以某种任意格式读取一组数

从我对语言设计的讨论来看,似乎很多人都认为没有,也永远不会有“一种真正的语言”。根据这些人的说法,另一种选择是熟悉几种语言,并为这项工作选择合适的工具。这在整个项目或大型子项目的级别上是非常有意义的,这些子项目只需要通过一个非常狭窄、定义良好的接口与项目的其余部分进行交互

另一方面,当试图优雅地解决许多小的子问题时,使用许多不同的语言似乎是一件非常尴尬的事情。换句话说,IMHO,通用语言,在任何方面都是合适的,仍然很重要。举个简单的例子,假设您需要执行以下操作:

  • 从文件中以某种任意格式读取一组数据。检查它是否有错误等(最好使用Perl之类的工具)
  • 将这些数据加载到矩阵中,对其执行一系列核心矩阵运算(最好在类似Matlab的程序中完成)
  • 在其上运行一个自定义的计算密集型例程,该例程必须快速且节省空间(最好使用C或C++)
  • 这是一个相当简单的项目,除了编写计算密集型自定义矩阵处理例程之外,关于使用哪种语言的唯一好答案似乎是一个通用的、在任何方面都不错的语言


    我错过了什么?如何有效地使用多种语言来利用它们各自的优势?

    我曾参与过许多包含多种语言的项目。除非是.NET项目,否则您通常在不同的层或不同的过程中使用这些不同的语言。也许你的webapp是用PHP编写的,而你的应用服务器是用java编写的。因此,在方法级别上并不是真正的“混合匹配”

    在.NET和一些java vm语言中,规则有点变化,因为您可以更自由地混合。但是这些语言的特性主要是由类库定义的,类库是常见的。因此,在.net中切换语言的动机通常是由其他因素驱动的,例如开发人员知道哪种语言。实际上,F#提供了许多特定于该语言的语言特性,因此在.NET中似乎有点例外。一些JavaVM语言还向标准java库添加了方法,添加了java中不可用的特性


    实际上,只要所有语言都有良好的IDE支持,您就已经习惯了使用多种语言。如果没有这些,我真的认为我会迷失方向。

    像Lua这样的嵌入式语言使这变得非常简单。Lua是一种与Ruby或Python类似的优秀动态语言,允许您快速开发高质量代码。它还与C紧密集成,这意味着可以利用C/C++库,并通过在C或C++中编写性能关键部分来优化性能。
    在科学计算中,有一个脚本也很常见,例如,它将在Matlab中进行一些数据处理,使用Perl重新格式化输出,然后将其传递到另一个用Matlab、C或其他语言编写的应用程序中。但是,与从头开始开发应用程序相比,集成由不同人员编写的应用程序时,这种情况更为常见。

    考虑一下任务中最困难的部分。解析文件是最复杂的部分吗?一种用于读取文件并对其进行操作的好语言可能是最合适的选择

    数学变换是最难的部分吗?你可能想学习它并使用matlab,用脚本或其他自制工具输入它

    表演是最重要的部分吗?相对于转换和解析,将进行多少计算?如果90%的工作都是在计算上,而其他部分只是暂时的,那么考虑C/C++解决方案。 在一个简单的解决方案中发挥多种语言的优势并没有本质上的错误,特别是如果您不介意用脚本将其粘合在一起的话。但是,集成的语言和模块越多,依赖性就越大,分发和维护应用程序就越困难。这就是真正的取舍所在:运行应用程序所需的技术、库和软件越少,它就变得越简单。应用程序越简单,就越容易维护、分发、调试和使用


    如果您不介意集成多个技术的额外开销,或者该开销将为您节省同等或更多的开发时间,请直接进行。

    我认为这很好。如果您将它设置为一个n层设置,其中每个层以相同的方式访问它下面的内容(SOAP/XML/COM等),我发现它最终是不可见的

    例如,我会为前端选择一种简单、快速、灵活的语言,可以对不同的接口(如com、corba、xml、.net、自定义dll库、ftp和自定义事件网关)进行多种调用。这确保您可以轻松地调用或与任何其他lanugage交互

    我为此选择的工具是使用ASP/PHP/Java的Coldfusion和一点Ruby。它似乎把一切都放在一个地方,非常简单。对于您的特定情况,COldfusion将允许您编译自己的库标记,您可以在web代码中调用它。在标签中,你可以放置所有你喜欢的c代码,并让它做任何你想做的事情

    Coldfusion有免费和开源版本,它非常适合从一个代码库进行Java和.NET调用。看看吧,我真的觉得它可能是最合适的,因为它是为这些类型的公司解决方案而设计的

    我知道PHP在这方面也很好,这取决于你的情况,我很高兴