六星源課堂:讓程序員心動的11種新編程語言,你pick哪一個?
亞歷山大-波普說過“人類的希望是永恒的”,雖然波普是個詩人,不是極客,但我相信他能夠理解發(fā)現(xiàn)一種新的編程語言時的期待感。他知道軟件開發(fā)人員永遠期待一種語言,能夠以其獨特的Unicode字符組合,解決我們所有的問題,使編碼變得更簡單,甚至只需點擊幾下即可。
他也肯定會理解我們對一種新的語法的渴望,這種語法是如此直觀,以至于我們只需要想象要做什么,然后就能夠使用語法清晰的表達出其中的邏輯。這是一種對新代碼的渴望,這種代碼看起來就像三段式(Triple axel)、梭魚式(inward three and a half)或奧運會上的大回轉(zhuǎn)跑那樣毫不費力和優(yōu)雅。

然而,大多數(shù)現(xiàn)代編程語言建立的初衷并不是創(chuàng)作者異想天開或為了展示他們的編碼能力。它們是針對創(chuàng)作者需要解決的一個常見問題而產(chǎn)生的。雖然大多數(shù)開發(fā)者會繼續(xù)使用一種或多種更老、更成熟的語言進行日常編碼,但我們永遠在尋找新的語言來幫助我們解決編碼問題。我們可以看到這種趨勢,尤其是在特定領(lǐng)域語言或 DSL 的崛起。這些語言緊湊且集中,它們不適用于通用用途,但是正是出于這個原因,可能會在你的工具箱贏得一席之地。
這里有 11 種較新的語言,并且都已經(jīng)找到了自己的用途。有些是 DSL,旨在做好一件事。其他的,似乎要拯救世界。即使你現(xiàn)在不需要它們,但它們都能讓我們的計算機把要做的事情做得更好。
PART 01:Reactive Clojure
Reactive Clojure是Clojure和React的結(jié)合體:一個將反應(yīng)式前端的所有可能性與 Clojure 堅實的功能優(yōu)勢相結(jié)合的系統(tǒng)。你可以使用Reactive Clojure布置一個復(fù)雜的前端組件集合,并使用函數(shù)將它們串連起來。反應(yīng)式框架能夠處理這些細節(jié),并且確保應(yīng)用數(shù)據(jù)在組件和數(shù)據(jù)庫之間流通。Clojure則提供功能基礎(chǔ),使非常規(guī)的用例成為可能,并且可調(diào)試。
這看起來簡直是天作之合,但還需要通過時間的檢驗。Reactive Clojure是一個將前端組件結(jié)合在一起的好選擇。它的多線程模型與多任務(wù)的復(fù)雜性和反應(yīng)式儀表板自然匹配。
PART 02:Nickel
有時,程序員會將大部分工作花費在配置文件上,這些文件通常用JSON、YAML甚至XML編碼。在某些情況下,你甚至不需要寫具體的代碼,只要不停地切換各種配置文件來完成工作。
Nickel的誕生就是為了解決這一問題,它是一種用于創(chuàng)建配置文件的編程語言。你可以用Nickel來創(chuàng)建非靜態(tài)的配置文件。一個參數(shù)的值可以發(fā)生變化,在一周內(nèi)可以是一個值,在周末則是一個不同的值。在運行Nickel時,它會創(chuàng)建一個新的配置文件,以適應(yīng)它收到的所有參數(shù)。
Nickel的結(jié)構(gòu)在很大程度上是功能性的,而且可以使用類型檢查。一段非常好的Nickel代碼幾乎可以保證輸出遵守句法規(guī)則和任何其他需要執(zhí)行的規(guī)則。你可以編寫代碼來創(chuàng)建配置文件,然后再對其他代碼進行管理,這聽起來有些滑稽。但對于現(xiàn)代架構(gòu)來說,這是一個非常實用的解決方案。
PART 03:Kobra
Kobra的創(chuàng)造者希望有一種語言能夠為工程師、科學(xué)家和其他不那么專業(yè)的編碼者開放機器學(xué)習(xí),于是這個機器學(xué)習(xí)的視覺語言就誕生了。Kobra的編輯器用拖放塊組成了類似代碼的序列,這些塊用于統(tǒng)計分析和機器學(xué)習(xí)的常見內(nèi)置例程。這個過程感覺就像R語言,它的數(shù)據(jù)框由表格數(shù)據(jù)和一組用于創(chuàng)建儀表板和論文的圖形顯示函數(shù)而組成。
PART 04:Bicep
這是云計算最有用的功能之一,能夠啟動和關(guān)閉服務(wù)器,用以處理數(shù)據(jù)激增。數(shù)據(jù)中心的硬件團隊曾經(jīng)需要花費數(shù)周時間來申購、安裝、測試和配置一臺機器?,F(xiàn)在,云讓你在幾分鐘甚至幾秒鐘內(nèi)完成所有這些工作。
許多敏捷開發(fā)團隊已經(jīng)開始為不同云支持的各種API編寫代碼。微軟為在Azure中啟動機器創(chuàng)建了一種簡化的語言,作為其基礎(chǔ)架構(gòu)即代碼理念的一部分。
Bicep 語言提供了一種高效的聲明式格式,可以編碼出開發(fā)人員希望在新實例中的應(yīng)用。一些基本的類型安全可以幫助防止錯誤,并且 VS Code 中提供了一個語法感知編輯器。該語言本身是為對基礎(chǔ)架構(gòu)進行高階思考而設(shè)計的,具有強聲明性結(jié)構(gòu),允許你以任何順序包含指令,讓 Azure 的資源管理器優(yōu)化執(zhí)行。
PART 05:Frink
使用浮點數(shù)出現(xiàn)錯誤帶來的開發(fā)風(fēng)險是眾所周知的,相當(dāng)多的Bug是由于不注意的數(shù)字格式造成的。
Frink正是為解決這一問題而創(chuàng)造的,它是一種有“單位意識”的語言。Frink中的每個變量不只是持有一個數(shù)字,而且還標(biāo)明了計量單位(幾乎所有的計量單位),比如噸、瓦、英尺或者米。這使單位轉(zhuǎn)換變得很容易,F(xiàn)rink的核心機制在于使用任意精度的數(shù)字來減少四舍五入的問題。這就像一種對于測量單位來說的類型檢查。
PART 06:Faust
聲音合成對于游戲開發(fā)、VR和任何依賴良好音質(zhì)的應(yīng)用都非常有用。而Faust就是這種特定領(lǐng)域的語言,它的結(jié)構(gòu)是純功能的,并且每一個功能都建立了一個聲音處理管道。它的后端將傳入的聲音分解為數(shù)字表示,而代碼本身是一組可以組成最終結(jié)果的函數(shù)。比如,你可以通過分割代碼輸出并引入延遲來創(chuàng)造一個回聲和混響。另外,F(xiàn)aust的代碼可以轉(zhuǎn)譯成C++、C、LLVM Bitcode、WebAssembly、Rust和其他一些語言,因此你幾乎可以在任何項目中使用它。
PART 07:Melrōse和Glicol
任何編寫代碼的人都知道程序員如何組建一個樂隊。寫一些代碼,為鼓機拼出節(jié)奏,然后用子程序取代所有其他的樂隊成員,用這種方式甚至能建立一個完整的交響樂團。
Melrōse和Glicol就是為這種音樂創(chuàng)作方式而生的編程語言。使用這兩種語言你只需要用幾個按鍵就能創(chuàng)造出一個看上去精心制作的作品。Melrōse圍繞西方音樂中常見的標(biāo)準(zhǔn)十二音度的高層次工作。音符被分組為序列,軟件處理大部分的細節(jié)工作,如移調(diào)。輸出到任何具有MIDI功能的樂器上,代碼也可以對通過MIDI端口進入的信號作出反應(yīng),因此運行Melrōse代碼可以代替一個樂隊成員。
Glicol是一個基于Rust的工具,它能完成許多和Melrōse相同的任務(wù),但級別較低。Glicol可以與數(shù)字信號處理相結(jié)合,可以提供廣泛的音樂類型選擇。該工具旨在通過其開源的音頻引擎產(chǎn)生可用于瀏覽器的聲音。正如其開發(fā)者所說:“入門費用低,上限高。”,用于鼓勵與所有會此技能的人合作。
PART 08:WebAssembly和Wase
將指令傳送到計算機的最有效方法是將它們編碼為二進制并將它們限定為 CPU 使用的基本操作集。每個芯片都有自己喜歡的二進制語法,Pascal 或 Java 等一些語言有一種中性的二進制格式,可以在本地虛擬機上運行。WebAssembly為Web瀏覽器提供預(yù)先處理的二進制代碼,并以標(biāo)準(zhǔn)格式與文本相結(jié)合。其目標(biāo)是用更容易運行的、接近本地速度二進制格式來代替構(gòu)建Web應(yīng)用程序的JavaScript代碼。
許多開發(fā)者使用WebAssembly但不直接編寫,而是用編譯器將高級語言轉(zhuǎn)化成WebAssembly,并在瀏覽器中運行。還有一個舉措就是創(chuàng)建低級語言,以人類可讀的形式公開WebAssembly的大部分基本結(jié)構(gòu)。Wase就是這樣的一種選擇,它提供了一種類似C的語法和強類型。
在Web瀏覽器之外,也有WebAssembly的用武之地,作為一種通用的編碼指令方式,其堆棧機類似于Java的JVM。例如,Redpanda是一個流媒體數(shù)據(jù)平臺,它為開發(fā)者提供了一個機會,當(dāng)數(shù)據(jù)通過WebAssembly編寫的代碼進入管道時,可以對其進行調(diào)整或修改。
PART 09:Java 17
從某種意義上來說,Java并不能算是一種新的語言。Java最偉大的地方之一就是,它的開發(fā)者在維護與舊版本的兼容性方面做得很好,對于最新的JVM來說,編譯10年甚至20年前的代碼通常很容易。雖然這些代碼不能保證能正常運行,但它仍然比幾乎任何其他語言更容易編譯。并且Java團隊擁有一套包含數(shù)百萬個集成測試的套件。
將Java 17列入這個名單是因為它已經(jīng)非常現(xiàn)代化了,以至于1990年代的開發(fā)者肯定認(rèn)不出是Java。它有許多額外的功能和擴展,能夠改變開發(fā)者的編碼方式。
比如增強的隨機數(shù)發(fā)生器或更嚴(yán)格的浮點數(shù)學(xué)語義,解決了編寫非常復(fù)雜的數(shù)字代碼的難題。編寫會計系統(tǒng)的開發(fā)人員可以使用整數(shù)來保存錢的數(shù)量,但那些處理AI算法和復(fù)雜線性代數(shù)的開發(fā)人員則需要浮點數(shù)。
其他的,如強封裝和擴展的switch語義,為核心語言帶來了規(guī)范性和靈活性。總而言之,由于所有這些改進,使編寫更強大、更安全的代碼比以往任何時候都容易。它的核心仍然是Java,但附加功能有所不同。
以上為本次分享的全部內(nèi)容,如果對編程想獲得更多了解,請前往六星源課堂,開啟你的編程之旅~·