这是一个问题,我一直想知道的答案,但从来没有真正要求。

怎么代码写一种语言,特别是解释性语言,那称为代码写的汇编的语言。

例如,说我写一个游戏在C++和我外包一些AI行为被写在方案。怎么代码写在方案得到的一点是使用C++编码?它是如何使用C++源代码,以及它是如何使用C++编码?是有区别的方式使用它?

相关的

如何多种语言的互动,在一个项目?

有帮助吗?

解决方案

没有单一的答案的问题,工作无处不在。在一般情况下,答案是,两种语言必须同意在"东西"--一个设置或规则,或者一个"调协议"。

在一个高水平的任何协议需要指定三件事:

  • "发现":如何找到有关各方。
  • "链接":如何使连接(后他们知道关于每个其他)。
  • "调用":如何实际的请求。

详细信息在很大程度上取决于协议本身。

有时候两种语言凑到一起工作。有时将两种语言的同意支持一些外部义的协议。这些天来,操作系统或"运行环境"(.净和Java)经常参与。有时候的能力,只有一种方式("一个"可以叫"B",但"B"不能叫"A")。

请注意,这是同样的问题,任何语言面临当与操作系统。Linux内核不是写在方案,你知道的!

让我们看看一些典型的答案来自世界的窗口:

  • C用C++:C++使用一种扭曲的("损坏")的变化的"C议定书"。C++可以叫到C,C可以调用C++(虽然名称可能会相当混乱,有时它可能需要外部帮助翻译名)。这不只是窗;这通常是真正的所有平台的支持。最流行的操作系统使用一个"C协议"。

  • 维生素b6与大多数语言:维生素b6的优选方法是"COM议定书"。其他语言都必须能够编写COM对象可以使用从维生素b6.维生素b6可以产生COM对象了(虽然不是每一个可能的变化COM对象)。

    维生素b6也可以跟一个非常有限的变化的"C协议",那么只要打电话外:它不能创建的对象,可以交谈,直接通过的"C议定书"。

  • .网络语言:所有。网络语言沟通,汇编相同的低级语言(IL)。运行管理的通信和从这一点来看,他们都看起来像同一种语言。

  • VBScript与其他语言:VBScript只能帮你一个子集COM协议。

一个更加注意:肥皂"网服务"是一个真正的"调协议",以及,如其他许多基于网络的协议,都越来越受欢迎。毕竟,这是所有关于谈话代码写在一个不同语言(和运行在不同的框在那!)

其他提示

典型地,C ++代码将调用的脚本语言的解释器。编译和脚本代码之间相互作用的程度取决于解释,但总是有办法在二者之间传递数据。根据不同的解释器,它可以是能够从对方操纵在一侧上的对象,例如C ++函数调用Ruby对象上的方法。甚至有可能从其他控制一个的执行的方式。

有一个协议为如何模块进行通信。这里是一个高层次、广泛概述它如何工作:

  1. 图书馆是为了代码你想分享.这些通常被称为Dll或SOs取决于您的平台。
  2. 每个功能你想让(进入点)将提供给外面的世界结合。有协议如何结合,如呼吁《公约》指定了参数是通过了,谁负责清除堆,许多参数,获得储存在登记册和哪些,等等。见cdecl,的,等于实例的呼吁公约 在这里,.
  3. 叫模块将静态或动态地结合的共用图书馆。
  4. 一旦你叫库的共用图书馆然后,它可以指定它希望结合到一个特别的入口点。这是一般的名字,但是大多数平台也提供的选择结合的指数(更快、更脆如果你的模块改变和入境点重新排序).
  5. 你还会一般声明的功能你想要呼叫你的模块这样的地方,你的语言可以做的的静态型的检查,知道什么叫《公约》等。

为方案的呼吁方案C++,该计划翻译最有可能出口的一个函数,动态地结合的方案功能/目的,并呼吁。如果的方案模块的编制,这可能是有选择的出口的一个入口点所以你C++模块可以结合。我不是很熟悉方案使其他人可能可以回答的具体细节,特别是结合得更好。

您也可以在两种环境集成,而无需编译您的可执行文件中解释的图书馆。你把你的exe文件和EXE方案为您的系统上独立的程序。从你的主要exe文件,你可以写你的计划代码到一个文件,然后使用系统()或者exec()来运行方案解释。然后,解析方案解释器的输出。

在上面的方法建议保持前男友分开,你不必担心第三方的依赖,他们可以显著。也问题保持包含在一个EXE或另一个。

如果运行单独的EXE不能满足您的性能需求,你可以设计一个协议,其中计划解释成为一个服务器。你需要写一些计划函数等待一个套接字或文件输入,EVAL该输入,然后将结果输出到同一个插座或一个不同的文件。这样做的另一个迭代是看可能已经运行您解释现有的服务器,例如Apache在模块,允许在许多语言进行编写的代码。

如果你实际上是在寻找工具做这样的事情,一拉亚当的反应,见痛饮

从理论的角度来看,当节目A需要从节目B使用的资源(类/功能/等),它是关于在一些信息传递从A到B,并得到一些信息发回或执行的一些动作。因此,需要有由乙方提供的方式,让一个在信息传递和获取结果。

在实践中,它通常位于语言的肩部来处理这个过程:语言B(节目B被写入)将生成的协议,并在B上可用的资源中预先定义的方式,那么语言A(节目A被写入)将提供一些实用程序/框架,以帮助祈求的暴露的资源,并获得下列结果B的协议。

要更具体地你的问题,为解释语言,这个过程是相当普遍的,该协议通常为命令行参数,HTTP请求和传输纯文本的其它方式的线中。采取的第一个例子中,节目B将接收来自作为输入HTTP请求一个呼叫,然后处理从那里该请求。输入的实际格式完全由程序B.决定

像SOAP和等东西,仅仅是调节程序采取输入在一个共同商定的标准方式。

这是一个十年左右的时间,但我确实做到了这对我的高级顶点(好吧,我建在C背propogating神经网络,并使用计划程序,教它)。计划我所用的版本有一个编译器,以及一个intepreter,我是能够建立其作为.o文件。我不知道我正在运行方案的版本,但它出现在RScheme会变成你的方案代号为C。

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