您好,登錄后才能下訂單哦!
如何分析解決過程式和純粹app的語言Golang,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
真正的APP語言。GO正確的設計。GO真正的分布式語言
以前,我總談到編程是從xaas開始,到langsys到 domainstack到app的四棧疊加過程,語言因為平臺也有本質上的二種:toolchain式和app式,歷史上,人們總是企圖從toolchain式語言上封裝一次,在這上面發展app語言,這使得任何一種app都有了平臺相關性,這種相關性或是CPU架構,OS的,或是toolchain libc。所以才會有那些移殖性的討論和軟件虛擬機語言(它們將平臺重新發明了一次,以封裝相異)和實現品,并在這上面長足發展了很多開發理念和實踐。
在《bcxszy》的語言選型上,我們一直在尋找一種包含四棧卻又不致于斷層設計的語言體系,我們從.net,java,到qtcpp,llvm cling,terralang,再到lua,js,python,這些。我們認為但凡是編程,總免不了要從xaas開始。
但其實這是不對的,app和hosting居然是可以分離的!純粹的toolchain編程和pure app編程是有區別的,基于前者的應用編程有四棧,但基于后者的只有三棧,因為,存在一種app和app開發生態,它是可以沒有任何平臺依托而存在的。無runtime設計,無backend to any hd, os,libc設計。
這就是go。它是真正的APP語言。
比起.net/java這種,c family based,llvm based語言,go對平臺沒有任何必須要依賴的邏輯,是完全問題域開始的。最通用的情況來講,基本上在c family式語言中,為了對接上toolchain langsys的成果,x86上的for app高級語言(及它們產生的任何程序),都會直接或間接引用到glibc這種運行時,因為程序設計,必須不是個重造輪子的過程。一些基于llvm的語言,封裝c dlls形成自己的語言庫,這種技術在llvm出現后更流行,因為新發明的語言往往可以直接call into dll libs。——— 但其實,C系更多的是一種toolchain。而非appdev langsys,但現實是是很多編譯為native目標的本地語言都脫離不了它們是從toolchain生態作app programming的事實,這終究是錯誤的,而在.net/clr,jvm這類體系中,managed clr也是帶虛擬機的,這類虛擬機后端植根于某OS中,引用眾多,又巨大,雖然虛擬機上的APP是跨平臺的,但虛擬機它本身不是跨平臺的(實際也是多平臺),雖然它出現的目的就是為了脫離平臺,但它終究也是一種平臺依賴,都免不了與toolchain及其hosting生態綁得很緊,作某層次的引用,—— 這造成的最大現實就是,來自語言和平臺的依賴,使得分布式程序這個東西從源頭上變得不存在,于是在分布式開發中處處掣肘。使得本地程序和分布式根本無法割舍。
而GO(非cgo)從0開始另起灶爐,它在各個平臺的實現不包括運行時,而只是編輯器工具,支持面向各個平臺能直接生成APP不需要發布任何runtime,好吧,它其實也發布運行時,只是它這個運行時非常小,且集成到每一個每一個由GO產生的APP中。不是像java,net等所有此類APP共享的,巨大,且與OS依賴嚴重的這類運行時。—— 你可以這樣理解:它的每一個可運行目標,雖然再小,里面都有一個小機器,這種小機器不是x86,也不是arm,也不是任何其它一種cpu,運行時并不需要外置另外發布,所以它免去了從硬件開始就帶來的平臺相關性。它是將四棧中的平臺集成到APP尾端的一種行為,而不是置于首端。
golang它的前身limbo所屬的os-plan9,甚至有從0開始,把kernel和系統調用都重做一遍的動作。它不基于x86。glibc都不用。因為glibc是從linux kernel來的,是一個rootfs最基礎的部分。因為只要工作在x86上,你就得繼承那里的成果,而GO不需要。---- 發明 plan9和limbo的那幫人實在是一幫眼光先到的家伙。
這就是真正的APP語言。是分布式開發的本質選擇。
曾經lua這樣的語言也很流行,因為它直面了程序設計中的痛點:x86下的過程式,都不好用。而基于過程式之上的各種OO,又過于發展得太復雜。這類語言痛點劣跡斑斑人們卻又視而不見,它們沒有一個穩定的語言核心,它們語言技法雖顯高級而難用,用于分布式開發要拖上平臺。—— 所以,可見,對于這種語言的強化或簡化需要是十分重要的。因為高級的語言技法,問題域的封裝是開發和工業中的大難題。
Lua出現那時,并發處理也不是很流行,分布式也不,lua用不同于CPU綁定的方式實現并發。可見APP處理問題的方式與硬件,系統編程都不必相同。除非為了獲得硬件加速效果 — 這也是GO提出平臺與APP分離的依據所在。除此之外,LUA最主要的優點在于:它比起現今的多種語言,短小,只專注于過程式,核心穩定,技法緊湊,可以用較為省事的形式實現復雜的OO,比起那些嚴肅地從x86開始到OS到glibc的語言體系,它就是它自己,專門做lua支持下的那些有限集技術下的APP的!事到如今,類lua的語言一個個出現,如js,go,lua的思路也就不那么新鮮了
GO剛好也是lua一路的,只不過go vs Lua,有它從0開始的平臺無關性,而lua依然是平臺相關的那一類,所以除了那個線協程設計,它本質上也不是適合分布式的。
所以,還有什么理由不選擇GO呢,即使單單是為了認真的做分布式開發。
看完上述內容,你們掌握如何分析解決過程式和純粹app的語言Golang的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。