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

时间:2009-01-27 20:33:22

标签: programming-languages language-design complexity-theory

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

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

  1. 从文件中以任意格式读取一堆数据。检查它是否有错误等(最好用Perl之类的东西)。
  2. 将这些数据加载到矩阵中,在其上做一堆硬核矩阵运算(最好用Matlab之类的东西完成)。
  3. 在其上运行一个自定义的,计算密集的例程,必须快速且节省空间(最好用C或C ++完成)。
  4. 这是一个相当简单的项目,除了编写计算密集型的自定义矩阵处理例程之外,关于使用什么语言的唯一好答案似乎是一个在所有方面都体面的通用语言。

    我在这里缺少什么?如何有效地使用多种语言来利用他们的每一种优势?

6 个答案:

答案 0 :(得分:3)

我参与了很多项目,这些项目包含了各种各样的语言。除非是.NET项目,否则通常在不同的层或不同的进程中使用这些不同的语言。也许您的webapp在PHP中,而您的应用程序服务器在java中。所以你并没有真正在方法层面“混合搭配”。

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

只要所有语言都具有良好的IDE支持,您实际上已经习惯于使用多种语言。没有它,我真的认为我会迷失。

答案 1 :(得分:1)

像Lua这样的嵌入式语言让这很容易。 Lua是一种非常棒的动态语言,可以使用Ruby或Python,可以快速开发高质量的代码。它还与C紧密集成,这意味着您可以利用C / C ++库并通过用C或C ++编写来优化性能关键部分。

在科学计算中,有一个脚本例如将在Matlab中进行一些数据处理,使用Perl重新格式化输出然后将其传递到用Matlab,C或其他任何东西编写的另一个应用程序中也是很常见的。但是,当集成由不同人员编写的应用程序时,这种情况往往比从头开发某些东西时更常见。

答案 2 :(得分:0)

考虑任务中最困难的部分。解析文件是最复杂的部分吗?阅读文件,然后操纵它们的好语言可能是最相关的选择。

数学变换是最困难的部分吗?你可能想要吸收它并使用matlab,用脚本或其他本土工具提供它。

性能是最重要的部分吗?与转换和解析相比,将进行多少计算?如果90%的工作都是在计算上,而其他部分只是暂时的,那么考虑一下C / C ++解决方案。

在一个简单的解决方案中使用多种语言优势并没有什么本质上的错误,特别是如果你不介意将它与脚本粘合在一起。但是,您集成的语言和模块越多,依赖性越高,依赖性越多,分发和维护应用程序的难度就越大。这就是真正的权衡所在:运行应用程序所需的技术,库和软件越少,它就越简单。应用程序越简单,就越容易维护,可分发,可调试和可用。

如果您不介意集成多项技术的额外开销,或者开销会为您节省相同或更多的开发时间,请继续。

答案 3 :(得分:0)

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

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

我选择的工具是使用ASP / PHP / Java和一些Ruby的Coldfusion。它似乎在一个地方拥有它并且非常简单。对于您的具体情况,COldfusion将允许您编译自己的库标记,您可以在Web代码中调用它。在标签内部,您可以放置​​您喜欢的所有C代码,并使其随心所欲。

有Coldfusion的免费和开源版本可用,它非常适合从一个代码库中天真地编写Java和.NET调用。看看它,我觉得它可能是最适合这种公司解决方案的。

我知道PHP对你来说也很不错,这取决于你的情况,我确信Asp.net也不会落后太多。

答案 4 :(得分:0)

我在多种语言中的工作只涉及C#和C ++ / CLI的简单组合(如果你还没有听说过,就像C ++和.NET一样)。我认为值得一提的是.NET和Visual Studio允许您将多种不同语言组合在一起的方式意味着您在组合两种语言时不会像通常期望的那样具有高开销 - Visual Studio保留所有语言一起。鉴于有许多不同语言的.NET克隆 - 例如F#,IronPython,IronRuby,JScript.NET - Visual Studio是一种非常好的方法,可以将各种语言组合在一起。

在技术层面听起来像你感兴趣的,在Visual Studio中完成的方式是你必须为每个单独的语言都有一个项目,并且每个项目都被编译成一个程序集 - 基本上意味着它变成了一个用于其他项目的库。你将有一个主要项目驱动一切,并调用其他库。每种不同语言的要求必须是一个不同的项目意味着您不会在方法级别更改语言,但如果您正在做一个足够大的应用程序,您可以在逻辑上将它分成多个项目,它实际上可能非常有用。特别是,分离和抽象可以使整体更容易。

答案 5 :(得分:0)

你说这些选择要么是a)用一种语言写所有东西而失去效率,要么b)拼凑一堆不同的可执行文件,以便为工作的每个部分使用最好的语言。

大多数工作程序员选择选项c:尽可能使用IT部门在生产中支持的语言。一般来说,程序员在特定的框架(例如JVM或CLR)中有一些有限的语言选择 - 所以它既不是工具箱乌托邦也不是单语言贫民窟。

即使LAMP和Rails支持(需求,实际上)不同级别的不同语言 - 在Rails的情况下,HTML,Javascript,Ruby,C。如果你正在编写软件服务(这些日子里大多数有趣的工作正在发生),那么你几乎不会用一种语言写作。但你的选择也不是无限的。