Kubernetes YAML不是而且從來沒有宣告式程式設計!- Archis Gore

banq發表於2019-11-18

宣告式基礎結構的承諾使每個人都感到驚訝,“ 宣告您想要的,而不用擔心它會如何發生 ”,最終似乎最終陷入了半生熟的 冗長 笨拙的模板中。
我們將“靜態配置”與“宣告式程式設計”混淆了,Kubernetes YAML不是,而且從來沒有宣告式程式設計!這是不可思議的營銷竅門,因為銷售推銷帶來了所有的宏偉之處。
Kubernetes是一個靜態配置的系統。80年代的DOS檔案 .ini ;90年代的/etc/*.conf檔案;現在是Kubernetes的YAML。
當我們使用kubectl apply以富麗堂皇的雄心壯志向KV儲存編寫一串字串時,相信我們正在做“宣告性”的事情。
在Kubernetes所謂的“組合語言”之上編寫“高階語言”與使用正規表示式編寫C一樣有意義。
即使Kubernetes是核心,YAML也不是組合語言,因為它缺少The Language。Kubernetes資源模型將是一種不存在的語言的“ Registers ”。它們實際上只是資料常量,甚至不是暫存器。
您知道可以使用自己喜歡的程式語言(Javascript,C#,Lua,Elm,Ballerina等)編寫正規表示式庫。您可以用正規表示式編寫自己喜歡的程式語言嗎?
現在將組合語言與Java,Javascript,C#,C ++,Elm,Go,Rust等進行比較。您可以使用其他任何一種編寫這些語言。
區別在於:組合語言不是“更小語言”,而是“更低層的語言”。它可以做其他人可以做的所有事情-不多也不少。

在Kubernete所謂的“組合語言”之上編寫“高階語言”與使用正規表示式編寫Java一樣意義

您想要的是一個宣告式系統+語言=>宣告式程式設計!

宣告式程式設計既不是新手,也不是必須解決行星級問題才能使它有用。如果您被Declarative Infra所吸引,希望以可重複,可移植且一站式的方式描述完整的應用程式,那麼您想要的就是:純度/冪等,引數和閉包。
Kubernetes向您保證是一種宣告性組合語言,但是給您了資料暫存器

指令式程式設計為您提供了比模板更好的抽象,但是它仍然不理解它們-您仍在表達希望生成資料的方式,而不是總體目標。
有一個更好的方法!有一種編寫程式的宣告式方法,其中謂詞是命令式程式中的迴圈和條件。關係是命令式程式中的功能。事實就是命令式程式中的資料。斷言就是命令式語言的測試。可參考Prolog

點選標題見原文,原文提出了真正宣告式Kubernetes應該是什麼樣

 

相關文章