C++ “一种语言是怎样的?”;“有约束力”;与现有图书馆沟通?

C++ “一种语言是怎样的?”;“有约束力”;与现有图书馆沟通?,c++,node.js,C++,Node.js,我试图理解到另一种语言的绑定(端口)通常是如何工作的,但为了帮助澄清我的问题,我将使用一个名为(Sass编译器的C/C++实现)的项目的直接示例。 还有一个项目 这是Node.js与libsass的绑定 >假设这是“代码>节点SASS/CODE >是一个JavaScript程序,它运行在NoDEJS上,NoDEJS作为代理转发指令到 LIbsass< /Cult> C++系统级程序。p> 我的问题是:NoDEJS编译器如何与LIbsASS C++应用程序进行对话?是用插座吗 子问题:如果节点

我试图理解到另一种语言的绑定(端口)通常是如何工作的,但为了帮助澄清我的问题,我将使用一个名为(Sass编译器的C/C++实现)的项目的直接示例。
还有一个项目 这是Node.js与libsass的绑定

>假设这是“代码>节点SASS/CODE >是一个JavaScript程序,它运行在NoDEJS上,NoDEJS作为代理转发指令到 LIbsass< /Cult> C++系统级程序。p>

我的问题是:NoDEJS编译器如何与LIbsASS C++应用程序进行对话?是用插座吗


子问题:如果
节点sass
通过初始化可用于您自己的节点脚本的对象、函数等,在节点环境中公开了一个API,那么根据定义,这是“绑定”吗

>P> C++库部分是因为它实际上是一个库而不是一些服务器程序,不是自己运行的,也不是在监听某个套接字。如果C++朱鹭在C++程序中使用,它也会集成在这个程序过程中,而不会在其他地方运行。p> 许多语言都内置了访问本机C语言API的能力,包括(C是语言互操作性的事实标准,例如,因为每一个稍微重要的操作系统也主要由C组成)。关于C++和Vc,在C++中编写一些东西并提供C接口并不困难。p> 在这种情况下,语言绑定通常只不过是将复杂的本机访问部分封装在目标语言中更易于使用的东西中

由于评论的原因,需要进一步阐述:

操作系统本身有函数(用于C程序)可以动态加载C库,获取它们的特定函数并调用它们,而在编译C程序时不知道库和函数的名称(例如,您可以制作一个C程序,要求用户输入库名称,然后使用…)

独立于此,每种语言要么是以一种方式生成的,即程序被编译成包含CPU指令等的“真实”程序,这些程序可以直接执行(例如:C),要么该语言的程序是以某种其他格式生成的,但却是“真实”的每次启动都需要一个程序来帮助OS/CPU理解应该做什么(例如:Javascript、Java……如果没有安装帮助软件(如浏览器或JRE),就不能单独运行程序)


对于第二种类型,helper软件可以利用操作系统的lib加载功能,如果JS/Java程序包含这样做的指令。。。(对于第一个“real”类型,由于它们使用相同的二进制格式(是的,这是简化的),因此会自动给出与C libs的某种程度的兼容性)

一个“程序”将作为它自己的进程运行;一个库通常被加载到同一个进程中。我看到这个特殊的项目是一个库——但是我通常认为,一个程序移植到-是一个程序或一个服务本身。C++对这个问题的确有点小。“C/C++”是两种语言。当然,C++有一种与C绑定的语言,但正如这个问题所示,Node.js也是如此。我们也不谈论“C/Node.js”。啊,好的,谢谢,所以基于C/C++的操作系统提供了一种更高级别的环境,C/C++程序可以使用本机调用进行交互?这是否也意味着套接字更适合于不共享相同基础语言的程序和运行服务,例如,如果Java应用程序需要与基于C的程序通信?@user4668401请参阅编辑后的答案。不,Java中也不需要套接字;Java也有本地访问的可能性。