一些应用程序是如何用多种编程语言制作的?

时间:2012-10-09 17:34:13

标签: c++

对于我来说,如何使用几种编程语言制作一些(网络,桌面)应用程序一直是个问题。例如,我听到(或读过)某些应用程序,如firefox,photoshop甚至amazon.com(当然是逻辑代码)都是用C ++编写的,或者说blah-blah app core是C ++。为了达到这一点,我想知道程序员如何集成一些编程语言或编写的模块来构建一个应用程序?究竟是什么意思?

提前致谢,

5 个答案:

答案 0 :(得分:4)

使用不同的技术或语言构建应用程序的不同部分可能是有意义的。一些原因可能是:

  • 特定组件的性能要求;因此,当其他组件从高级语言中获益更多时,使用低级语言可以提高开发人员的工作效率。
  • “最适合工作的工具” - 用于呈现表单的技术堆栈可能不适合处理数字。
  • 迁移旧版应用程序 - 如果您需要迁移大型代码库,那么迁移小部件而不是进行大型集成(那些往往会失败)是有意义的。

如果您使用的是可以在同一运行时环境中运行的两种不同语言,则组合可能很简单。例如,利用C#和F#程序集的.NET应用程序 - 或者链接了部件汇编代码的C应用程序。

然而,对于当今的大型应用程序,最常见的情况是通过服务或消息总线技术连接软件组件;将数据和事件从一个组件移动到另一个组件。进程外通信也可以像共享数据库或文件的两个组件一样简单。

答案 1 :(得分:1)

回答如何:

最终,必须将所有编译语言和脚本语言转换为给定计算机的本机代码才能执行。

编译器编程语言通常会在从源代码到可执行二进制文件的过程中经历几个转换阶段 - 而这一步就是二进制库。

现在,如果有一个标准化的ABI(应用程序二进制接口),这个级别可以标准化函数调用的方式(传递参数,堆栈行为等),那么就可以编译一组不同的语言来收敛在这个ABI上,并让链接器链接它们以生成一个可执行的二进制文件,该二进制文件由最初混合使用的各种语言组成。

但是,您不能只在给定平台上选择多种语言。为了支持这种方案,需要一个前端编译器收敛于这个公共后端。

脚本语言也可能对编译语言有所谓的“绑定”,允许它们以相同的方式集成,但是在运行时。

答案 2 :(得分:1)

Firefox和Photoshop具有语言绑定,并具有各种运行时插件,允许使用其他语言。这些是在可扩展性和易开发性更好的情况下,并允许第三方添加。

这方面的例子是:

  • Lua绑定
  • avascript bindings

您拥有亚马逊的另一个例子和混合语言允许他们的系统的分布式部分用在该特定领域更有意义的语言编写。这个部分需要很快的速度吗? C ++。是不是有很多逻辑,但你会招致很多回电?的NodeJS。在其他语言中,有很多问题可以解决得比使用Java或C ++更容易和更快。

如何做到这一点的例子:

  • 消息传递
  • 数据库
  • RPC调用
  • 远程API的

答案 3 :(得分:1)

如果你使用C ++,你实际上一直使用不同语言编写的程序,很可能。标准库中的许多功能(如operator new)都以Assmebly语言实现,以提高速度。

@driis已经解决了用不同语言编写的组件可以相互作用的两种主要方式。还有至少一个。

单个应用程序可以由以不同语言编写的多个组件组成。例如,我工作的一个程序包含用C ++编写的部分和用Assembly编写的其他部分。我曾经研究用FORTRAN + C编写的程序,甚至是VB和C ++(Ick,不好玩)。

这个想法在概念上很简单。您需要做的就是确保一方知道另一方的功能在内存中的位置,并且双方使用相同的calling convention进行呼叫。

调用约定是关于将哪些订单参数和返回地址推送到堆栈以及其他类似内容的协议。

获取功能的地址可以是小菜一碟到噩梦。例如,在Windows C ++ DLL中,它很容易。只需链接到.lib即可。让VB调用C或C ++函数有点棘手,因为VB不知道如何使用这些.lib文件 - 至少它在当天没有回来。你必须做一些棘手的事情,比如张贴的here。您必须直接加载DLL,然后指定一个指向函数地址的指针。

答案 4 :(得分:-3)

我会简单地回答。

考虑一个Web应用程序。它通常用HTML,Javascript,CSS和PHP编写。其中可能还有SQL。

我将假设您不需要我提供这种极其常见情况的代码示例,而是让您思考如何考虑此方案回答您的问题。 :)