我試圖找出真實世界應用程序開發的最佳實踐。我無法理解如何正確配置第三方庫作爲獨立軟件包進行部署。看起來,ASDF-INSTALL和ASDF旨在將庫安裝到家庭或站點,從而改變開發平臺的狀態。這很好,如果我正在開發一個服務器端應用程序,並且我想爲這個盒子上的整個CL安裝管理這些依賴關係。ASDF或其他獨立於家庭和網站配置的模塊系統
但是如果我想創建一個獨立的應用程序,通過安裝腳本進行部署,並在其自己的CL實例中單獨運行,該怎麼辦?我想避免更改任何其他應用程序的CL實例或目標系統配置(即覆蓋其他應用程序依賴的庫的其他副本)。在Java中,我所要做的就是創建一個包含這些庫的包含目錄並設置我的CLASSPATH。我如何在CL中獲得相同的隔離級別,假設我沒有安裝自己的CL運行時,而是使用系統上的內容?
對我來說,這是所有動態編譯/解釋語言的常見問題,因爲運行時的壽命比運行時運行的任何特定應用程序(即Ruby或Python)都要長,應用程序將共享相同的庫負載狀態。我對這些語言沒有任何經驗,所以最好的做法可能是讓我看着臉。
IDK如果這將是具體實現,但我正在運行Clozure CL。
編輯:
Ramarren:
我會檢查出Mudballs。謝謝。
安裝庫與我想要的相反,因爲安裝意味着修改主機系統狀態。我認爲關鍵一定在你最後一段。你如何創建啓動腳本來設置中央註冊表到一個孤立的目錄?是否可以使用ASDF-INSTALL將東西提取到所述目錄中?如果CL實現的基本映像不包含ASDF(Clozure默認具有ASDF,但CLISP如何實現),那麼如何引導整個事物呢?
我在開發團隊方面也在思考。在我創建一個新的CL項目存根並且對CVS或SVN進行初始提交之後,其他開發人員如何檢查它們的本地環境並使用它?即使假設每個人在其個人資料/網站啓動時都有ASDF,其他開發人員在他們的中央註冊表中可能有不同的庫集。我們不應該只爲了一起工作而同步工作。從Emacs/SLIME啓動一個CL運行時項目特定的實例並加載項目中指定的內容,不必多也不少。
如果有任何CL或任何其他語言的最佳實踐資源,我會很樂意推出我自己的解決方案並將其開源。
路易斯:
SAVE-應用是很好的部署,而不是爲多開發項目存根我概括。
編輯2:
vatine:
版本依賴正因爲如此,這是一個問題。如果我正在開發一個Perl或Ruby Web應用程序,那麼我可以依靠webadmin的存在來管理這些依賴關係。開發零售應用程序或Lisp是外來技術的中小型企業應用程序(我無法說服他們「技能化」IT組織來管理它),但這種方法是不可接受的。
我能夠昨晚種得到我想要的東西通過創建加載其自身的特定項目的ASDF實例的項目級.lisp文件,項目設置本地中央登記,並手動下載相關libs(沒有ASDF-INSTALL,這對於CLSQL和Weblock而言是一個痛苦的級聯依賴關係)。從開發工具的角度來看,它仍然不夠理想,因爲我必須從我的家和網站中刪除SLIME和Clozure本身的所有定製。另外,共享依賴關係也不能解決(CLSQL和Weblocks都使用MD5)。
Java具有類加載器隔離,這是它如何解決版本依賴性問題。然後還有一個單獨的問題,就是如何將你想要的庫放到項目中(la Maven)。前者是一個核心語言問題;後者與工具有關。我將一起修改一個SLIME擴展,它可以執行ASDF-INSTALL對項目包含的目錄(la Maven)所做的修改,並修改lib源代碼以攔截defpackage調用,以某種方式預先加載gensym字符串以強制隔離。我知道,這種方法存在很多漏洞,而且我對包規格知之甚少,無法知道我可以埋葬這種方案。
我對Python一無所知,但我確實知道存在零售級應用程序;我一直使用MusicBrainz Picard。我將研究Python如何實現它。