2015-08-23 28 views
2

我試圖瞭解綁定(端口)到另一種語言的工作方式,但爲了幫助我澄清我的問題,我將使用名爲libsass(Sass編譯器的C/C++實現)的項目的直接示例。
還有另一個項目node-sass 這是Node.js綁定到libsass。語言「綁定」如何與現有庫進行通信?

我假設這意味着node-sass是一個運行在nodej上的javascript程序,nodejs充當代理向libsass C++系統級程序轉發指令。

enter image description here

我的問題是:如何做的intepreter的NodeJS 「對話」 的libsass C++應用程序? - 它使用套接字嗎?

子問題:如果node-sass通過初始化可用於您自己的節點腳本的對象,函數等在節點環境中公開了一個API,這是否是「綁定」?

+0

'程序'會像自己的進程一樣運行;一個庫通常被加載到同一個進程中。 – user2864740

+0

啊我看到這個特定的項目是一個圖書館 - 但通常我會認爲一個程序被移植到 - *本身就是一個程序或服務? –

+0

這個問題真的很少有C++。「C/C++」是兩種語言。當然,C++有一個綁定到C的語言,但正如這個問題所示,Node.js.也是如此。我們也不會談論「C/Node.js」。 – MSalters

回答

3

C++庫部分是,因爲它實際上是一個庫,而不是某個服務器程序,它本身並沒有運行,也沒有監聽某個套接字。如果在C++程序中使用C++庫,它也會集成到此程序過程中,而不會在其他地方運行。許多語言都有內置的可能性來訪問本地C語言API,包括Node.js(其中C是語言互操作的事實標準,例如,因爲每個稍微重要的OS也主要由C組成)。關於C++ vs C,用C++編寫一些東西並不難,並提供一個C接口。

在這種情況下,語言綁定通常只不過是將複雜的本地訪問部分包裝在更易於在目標語言中使用的東西中。

爲了進一步闡述,因爲評論了一下:

本身所具有的功能的OS(在C程序中使用)來加載C庫上的蒼蠅,讓他們的具體功能,並呼籲他們,沒有當編譯C程序時lib和函數的名字是已知的(例如,你可以創建一個C程序,要求用戶輸入一個lib名稱,然後使用它...)。

與此不同的是,每種語言都是以程序編譯爲包含CPU指令等的「真實」程序的方式編寫的,這些程序可以直接執行(例如:C),或者語言程序但是每一次啓動都需要一個「真正的」程序來幫助OS/CPU瞭解應該做什麼(例如:Javascript,Java ......如果沒有輔助軟件,你就不能單獨運行一個程序像瀏覽器或JRE一樣安裝)。

對於第二種類型,輔助軟件可以利用操作系統的lib加載功能,並且如果JS/Java程序包含這樣做的指令......(對於第一個「真實」類型,a由於它們使用相同的二進制格式(是的,簡化了),因此與C庫的某種程度的兼容性會自動給出。)

+0

嗯,好的,謝謝,所以基於C/C++的操作系統提供了一種更高級別的環境,C/C++程序能夠使用本地調用進行交互?這是否也意味着套接字更適合於不共享相同基礎語言的程序和運行服務,例如如果一個Java應用程序需要與基於C的程序進行通信? –

+0

@ user4668401請參閱編輯答案。不,你也不需要Java中的套接字; Java也有本地訪問的可能性。 – deviantfan

+0

很好的解釋。非常感謝! –