天天看點

一種開發釋出合一,語言問題合一的shell programming式應用開發設想

本文關鍵字:最簡單的程式設計模式,具體app具體開發,将開發局限在具體app級,demo as engine

在我們前面,為了ease程式設計複雜度和去斷層化,我們從xaas聊到langsys,devops tools,domainstack,涵蓋衆多,我們提到雲化程式應該與雲容器一起考慮,開發與部署一體,才能可能達到更自然的類本地API導出+api sync的分布式,我們還提到很多語言,比如terralang,還提到很多devops tools,我們其實都有一個錯覺,以為程式設計的複雜性來自于語言,系統,這實際是對的,可又有失全面限制我們的認識面。—— 因我們始終沒有考慮進對問題的了解,因為程式設計即抽象,是涉及語言,平台,問題,人全面四者的,平常我們總是把它們當成是語言的附屬 —— 一些庫級的語言附屬品,問題總是被抽象成某語言的可複用庫,業界從來都沒有關于它的獨立考量和成套的技術,但實際上跳出這些,做綜合全觀,往往會有意想不到的認識,比如我們發現: —— 具體問題域可以與具體app綁定。而app級,可以有具體語言綁定,作開發釋出。而這是一種更為正宗的“應用程式設計”,有完整的xaas,langsys,app,people的生态,而且更強大。

較之目前,xaas,langsys這類基礎工具往往做得不夠親和,它們對擡高程式設計入階的影響也就越大的現實。。如果把這種開發獨立出來成為一支,使之主動無縫對接前二者。另辟新徑,整個程式設計會顯得尤為更簡單,比如,它免部署,甚至不需要用到通用語言這種難懂的東西。

這篇文章将綜合描述這種可行的案例。

為什麼shell programming是最簡單強大的programming

在我們使用os的最初,我們使用C系作應用開發,同時作為一個開發者,自己還敲打一些指令行,進行一些運維級的操作和淺層shell開發。CUI和GUI的使用分開了運維和普通使用者。shell程式設計用類似配置的方法提出了第一種程式設計方式 —— 這些都是我們現在經常做的事。可是稍微一想就會覺得很分裂:為什麼C語言用指針file* 來抽象檔案,CPP可以用FILE file,它們抽象程式設計的方法都用了與它們的簡元,語句這些直接的基礎設施,而shell可以直接操作一個檔案,不用類型指代,這源于一個傻子都明白的事實:任何程式設計,隻要它的代碼是要存為目标上的可執行檔案的,程式設計都是為運作期作預編碼的事實。在程式設計的時候,運作期是未知的,除非debug的時候,或devops調用模拟器的時候,這就造成了程式設計的脫節。

而shell程式設計恰恰相反,程式設計是在現在的上下文中作運維。開發和部署是天然一體的。而且最重要的,問題和要編碼的事,都是天然一體的。

程式設計最難也是最難統一的:

第一是開發和釋出的斷層,它使開發可以依賴通用語言,而不是釋出上下文相關的語言。這帶來了強大性,但也使人們分裂,因為通用語言必須用最原始的機制先後去抽象平台,人,最後才到目标問題和目标appstack。難度徒增。

在分布式程式中,這種難度尤甚。

第二,無非是對問題域的抽象。就像VB,抽象了界面開發為觸發/觸發處理。VB的做法向現實生活抽象,但是對于其它域,它就沒有抽象的可能。線程能抽象并發,但也僅此而已。沒有一種抽象習慣用法能統管所有,還很好用。設計模式也不能。

較shell programming,用傳統方法作應用程式設計,沒有直接一行代碼如shell programming所做到的那樣,一行代碼敲下去,就能立馬出效果的東西存在。但這極有可能是我們需要的最終唯一的東西 — 因為任何程式都會是一種執行體。我們隻需“具體APP在具體OS下隻須具體開發”

這是因為,我們業界,應用層程式設計始終還在用着實作層的東西。而且我們一遍遍用這種方法來解決我們的上上層開發。而且一直天真地以為:程式必須要預先編制,先編寫好,後運作。—— 而busybox規範下的,系統和系統shell程式設計的本質,就是一對天然可以融合的東西,是任何系統應用程式設計的所有。自成生态的所有。獨立,閉環,好用。

但是,千W不要以為shell程式設計就很簡單,它不能稱為通用語言和通用開發,是因為它僅僅不那麼做,進階shell程式設計隻限于運維,不像系統開發者,涉及到對記憶體的使用(有指針,etc..)産出系統程式,但進階shell程式設計的複雜度往往不比py這類腳本語言低,其語句,類型也頗為接近一般語言。—— 它的強大是因為它足夠自我。

而且,它可用于任何程式設計。準确來說。任何系統應用程式設計,都可以是這種shell程式設計。

任何APP程式設計都是shell programming

想象一下,比如要開發一個這樣的普通應用和準備一套這樣的langsys:最終的這個程式,應該是一個類busybox這類可裁剪的的exe系統,demo as engine,搭配一個bash,就能寫batch調用,bat調用即app,busybox就相當于一個函數庫,裡面的各個exe其實彙總起來組成了一個子產品,隻不過語言本身也是這個exe之一,app即exe的調用。函數即exe,參數即io,再也不用了解py那些理念懂基本的C系流程即可,開發上,直接用OS的觀點來對應語言簡元。比如,類似9P,任何一個語言元素都可以形成為fs的一個對象,everythingis a file,the programmingdomain programming is about file io。

其本質,就是把語言抽象的機制與OS系統應用的機制(包括語言,當時執行的上下文,這就需要一個容器儲存)結合起來。這樣,計算機應用直接對應開發。程式設計即計算機應用。程式設計即系統功能配置。以及問題操作,開發即運維。

上面所涉及到的要素,重點介紹以下:應用即容器。exe is componet,os is container。

1,它與容器搭配使用。

套間,接口,這不就是元件的那些概念麼,可是傳統元件沒有os container儲存不了部署上下文和運作期的那些資源,隻有部署包含了,那麼就能稱為demo,否則隻是一個執行體。這種APP是一個容器鏡像,在展開執行時會産生一個輕量級的全套OS。每一個APP自帶OS,是被正确部署了作為整個釋出包的,運作時可以展開為設計好的全面運作環境,而無須host上的此類資訊,app直接在這個guest上shell programmly運作。這就需要涉及到egxbox,在極小粒度上整合容器和語言的思想。這是後話。

2,它有元件系統

demos as engine,它也是可以被開發的。

類busybox,一堆exe像busybox中的子體一樣,一個接口就是一個可運作件中的某個小運作件,在檔案系統中,它是一個可以cd進.ls顯示的檔案系統。或許與正常fs不同的是,它會是一個executiable archive。是運作件也是開發件。任何GUI程式将基于CUI之上,CUI都是接口。

3,它是一種天然的分布式

由于開發件與運作件天然對應。且基于OS級,為了模拟類本地的host/host程式互動,需要sync2個遠端guest OS來處理程式的内外上下文邏輯。如果二端的可以sync同樣的結果。包括API。那麼它就是一種天然的分布式和雲開發的基礎。所有的分布式,就成了二個OS間的通訊,而不是程式級的。是以分布式服務就能基于虛拟API進行。這是一種同步,當然也可以進行資料内容的sync,5G下這很現實,就像物聯網基于container的應用釋出一樣,每天會産生幾G的資料。

4,它有全面的開發支援,低入階屬性

由于它是純粹的exe調用bat,将開發局限在具體app級又自帶OS。是以可以在host端作為模拟器guest container實時播放。友善調試和再開發學習。playable類packer語言。demo playable類似按鍵精靈腳本,又類似editor的效果。對初學者入階簡單。

開發不僅是編碼件,而且是調試件,這是一種良好的預埋debug middleware件設件,與帶問題域統一學習支援的四合一開發方案。

———————

關注我。

(此處不設回複,掃碼到微信參與留言,或直接點選到原文)

一種開發釋出合一,語言問題合一的shell programming式應用開發設想