用2种语言编写程序?

时间:2009-12-11 06:00:25

标签: programming-languages

程序可以用多种编程语言编写吗?我在The Daily WTF上看到的东西似乎暗示大公司/组织在构建大型应用程序时使用了几种不同的语言。这是如何运作的?我知道通过使用Django,动态网页经常与一堆不同的语言(控制器的Python,视图的HTML + Django的模板语言和模型的SQL)放在一起,但是程序< / em>,即在编译时会变成.exe的东西?

12 个答案:

答案 0 :(得分:3)

如果不同语言的编译器可以生成相同格式的目标文件,则链接器不关心从编译的语言。

或者,您可以从任何语言编译.dll,它的工作原理相同。

答案 1 :(得分:3)

虽然不是很常见但有可能。所有语言最终都被编译为汇编语言,因此只要每种语言使用相同的ABI(调用约定等),就可以将用不同语言编译的模块链接在一起。但这并不常见。

此外,许多程序使用扩展语言。例如,“魔兽世界”中的大部分用户界面都是用Lua扩展语言编写的,即使核心WoW程序可能是C ++。

答案 2 :(得分:3)

是的,你当然可以用一种以上的语言编写程序。你需要做的是模块化程序。例如,将模块写为DLL。只要DLL之间的接口很常见,就可以为每个DLL使用不同的语言。

我正在开发一个已经开发超过8年的程序。该程序是在几年前用C ++开发的。今天,它的.NET。通过构建COM对象来执行模块化。这允许我们为同一应用程序使用各种语言和技术。我拥有的最古老的代码是基本的vanilla C,最新的代码是C#3.5。

答案 3 :(得分:3)

使用不同的语言和技术构建大型应用程序是很常见的。混合语言有不同的方式。

首先,来自不同语言的编译器可以生成可以链接在一起的兼容输出。这可以是来自C,C ++,Pascal和其他编译为本机代码的语言的.obj文件。或者可以是.NET程序集 - 您可以毫不费力地使用任何其他.NET系列语言程序集中使用任何.NET系列语言编写的程序集。

然后,有各种互操作技术。您可以将一些代码包装为COM对象,并使用其他语言从应用程序中使用。或者,您可以将不同语言的代码放入不同的程序中,并通过RPC之类的进程间通信技术进行通信。在后一种情况下,他们根本不关心其他过程是如何工作的 - 他们只发送和接收消息 - 就像你不关心你的浏览器和你从中读取页面的网络服务器很可能是用不同的语言编写的。 / p>

答案 4 :(得分:1)

简短回答是,答案很长:

是,通过执行以下一项或多项操作:

  1. 构建库并在编译时将它们链接在一起。
  2. 构建动态库并在运行时链接到它们,这样你就有了一个exe和一些dll。
  3. 对于像.net这样的框架,只要框架支持该语言,它就不重要,因为它将在相同类型的代码中编译,或者框架将知道如何运行它。 / LI>

答案 5 :(得分:1)

以上答案(我到目前为止看到的)都是正确的。其他未提及的是公司/组织定义“大型应用程序”与程序员有时不同。

对于医疗服务,医院医疗信息系统是一个“大型应用程序”,即使它实际上涉及一堆不同的Web服务器,数据库,用于集成各种第三方产品的各种自定义脚本,特别编写的客户端程序用于放射诊断,医生和护士的不同网络界面,以及上传结果时寻呼医生的SMS系统等。

换句话说,如果您认为“大型应用程序= 1大二进制”,组织可能会认为“大型应用程序=一个大型IT合同的名词,无论涉及多少二进制文件”。

答案 6 :(得分:0)

是的,当然。在带有.NET的Windows中,您可以在同一个生成的程序集/ DLL中使用C#,VB和C ++,因为这些都会生成IL对象代码。

在Windows或其他平台(Unix,Linux)上编译为本机时,许多编译器以标准/共享格式生成目标文件。在这种情况下,链接器可以轻松地将它们组合到共享库,静态库或最终运行时(Unix术语中的a.out或ELF二进制文件)。

这通常是因为不同的程序员有不同的偏好,并且因为一些语言结构有助于更好地描述特定类型的解决方案。

答案 7 :(得分:0)

大多数编程语言都有与C接口的方法。当应用程序由多种不同的语言组合在一起时,可以通过为每个不同的组件创建C接口并连接C接口来完成,或者不同的组件可以实际上是编译成单独的应用程序,使用套接字或其他形式的进程间通信相互通信。

答案 8 :(得分:0)

在编程的石器时代附近,当所有内容都是用汇编语言编写时,编译语言就出现了。在经历了一些痛苦,悲伤和岁月之后,我们毫不犹豫地承认,用FORTRAN这样的“高级语言”编写应用程序的至少某些部分是一件好事。但是许多模块仍然在汇编中,其中包含FORTRAN没有做好的事情,例如CPU技巧,微小的代码空间要求等。

在我在20世纪80年代工作的单个应用程序中,我们开发了FORTRAN,PL / M,8086汇编和C.语言选择是由历史动力和不断改进的编译器和构建工具驱动的。

答案 9 :(得分:0)

今天你不可能只用一种语言逃脱。

看看Adobe。所有流行的Adobe产品现在都包含越来越多的Lua脚本。他们从Lightroom开始,现在技术业务策略是用C / C ++ / Assember编写基本例程(你需要这个用于快速SSE图形),所有的GUI都与Lua粘在一起。

答案 10 :(得分:0)

是的,可以做到。更常见的是,不是因为目标语言没有某个特征,或者所述特征更容易用另一种语言执行。

答案 11 :(得分:0)

性能是在单个应用程序中混合语言的另一个原因。在解释型语言中,速度可能比C / C ++慢几个数量级。应用程序可以使用C / C ++编写CPU密集型部分,同时将大部分程序逻辑保留在更高级别的语言中,以便在性能和编程方面获得最佳效果。