我听到一些人的程序在多种语言中的一个项目。我不能想象如何语言的相互作用。

我的意思是,没有Java样的方法

myProgram.callCfunction(parameters);

永远不会发生或是我错了?

有帮助吗?

解决方案

具有多种语言中的一个项目实际上是相当常见的,但是背后的原则不总是很简单的。

在简单的情况下,不同的语言编制的相同的代码。例如C、C++码通常被编入机器的汇编或C#VB.Net 编译成IL(该理解的语言。净运行时)。

它得到更多的困难,如果该语文/编译器使用不同类型的系统。可以有许多不同的方式,基本数据类型,如整数、浮动和双代表在内部,并有更多的方式来表示的串。在通类型之间的不同的语言,它必须确保双方解释的类型相同或--如果不是-这种类型是正确的映射。这种类型的映射是也被称为 编组.

经典的例子之间的互操作性不同的程序语言(多数是从窗户世界):

  • 各种语言提供。网平台.这包括C#VB.Net,J#如何从语言特性、F#,XSLT和许多其他不受欢迎的语言。
  • 地COM件C++编写或VB可以使用的一个巨大的各种语言:VBScript,VB,所有。网络语言、Java
  • Win32api职能可以被称为。网或VB
  • IPC(间进程通信)
  • Corba, 可能是最全面的(和最复杂的)的方法
  • 网络服务和其他服务为导向的架构,可能是最现代的方法

其他提示

一般来说,任何体面的中小型网络项目将使用大约五种语言:HTML,CSS,Javascript,某些类型的服务器的端"做事情"语言(ASP、JSP,CGI scripts with Perl,PHP,等等), 和一些变SQL数据库的连接。

(这当然是,手挥舞着走的说法是否HTML和CSS计数为编程语言–我就是",他们是,但不只是图灵完整的语言"营地,但是这完全是另外一个线程。)

一些例子如何将所有这些工作结合在一起:

如果你要的最佳做法的路线,该结构的一个网页是在HTML,并说明如何显示这是在CSS–这可能是在同一文件,但不是必须的。CSS包含了一堆类,其中HTML是指,这是由于浏览器的要找出如何击他们在一起。

把所有的更进了一步,任何javascript脚本在该网页上可以改变任何HTML/CSS存(改变的内容HTML实体,换出一个CSS类的另一种,改变行为的CSS,等等。) 它这样做是通过一些所谓的文件的对象模型,本质上是一个语言和独立于平台的API操作HTML网页中的一个目的方式(在这一点上,我会放弃缓慢而只是提供一个链接到 有关维基的文章.)

但后来,所有HTML/CSS/Javascript从何而来?这是什么服务器的端的语言。在最简单的形式,服务器侧语言是一个程序,返回一个巨大的string holding an HTML网页作为其输出。显然,这可以获得更加复杂:HTML形式和查询串的参数可用作输入服务器的端程序,然后你有整个阿贾克斯的事情那里的javascript得以直接将数据发送到服务器的语言。你也可以取得花哨的服务器用的语言可以自定义HTML,CSS和Javascript得到吐出来–基本上,你有一个程序在一种语言编写的程序在另一个语言。

服务器侧语言SQL连接工作。有很多方法来使它更加复杂和更安全,但最简单的方法是用你的语言服务器动态地建立一串SQL命令,一方面,数据库通过某种连接器,并且得到一个结果设定的。(这是一个情况下你真的没有一个功能,可以归结为。=数据库。executeThisSQLCommand(SQLString).)

所以要把这个包装起来,不同的语言,在这种情况下无论是通过实际的书面方案中各方,或者通过交的数据在很简单容易分析的格式,每个人都可以理解的。(Strings,主。)

在使用

多国语言被称为“互操作”或“互操作”的简称。

您例子是错误的。 Java可以调用C函数。

该语言提供互操作性的机构。

在.NET的情况下,语言都编译成IL作为CLI的一部分。因此,任何.NET语言可以互操作(通过定义呼叫的方法)中的任何其他.NET语言定义的模块。

作为一个例子:

我可以在C#定义的方法

static void Hello(){ Console.WriteLine("Hello World");}

和我可以在Python(IronPython的)调用它

 Hello()

和得到预期的输出。

一般来说,一些语言的互操作比别人好,尤其是在语言的作者明确提出了语言的互操作功能。

多种语言可以进行互动:

  1. 通过管道输入/输出(任何语言可以这样做 因为输入和输出必须通过必要性,以实现在每一个非的玩具 语言)
  2. 具有代码中的一种语言编制到一个地库 虽然其他支持调用司机代码。
  3. 通过一个回环网络连接。你可以 遇到的困难与防火墙干扰这种方式。
  4. 数据库。这些可以被认为是一种"通用"的数据 储存格式,因此可以访问的大多数语言 与数据库的扩展。这一般 需要一个程序完成的动作之前的下一个节目 可以访问该数据库。此外,所有的'通信'是 一般写入磁盘。
  5. 如果语言涉及运行在相同的运行时间(即.净, JVM),然后你一般可以通过象数据从一种语言 直接向其他与小小的阻抗.

几乎在每一种情况下,必须将任何通信以一个共同的 格式之前,它可以交换(唯一的例外是语言上的 同样的运行时)。这就是为什么多种语言很少使用,在一个 的项目。

我在这是由(在最后计数)约8种语言的大型企业项目。大多数通信是通过其中包含多种语言打入和传递数据来回绑定企业级消息总线。这就是所谓的 TIBCO

您可以有其中的大部分工作是用Java做一个应用程序,但也有可能是它的某些部分,如可能数据分析器或东西是用Python写的或你有什么。近两个独立的应用程序真的,也许解析器只是做对文件的一些工作,然后你在Java中的主要应用程序使用他们的东西。如果有人要问我什么,我在这个项目中我会说使用“Java和Python。”

有许多不同的方法可以使用不同语言中的一个项目 有两个主要类别,我想

  1. 使用不同的语言一起为建立一个应用程序。例如使用Java建立GUI和使用JNI访问C API(所以回答你的问题你可以打电话C职能从Java;))
  2. 使用不同的语言一起的一个项目,但它们不是部分的相同应用程序。例如。我目前正在iphone上应用程序,已经使用了大量的文本。我目前正在使用三种语言Python(工作与origanal来源的文字),SQL(以把结果的蟒蛇的应用程序在一格式很容易适合残疾人从iphone sqlite3api)和Objectiv C建立实际的应用程序。即使最终产品将仅仅是客观C我用另外两种语言得到最终产品

有各种不同的方法,多种语言,可用于在一个项目。一些例子:

  • 你可以写一DLL,说,C,然后使用那个图书馆从,也就是说,一个VB程序。
  • 你可以写一个服务程序中,说C++,并有很多不同的语言实现的客户。
  • 一个网络项目经常使用很多种语言;例如服务器节目,编写说,Java(一种编程语言),其中提取数据库中数据的使用SQL(查询语言),结果发送到浏览器在HTML(a标记语言),其用户可以与使用Javascript(脚本语言)...

这取决于项目的类型。如果您想尝试,你可以建立一个web项目,在.NET中,并逐页基础上改变语言的网页上。它不工作,你在你的伪代码显示,但它是多国语言。当然,实际的代码目录必须是一种语言。

有几个,其中在语言代码可以直接交互的方式。只要代码之间传递的数据是正确的格式,在比特和字节级,那么有什么理由不同的语言不能互操作。这种方法是在传统的Windows DLL开发使用。即使在不同的平台上,如果你能得到正确的格式(看大/小尾数如果有兴趣),将工作,只要你的连接器(未编译)知道如何加入代码放在一起。

除此之外存在其中的语言可以互相交谈许多其他方式。在.NET世界代码被编译成IL代码,这对于每一种语言相同,以这种方式C#,VB.Net都引擎盖下相同的,并且可以调用/工作彼此无缝连接。

严重。如果没有迫切需要,坚持一个单一的语言。你越来越依赖和复杂性。但是当你有现有的代码提供有趣的功能,它可以更容易地把它粘起来,而不是重新创建它。

刚要添加到的实例列表中,这是相当常见的C或C来优化Python代码++或写一个C库到另一个库绑定到Python。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top