一個程式只能用一種程式設計語言嗎?
來源:互聯網
上載者:User
如果不是,多語言間如何協作?原理是什嗎?
回複內容:
一套系統可以由多個語言編寫,跨語言程式協作的方式也有很多種。
比如可以管道協作,一個模組的輸出作為另一模組的輸入。比如可以用 Python 編寫 MapReduce 任務,放到 Java 編寫的 Hadoop 叢集上去執行。Java 代碼負責資料分發任務調度,Python 代碼負責處理。
比如可以共用儲存。比如用 J2EE 編寫 Web 應用程式,資料庫用 MySQL, 後台指令碼用 Python 執行。
或者可以使用 RPC, 比如利用 Thrift, 服務端用 Java, 用戶端用 Python 調用。
再比如說用一種語言開發另一種語言的擴充模組,比如用 C 開發 Python/Java 的擴充。
--------
但是,對於團隊來講,使用多語言一定要確保內部有充足的資源。每種語言要有一個專家層級的程式員,負責排解疑難雜症,還要有主程角色,保證代碼能夠得到妥善的維護和及時更新。這些條件不是所有團隊都都能具備的。
缺乏了這些條件而硬上多語言,相對“冷門”的語言就會成為這個團隊的效率殺手。
首先,可能沒有人知道該語言大量必備的實踐經驗。比如妥善的組織代碼,生態系統裡常用的資源等。造成代碼混亂沒人 Review,重複造輪子嚴重,錯誤排查進展緩慢,系統不穩定等等;
其次,可能沒有資源該語言準備功能相同的內部基礎庫、構建軟體源,使得“冷門”語言構建緩慢,必要功能長期得不到同步;
最後,最嚴重的,維護中斷。相關人員離職,遺留代碼成了接手人員負擔,不論是現學新語言還是用熟悉的語言重構都要浪費大量精力。如果離職人員本身還是這個語言的半吊子,程式寫的糟爛,所花時間還要加倍。
所以,多語言混合雖然聽起來酷酷的,但是作為團隊一定要根據成員的技能棧量力而行。有一種東西叫做連結器。它讓我們可以混合很多東西。
例如二進位手打的機器碼,平台上的組合語言,C++,C,D語言,Objective-C,Fortran等等的源檔案,它們的產物(目標檔案)都可以連結在一起形成一個程式。
當然除此之外還有一些技術。例如動態代碼執行,或者只是解釋執行,動態裝載,或者通過各種IPC機制溝通各個組件,以及JavaBean/COM這樣的技術等等。古有連接器,今有Web API。如果是處理資料 或者統計
我認為熟練使用 Excel 就可以快速解決很多問題了
如果還不夠 可以學 Excel 的宏命令
其實 Excel 在統計功能上比資料庫還更靈活一些呢
很多時候我們提高效率不僅僅是通過自學程式實現的
我們可以藉助工具 已有的瀏覽器外掛程式 甚至exe小應用
程式有自己的規則 也並不是可以幫你解決任意問題
超出規則的問題 你還是要自己解決啊,這是一個混合編程的問題。
答案是,一個程式可以由任意多語言編寫,只要你能使用某種方式使得它們能夠互相通訊。不是。
語言都可以協作。
想學程式員就學,不過想解決一些電腦上的重複勞動學一些指令碼語言就好。更簡單。可以多語言協作。
一般兩種方式:
1)語言間直接調用。這種方式語言支援,一般進階語言都可以直接調用c/c++這類低級語言的庫,你看swig這個開源項目,可以為c/c++產生很多進階語言的綁定。低級語言調用進階語言,可以通過內嵌解析器來實現,c語言調用lua指令碼特別方便。進階語言之間互相調用,一般得要通過低級語言粘合。
2)ipc機制。通過asn,proto,json,xml這類語言獨立的描述語言,藉助系統的ipc機制,很容易實現。看看apache thrift這個開源項目,之前facebook貢獻出來的。沒有啊,現在用cocos2dx寫遊戲就用的是C++和Lua不一定。VS可以一堆語言一起上。
當年還不知道怎麼用pascal執行exe的時候我這麼幹過:bat建立迴圈,先執行pascal程式,負責輸入輸出,pascal程式末端輸出一個新的bat檔案,然後結束。新的bat被老的bat調用,運行,然後再執行一個pascal程式。迴圈往複,然後把這堆東西用winrar打包自解壓〜當年覺得自己很偉大的樣子。最顯而易見的例子,嵌入式SQL,在很多很多種語言中都會用到 ~_~