我听说有人在一个项目中用多种语言编程。我无法想象这些语言之间如何相互作用。
我的意思是没有像
myProgram.callCfunction(parameters);
永远不会发生,还是我错了?
Answers:
在一个项目中使用多种语言实际上是很普遍的,但是背后的原理并不总是那么简单。
在简单的情况下,将不同的语言编译为相同的代码。例如,C和C ++代码通常被编译为机器汇编程序或C#,而VB.Net被编译为IL(.NET运行时可理解的语言)。
如果语言/编译器使用其他类型的系统,则会变得更加困难。可以有很多不同的方式,基本数据类型(例如整数,浮点和双精度)在内部表示,并且还有更多方式表示字符串。在不同语言之间传递类型时,必须确保双方将类型解释为相同,或者-如果不是,则将类型正确映射。这种类型映射也称为编组。
不同程序语言之间互操作性的经典示例如下(大部分来自Windows世界):
通常,任何大小合适的Web项目都将使用大约五种语言:HTML,CSS,Javascript,某种服务器端“完成任务”语言(ASP,JSP,带有Perl,PHP的CGI脚本等)以及某些变体SQL以实现数据库连接。
(当然,这是关于HTML和CSS是否可以算作编程语言的争论,这是我的手笔。我是“他们是,但不是图灵完备的语言”阵营,但这是另一个主题。 )
所有这些如何协同工作的一些示例:
如果要采用最佳实践路线,则网页的结构应使用HTML,而如何显示网页的说明应使用CSS(可以在同一文件中,但不一定要在同一文件中)。CSS包含一堆类,HTML引用了这些类,由浏览器决定如何一起单击它们。
更进一步,该页面上的所有JavaScript脚本都可以更改存在的任何HTML / CSS(更改HTML实体的内容,将一个CSS类换成另一个CSS类,更改CSS的行为,等等。 )通过称为“文档对象模型”的东西来完成,该对象本质上是一种语言和平台无关的API,以类似对象的方式操作HTML页面(这时我会慢慢退后,仅提供指向相关对象的链接维基文章。)
但是,所有的HTML / CSS / Javascript都来自哪里呢?这就是服务器端语言的功能。在最简单的形式中,serer端语言是一个程序,该程序返回包含HTML页面的巨型字符串作为其输出。显然,这可能变得更加复杂:HTML表单和查询字符串参数可以用作我们服务器端程序的输入,然后您就拥有了整个AJAX,JavaScript也可以直接将数据发送到服务器语言。您还可以从服务器语言可以自定义的HTML,CSS和Javascript中获得灵感-本质上,您有使用一种语言编写的程序,并用另一种语言编写了程序。
服务器端语言与SQL的连接原理大致相同。有很多方法可以使它更加复杂和安全,但是最简单的方法是让服务器语言使用SQL命令动态构建字符串,并通过某种连接器将其传递给数据库,然后返回结果集。(在这种情况下,您确实确实拥有一个归结为someValue = database.executeThisSQLCommand(SQLString)的函数。)
因此,要总结一下,在这种情况下,不同的语言要么通过实际相互编写程序进行通信,要么通过以每个人都可以理解的非常简单且易于解析的格式来传递数据。(主要是字符串)。
所使用的多种语言简称为“互操作性”或“互操作性”。
您的例子是错误的。Java可以调用C函数。
该语言提供了互操作性机制。
对于.NET,语言是作为CLI的一部分编译到IL中的。因此,任何.NET语言都可以互操作(定义的调用方法)以任何其他.NET语言定义的模块。
举个例子:
我可以在C#中定义一个方法
static void Hello(){ Console.WriteLine("Hello World");}
我可以从Python(IronPython)调用它
Hello()
并获得预期的输出。
一般而言,某些语言互操作性要好于其他语言,尤其是在语言作者专门使互操作成为语言功能的情况下。
多种语言可以与以下语言进行交互:
在几乎每种情况下,都必须先将任何通信转换为通用格式,然后才能进行交换(例外是同一运行时的语言)。这就是为什么在一个项目中很少使用多种语言的原因。
您可能有一个应用程序,其中大部分工作都是用Java完成的,但其中可能有一部分,例如数据解析器或用Python编写的东西或您拥有的东西。实际上,几乎有两个独立的应用程序,解析器可能只是在处理文件,然后您的Java主应用程序正在将它们用于某些事情。如果有人问我在这个项目中使用了什么,我会说“ Java和Python”。
在一个项目中可以使用多种不同的语言来使用多种不同的方法。我想到了两种主要的类别
只是添加到示例列表中,在C或C ++中优化Python代码或编写C库以将另一个库绑定到Python是相当普遍的。
Native COM components
?