我在一个项目中听到一些人用多种语言编程。我无法想象语言如何相互作用。
我的意思是没有类似
的Java方法myProgram.callCfunction(parameters);
永远不会发生或我错了吗?
答案 0 :(得分:26)
在一个项目中使用多种语言实际上很常见,但其背后的原理并不总是很简单。
在简单的情况下,不同的语言被编译为相同的代码。例如,C和C ++代码通常被编译成机器汇编程序或C#,VB.Net被编译成IL(.NET运行时理解的语言)。
如果语言/编译器使用不同类型的系统,则会变得更加困难。可以有许多不同的方式,基本数据类型(如整数,浮点数和双精度数)在内部表示,并且还有更多方法来表示字符串。在不同语言之间传递类型时,必须确保双方都解释相同的类型,或者 - 如果不是 - 正确映射类型。这种类型映射也称为marshalling。
不同程序语言之间互操作性的经典示例(主要来自Windows世界):
答案 1 :(得分:14)
一般来说,任何大小合适的Web项目都会使用大约五种语言:HTML,CSS,Javascript,某种服务器端“完成任务”语言(使用Perl,PHP等的ASP,JSP,CGI脚本),以及用于数据库连接的SQL的一些变体。
(当然,这是关于HTML和CSS是否算作编程语言的争论 - 我是“他们是,但只是不是图灵完整的语言”阵营,但这是一个整体其他线程。)
所有这些如何协同工作的一些例子:
如果您要使用最佳实践路线,则网页的结构采用HTML格式,并且有关如何显示网页的说明在CSS中 - 可能位于同一文件中,但不必是。 CSS包含一堆HTML所引用的类,由浏览器决定如何一起点击它们。
更进一步,该页面上的任何javascript脚本都可以改变任何存在的HTML / CSS(更改HTML实体的内容,将一个CSS类替换为另一个,更改CSS的行为,以及通过称为文档对象模型的东西来实现这一点,文档对象模型本质上是一种语言和平台无关的API,以类似对象的方式操作HTML页面(此时我会慢慢退回并提供一个链接到relevant wiki article。)
但是,那么所有的HTML / CSS / Javascript都来自哪里?这就是服务器端语言的作用。在最简单的形式中,serer端语言是一个程序,它返回一个包含HTML页面作为输出的巨型字符串。显然,这可以变得更加复杂:HTML表单和查询字符串参数可以用作我们服务器端程序的输入,然后你就可以获得整个AJAX,javascript也可以将数据直接发送到服务器语言。您还可以看到服务器语言可以自定义吐出的HTML,CSS和Javascript的位置 - 实际上,您可以使用一种语言编写另一种语言的程序。
SQL连接的服务器端语言大致相同。有很多方法可以使它更复杂和更安全,但最简单的方法是让您的服务器语言动态构建一个带有SQL命令的字符串,通过某种连接器将其传递给数据库,然后返回结果集。 (这种情况下你确实有一个归结为someValue = database.executeThisSQLCommand(SQLString)的函数。)
因此,为了将其包装起来,在这种情况下,不同的语言通过实际相互编写程序进行通信,或者通过以非常简单易于解析的格式处理数据,这是每个人都能理解的。 (主要是弦乐。)
答案 2 :(得分:8)
使用的多种语言简称为“互操作性”或“互操作性”。
你的例子是错的。 Java可以调用C函数。
该语言提供了互操作性的机制。
对于.NET,语言作为CLI的一部分编译到IL中。因此,任何.NET语言都可以互换(调用由其他任何.NET语言定义的模块)。
举个例子:
我可以在C#中定义一个方法
static void Hello(){ Console.WriteLine("Hello World");}
我可以从Python(IronPython)中调用它
Hello()
获得预期的输出。
一般来说,某些语言的互操作性比其他语言更好,特别是如果语言作者专门制作互操作语言的特征。
答案 3 :(得分:5)
多种语言可与以下内容互动:
几乎在所有情况下,您都必须将任何通信转换为通用 格式可以交换之前(例外是语言) 相同的运行时)。这就是为什么很少使用多种语言的原因 项目
答案 4 :(得分:2)
我在一个大型企业项目上工作,该项目由(最后一次)大约8种语言组成。大多数通信是通过企业级消息总线实现的,该消息总线包含多种语言的绑定,可以来回接入和传递数据。它被称为tibco。
答案 5 :(得分:1)
你可以拥有一个应用程序,其中大部分工作都是用Java完成的,但可能有一些部分,比如数据解析器或用Python编写的东西或者你有什么东西。实际上几乎是两个独立的应用程序,也许解析器只是在文件上做一些工作,然后你在Java中的主应用程序正在使用它们。如果有人问我在这个项目中使用了什么,我会说“Java和Python。”
答案 6 :(得分:1)
在一个项目中,有许多不同的方法可以使用不同的语言 想到两个主要类别
答案 7 :(得分:1)
有多种方法可以在一个项目中使用多种语言。一些例子:
答案 8 :(得分:0)
这取决于项目的类型。如果要进行实验,可以在.NET中设置Web项目,并逐页更改语言。它在您的伪代码中显示不起作用,但它是多种语言。当然,实际的代码目录必须是单一语言。
答案 9 :(得分:0)
语言中的代码可以通过多种方式直接进行交互。只要代码之间传递的数据格式正确,位和字节级别,就没有理由不同的语言不能互操作。这种方法用于传统的Windows DLL开发。即使在不同的平台上,如果你可以得到正确的格式(如果感兴趣的话可以查看大/小端),只要你的链接器(不是编译器)知道如何将代码连接在一起,它就会起作用。
除此之外,还有许多其他语言可以互相交流的方式。在.Net世界中,代码被编译成IL代码,对于每种语言都是相同的,这样C#,VB.Net在引擎盖下都是相同的,可以无缝地相互调用/协作。
答案 10 :(得分:0)
严重。如果没有迫切需要,坚持使用单一语言。您正在增加依赖性和复杂性。但是当你有现有的代码提供有趣的功能时,将它粘合在一起比重新创建它更容易。
答案 11 :(得分:0)
只是添加到示例列表中,在C或C ++中优化Python代码或编写C库以将另一个库绑定到Python是相当常见的。