![]() |
VOOZH | about |
這位開發者已經創建了一個只需要很少量代碼的操作。你不相信麼?看文章你就能夠了解這些信息。
一個模塊化的作業系統只有一項工作:動態加載並初始化已經安裝的模塊。優先級!除了這個簡單功能外,你的作業系統所做的其他,都是作業系統設計中使單片機成為臃腫軟體的系統。
以下5行代碼,就可以跑起來,這是Hyperlambda作業系統的最小代碼量,就可以讓你做到這一點。
以上代碼首先列出 /modules/目錄中的所有文件夾,然後用名字叫startup.hl的程序列出這些文件夾中的文件。這個程序就是一個初始化文件,然後加載列表的文件,接著進行評估和執行這些文件。
這樣允許我們將新的模塊或組件複製到作業系統的/modules/文件夾中,將它放在我的/modules/文件夾中,則作業系統立即擁有這些組件賦予的新功能。平均安裝並啟動我作業系統的啟動時間通常是幾百毫秒。
因為Hyperlambda的核心功能是動態調用功能,通過引用「函數」(實際上是Active Events)作為簡單的字符串。模塊和模塊之間不會創建靜態的依賴的關係,但仍允許我們的所有模塊可以調用其他任何模塊的函數。它還允許我們通過簡單的創建具有相同名稱的函數,使新函數能夠輕鬆替換已經有的函數實現,且不會破壞現在的用法。我甚至可以改變我的「函數」簽名,通常是返回值,以及它們的整體實現,但是不會去破壞現有的組件,這樣就可以實現函數應用的「多態性」,而不需要任何繼承、接口或OOP。
上面的代碼實際上就是我的作業系統。還不相信?請看如下代碼:
可以看到,我在當前代碼中加入了三行代碼。這是因為我經常想在其它組件初始化時使用「micro」和「desktop」模塊,以使代碼保持乾淨。不過,我仍然可以刪除或「卸載」這兩個模塊,這不會破壞到作業系統的核心代碼,這相當於function{}式的函數調用。
事實上,我也可以使用相同的代碼來創建Web或桌面級作業系統,這些都可以。理論上說,我可以交換兩個簡單的C#程序集,可以是現有的Hyperlambda代碼創建的WinForms或Xamarin應用程式,因此我們可以為WinForm應用程式使用相同的代碼庫。
雖然如此,我不建議你這樣做。我連結到上面的文件,動態加載並初始化這些模塊。每個模塊實際上從單個角度來看都是無關緊要的。我的一些模塊用來創建Ajax Widget,例如模式窗口,樹視圖控制項,菜單控制項等,其它模塊本身就是整個應用程式和應用程式套件。
要創建自己的模塊只需要建一個文件夾和一個名為「startup.hl」的文件,這樣就可以擴展為自己的作業系統,這與我們以前用來創建庫或COM模塊的方式類似。
以下是我預先安裝的一個「模塊」的截圖,這是一個完整的基於Web的IDE。
為了記錄,我可以通過簡單地創建一個類型為[hyper-ide.widgets.ide]的「小組件」來將我的整個IDE實例化,此時我可以重用整個IDE,就好像它是一個C#「UserControl」。
可以將「模塊」存儲在MySQL中,因為Hyperlambda畢竟只是一種文件格式,它不關心你的存儲位置。此時,你的「加載文件」調用必須與「從資料庫加載」調用進行交換。
但是,作業系統實際上只有5行代碼,準確的說是8行。
想玩一個只包含8行代碼的作業系統嗎?它是開源的,你可以在這裡找到它。