關於Cold的結構和模組載入機制(上)

2022-09-13 01:48:09 字數 813 閱讀 7129

來自本人部落格:

這幾個月一直在鼓搗的cold框架,在自己的思考和借鑑了一些已有框架的方法後,算是有些成果了。嘗試先寫點小結,作為階段性的鞏固,因為**越寫越多,連自己都有些看不懂了。

在開始理清cold的結構前,有幾個關鍵的問題:

這裡有三個術語:模組的檔案路徑,模組名,模組物件。其中模組名是唯一標識模組的主鍵,模組物件是在記憶體裡命名空間中安排的位置,檔案路徑則是檔案的物理位置,用於引用檔案。

因此乙個模組的元資料可能如下:

;
這樣在宣告和使用乙個模組時,開發者需要分別指明這個模組的名稱,路徑,和模組物件,既容易衝突、難以記憶,而且需要多餘的檔案進行管理儲存,這是我不喜歡的。

比如我宣告了另乙個模組dialog時,其依賴於模組dragable,那麼理想的**如下:

define('dialog',,function());
define在得到dialog的依賴項dragable後,並不知道dragable在哪,也不知道dragable在什麼命名空間下,需要去別的檔案中找到這個關係才能進行引用。因此cold框架希望能夠將這三個名稱進行統一,本質上是模組定義的單一性。上面提到了我理想的模組依賴模型:開發者只需要在一處地方定義新的模組,只需要提供乙個統一的模組識別符號,在他的定義**中能夠做完所有的事,不需要重複定義和儲存。模組依賴模型需要處理兩個問題:遞迴依賴和迴圈依賴。

遞迴依賴,即模組a需要模組b,模組b需要模組c,形成一條a—b—c的依賴鏈。在這種情況下,c的定義**必須先執行,然後是b,然後是a,而檔案載入的順序則可以隨意。

迴圈依賴,即模組a需要模組b,模組b又需要模組a,這樣就形成了無窮依賴,實際上是乙個邏輯錯誤。

原始碼:測試檔案:

模組的編寫 編譯 載入和解除安裝

以最簡單的hello world模組為例 1.編寫模組 my module.c include include include static int hello init void static void hello exit void module init hello init module e...

linux驅動模組的載入和解除安裝

linux 驅動有兩種執行方式,第一種就是將驅動編譯進 linux 核心中,這樣當 linux 核心啟動的時候就會自動執行驅動程式。第二種就是將驅動編譯成模組 linux 下模組擴充套件名為.ko 在linux 核心啟動以後使用 insmod 命令載入驅動模組。在除錯驅動的時候一般都選擇將其編譯為模...

skin vb中關於頁面中模組載入的原理

主要工作都在page init實現 1。首先載入controlpanel ctlpane.controls.add objcontrolpanel 2.isadmincontrol true 本質就在於ctl null 或者 moduleid null 就載入module主頁面。主頁面和其他頁面的區...