首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在开发一个产品或软件时使用多种编程语言?

为什么在开发一个产品或软件时使用多种编程语言?
EN

Software Engineering用户
提问于 2018-04-29 12:23:14
回答 9查看 44.9K关注 0票数 120

我是一个刚毕业的学生,打算开始我的计算机科学硕士课程。我遇到了多个真正吸引我的开源项目,并鼓励我为它们做出贡献(CloudStack、OpenStack、moby和Kubernetes等等)。我发现其中的一个共同点是使用多种编程语言(如Java + Python + Go或Python + C++ + Ruby)。我已经看过另一个问题,它涉及如何使多种编程语言相互通信:如何用两种不同的语言进行两种不同的程序交互?

我想了解促使企业使用多种编程语言的需求。什么样的需求或需求类型使软件架构师或项目负责人说,“我建议我们对任务1使用X语言,对任务2使用Y语言”?我似乎无法理解为什么在同一个产品或软件中使用多种编程语言。

EN

回答 9

Software Engineering用户

发布于 2018-04-29 13:00:24

许多项目不是用多种编程语言构建的。然而,使用其他语言的脚本来辅助软件是很常见的。

  • 作为单独程序的管理工具有时是用不同的语言编写的。
  • 库和API经常为多种语言提供绑定,这样开发人员就可以使用他们喜欢的任何语言。
  • 构建脚本和相关开发脚本通常使用专门语言。
  • 应用程序的端到端测试不需要使用同一种语言。

有几个项目确实在应用程序中使用多种语言,例如,可以在脚本语言中集成插件的低级语言的核心。在某些生态系统(如JVM或.NET)中,所使用的精确语言并不太重要,因为同一语言运行库上的多个语言具有良好的互操作性。例如,我可以用Scala编写一个使用现有Java库的项目,并将脚本功能与Groovy集成起来。

如果一个项目由多个工具组成,这些工具也可以用不同的语言开发。虽然一致性很好,特别是对于开源项目来说,可用的开发工作可能是一个瓶颈。如果有人愿意开发一个有用的工具,但不熟悉主要语言,也许这个工具比一致性更有价值。

票数 29
EN

Software Engineering用户

发布于 2018-04-29 19:00:57

我可以举一个例子,一个已经运行了32年的编程项目,它似乎还有很多生命。它是商业的而不是开源的。

核心是用特定于领域的语言编写的,专门为项目创建。这证明非常有用,特别是因为它将回滚集成到基本体系结构中,但它编译成C代码,然后我们用平台的编译器编译C代码。在这段时间里,它支持了大约20个平台,不包括32位和64位的变化,目前有6个平台。

它有一个附加的,用C++编写的,它是在项目的一位前任负责人确信C++/MFC/Windows/x86将取代所有其他架构和平台时开始的,因此有必要提供C++工作,以便能够雇用工作人员。事情并没有象他预期的那样发生。

除了域语言和C++之外,开发人员使用LISP工作,LISP用于编写测试用例,使用嵌入在测试工具中的解释器。我们曾经考虑过用Java代替LISP,但幸运的是我们没有。

它还有一个用C#编写的主要API的包装器。这是在客户要求时完成的,这样他们就可以用C#重写他们的应用程序了。它是由Perl脚本创建的,它读取API的C头文件,加上一个重要的配置文件,并为包装器编写C#代码。用Perl做所有的文本处理要比在C++中做要容易。

它有自己的构建系统,并且需要它们,因为域语言不适合基于构建的系统。UNIX类平台的版本是用shell脚本、Perl和域语言中的一些小程序编写的。Windows平台是用批处理语言、Perl和域语言中相同的小程序编写的。旧的VMS构建系统是用DCL编写的,但已经有十多年没有使用过了。

在领域语言的编译器中有一些YACC/Bison编程。这里有一些用Objective++编写的苹果平台测试代码。团队的一些内部网站(用于项目管理,而不是交付品的一部分)是用ASP编写的,还有一些是用Perl编写的CGI脚本。

从根本上说,这是一个解决难题的项目,因此创建专门的工具是值得的,这些工具似乎仍然比任何其他可用的工具更适合这项工作。团队认为编程是一种在某种程度上独立于所使用的语言的技能,所以他们愿意使用一种新的语言,如果它能使任务变得更容易的话。然而,时尚并不是他们的首要任务之一,所以他们不会无缘无故地引入一种新的语言来分解一项任务。

这个代码的功能是数学建模,在工作站和服务器上使用(如果我不识别产品,我可以说得更自由一些)。目前约有2500万LoC,团队总数约为50人。

票数 20
EN

Software Engineering用户

发布于 2018-04-29 16:06:22

在某些情况下,您需要使用一个工具(例如OS的UI工具包),它最容易从给定的语言中访问。例如,在iOS和macOS上,如果您想使用UIKit和AppKit编写GUI应用程序,用Swift或Objective编写是最快、最简单的方法。(可能有其他语言的绑定,但它们可能隐藏在您正在构建的最新OS版本中,因此可能不会提供所有功能。)

因此,通常情况下,当应用程序是跨平台的时候,应用程序的核心逻辑是用一种两种语言都可以访问的语言编写的,而UI/OS特定的部分则是用他们自己使用的任何语言编写的。

因此,如果要编写Windows和macOS应用程序,可以用C++编写核心逻辑,并在Windows上使用C#作为UI,在macOS上使用Swift实现UI。这可以节省时间,因为您不需要编写两次核心逻辑,也不需要处理两个应用程序中不同的错误集,但它也允许真正的本地用户界面,它不能满足平台间的最低公共分母,比如使用跨平台的UI库。

票数 16
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/370135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档