回覆列表
-
1 # Java進階架構師
-
2 # 蟲蟲安全
語言互相呼叫的問題,到程式執行層就是程序間通訊的問題,因為一個程式執行的時候,對os來說就是一個或者多個程序。
linux間程序通訊的方法linux間程序通訊的方法主要有管道、命名管道、網路套介面socket以及unix system v ipc通訊機制訊息佇列、訊號量和共享記憶體。詳細原理就不多贅述。
管道
命名管道fifo
訊息佇列
windos下程序通訊的方法windows有自己一些特有的通訊機制,我們也列一下:
剪貼簿、動態資料交換dde
物件連結於嵌入ole
動態連結庫dll、win32 rpc呼叫
netbios函式和wm_copydata訊息
語言嵌入除了以上方法外,有些語言還支援用一定的方法嵌入其他語言,比如在perl、python、ruby等教本語言中嵌入部分c語言以提高演算法效能。
這類方法很多,我們簡單舉個python呼叫c的例子把。
一個累加程式
我們編譯為sum.so,然後透過python呼叫執行。
無非就是一套自己的關鍵字,語法,語義....這玩意根本不存在所謂的互相呼叫的說法,需要呼叫(應該說是協作配合的)是業務邏輯。由於種種原因,有些業務功能我們需要用不同的語言編寫對應軟體,然後讓他們寫作。所以承載業務邏輯的工作單元,才是呼叫的主語。這個工作單元有時是程序,有時只是一個記憶體中的資料結構。
當工作單元是程序時其實本質就是各種程序間通訊的方案。
當工作單元是記憶體中資料結構時本質就是如何進行動態連結庫的呼叫
當然,工作單元內部間的協作也是可以的比如說,執行程式碼直接解釋某些指令碼語言
這麼說,懂得不?