新智元報(bào)道
編輯:LRS
【新智元導(dǎo)讀】每年都有很多新的編程語(yǔ)言來(lái)挑戰(zhàn)Python在深度學(xué)習(xí)的地位,但無(wú)一例外都失敗了。最近圖靈獎(jiǎng)得主在推特上再度提起4年前就已經(jīng)停更的Skip語(yǔ)言,并看好它在深度學(xué)習(xí)領(lǐng)域的發(fā)展。圖靈獎(jiǎng)得主LeCun最近在twitter上分享了一門(mén)新的編程語(yǔ)言Skip,并表示它有很多有趣的新特性。
包括安全的并發(fā)、具有類(lèi)型推斷的強(qiáng)類(lèi)型化、簡(jiǎn)單的語(yǔ)法、面向函數(shù)也可以面向?qū)ο蟆⒛J(rèn)不可變的變量、可預(yù)測(cè)的垃圾回收器、支持預(yù)計(jì)算和緩存、類(lèi)Lisp:閉包和指令序列等。
LeCun 也指出,雖然Skip語(yǔ)言很有意思,但目前來(lái)說(shuō)把Python作為頂層語(yǔ)言更符合人民的意愿;對(duì)于其他下層語(yǔ)言來(lái)說(shuō),面向數(shù)值、支持GPU版本的Skip語(yǔ)言可能會(huì)有意義。
實(shí)驗(yàn)性語(yǔ)言Skip
Skip 是 Facebook(Meta前身) 于 2015-2018 年開(kāi)發(fā)的一種實(shí)驗(yàn)性質(zhì)的編程語(yǔ)言。
作為一個(gè)研究項(xiàng)目,Skip 的主要目標(biāo)是探索支持準(zhǔn)確、高效、基于記憶化(memoization)的緩存和緩存失效的語(yǔ)言和運(yùn)行時(shí)。通過(guò)靜態(tài)類(lèi)型系統(tǒng)追蹤可變性,Skip 做到了前面提到的特性,同時(shí)它也支持現(xiàn)代語(yǔ)言特征,例如 trait、泛型與子類(lèi)型。
Skip 項(xiàng)目于 2018 年結(jié)束,F(xiàn)acebook表示不再積極開(kāi)發(fā) Skip,而是以開(kāi)源的方式保持語(yǔ)言的穩(wěn)定性,讓編程語(yǔ)言研究社區(qū)在語(yǔ)言設(shè)計(jì)與實(shí)現(xiàn)、編譯器和庫(kù)的基礎(chǔ)上進(jìn)行研究和構(gòu)建。
而編譯器和庫(kù)由該語(yǔ)言的主要設(shè)計(jì)者 Julien Verlaguet 作為一個(gè)副項(xiàng)目進(jìn)行維護(hù)。
后來(lái)Julien 圍繞Skip語(yǔ)言打造了幾個(gè)產(chǎn)品,如關(guān)系型數(shù)據(jù)庫(kù)SQLive。
顧名思義,SQLive受到SQLite的啟發(fā),支持一個(gè)強(qiáng)大的SQL子集(包括事務(wù))。它的與眾不同之處在于,它也是高度并發(fā)的。SQLive支持處理來(lái)自多個(gè)同步reader/writer的復(fù)雜查詢(xún),而不會(huì)讓其他數(shù)據(jù)庫(kù)用戶(hù)阻塞住。
用戶(hù)可以訂閱query的變化。通過(guò)一種叫做虛擬視圖(virtual views)的新結(jié)構(gòu),數(shù)據(jù)庫(kù)可以在任何時(shí)候都保持一個(gè)特定的視圖是最新的,當(dāng)該視圖發(fā)生變化時(shí)通知用戶(hù)。
目前SQLive仍處于早期開(kāi)發(fā)階段,目前已經(jīng)可以用于免費(fèi)用于非商用領(lǐng)域。
Skip的開(kāi)發(fā)團(tuán)隊(duì)有著多門(mén)語(yǔ)言的開(kāi)發(fā)經(jīng)驗(yàn),包括ActionScript、C#、Flow、Hack、HHVM、Prettier、React Native和Relay的高級(jí)貢獻(xiàn)者。
Skip的特性
從名字就可以看出來(lái),Skip的開(kāi)發(fā)就是為了跳過(guò)「某些已經(jīng)計(jì)算過(guò)的東西」來(lái)加快執(zhí)行速度。
Skip的主要新語(yǔ)言特征是它對(duì)副作用(side effect)的精確跟蹤,包括值的可變性,以及區(qū)分非確定性數(shù)據(jù)源和那些可以提供反應(yīng)性無(wú)效的數(shù)據(jù)源(當(dāng)數(shù)據(jù)發(fā)生變化時(shí)告訴Skip)。當(dāng)Skip的類(lèi)型系統(tǒng)能夠證明在一個(gè)給定的函數(shù)邊界沒(méi)有副作用時(shí),開(kāi)發(fā)者可以選擇安全地記憶該計(jì)算,運(yùn)行時(shí)確保當(dāng)?shù)讓訑?shù)據(jù)發(fā)生變化時(shí),先前的緩存值會(huì)被刪除。
Skip還支持兩種互補(bǔ)的并發(fā)編程,都能避免通常的線(xiàn)程安全問(wèn)題。首先,Skip支持使用 async/await 語(yǔ)法的 ergonomic 異步計(jì)算。由于Skip對(duì)副作用的跟蹤,異步計(jì)算不能引用易變的狀態(tài),因此可以安全地并行執(zhí)行(所以獨(dú)立的異步繼續(xù)可以并行地繼續(xù))。其次,Skip有用于直接并行計(jì)算的API,再次利用其對(duì)副作用的跟蹤來(lái)防止線(xiàn)程安全問(wèn)題,如對(duì)易變狀態(tài)的共享訪(fǎng)問(wèn)。
Skip使用了一種新穎的內(nèi)存管理方法,將典型的垃圾收集器與更直接的線(xiàn)性(凹凸)分配方案相結(jié)合。由于Skip對(duì)副作用的跟蹤,垃圾收集器只需要掃描從計(jì)算的根部可以到達(dá)的內(nèi)存。在實(shí)踐中,這意味著開(kāi)發(fā)者可以用可預(yù)測(cè)的GC開(kāi)銷(xiāo)來(lái)編寫(xiě)代碼。
Skip的另一大特點(diǎn)是將函數(shù)式和面向?qū)ο笫降挠^點(diǎn)混合在一起,所有這些都被仔細(xì)地整合在一起,形成一種有聚合力的語(yǔ)言。像函數(shù)式語(yǔ)言一樣,Skip是面向表達(dá)式的,并支持抽象數(shù)據(jù)類(lèi)型、模式匹配、簡(jiǎn)單的lambdas、高階函數(shù),以及(可選擇)強(qiáng)制執(zhí)行純/反向透明的API邊界。像命令式/OO語(yǔ)言一樣,Skip支持具有繼承性的類(lèi)、可變的對(duì)象、循環(huán)和提前返回。Skip還融合了「systems」語(yǔ)言的思想,以支持低開(kāi)銷(xiāo)的抽象,通過(guò)值類(lèi)對(duì)對(duì)象進(jìn)行緊湊的內(nèi)存布局,以及通過(guò)靜態(tài)方法調(diào)度確保代碼特化(code specialization)的模式。
Skip從一開(kāi)始就被設(shè)計(jì)為支持良好的開(kāi)發(fā)者體驗(yàn),其快速的迭代速度通常與動(dòng)態(tài)語(yǔ)言有關(guān)。編譯器支持增量類(lèi)型檢查(IDE插件的alpha版本在你輸入時(shí)提供近乎瞬時(shí)的錯(cuò)誤),為常見(jiàn)的語(yǔ)法錯(cuò)誤提供提示,幫助新手學(xué)習(xí)語(yǔ)言,識(shí)別方法/類(lèi)名稱(chēng)的小錯(cuò),甚至識(shí)別Skip標(biāo)準(zhǔn)庫(kù)方法名稱(chēng)的常見(jiàn)替代品,并在Skip中建議正確的名稱(chēng)。Skip還具有一個(gè)代碼格式調(diào)整器,能夠幫助確保代碼風(fēng)格的一致性,以及一個(gè)用于運(yùn)行代碼模型的工具。
Hello World
根據(jù)官方提供的Playground,可以在網(wǎng)頁(yè)交互頁(yè)面上輕松實(shí)現(xiàn)第一個(gè)Skip程序。
可以看到,函數(shù)需要類(lèi)型注釋?zhuān)褐付朔祷仡?lèi)型(void),名為 main 的特殊函數(shù)被調(diào)用作為程序的入口點(diǎn)。
Skip 是一種類(lèi)型化語(yǔ)言。函數(shù)參數(shù)、返回類(lèi)型和類(lèi)別字段等聲明都包括類(lèi)型注釋。編譯器計(jì)算所有表達(dá)式的類(lèi)型,并在遇到預(yù)料之外的類(lèi)型時(shí)報(bào)錯(cuò)。Skip 包括常見(jiàn)的基元類(lèi)型:Int、Float、String、Char、Bool、void。
并且函數(shù)沒(méi)有使用關(guān)鍵詞 return,因?yàn)?Skip 是一種基于表達(dá)式的語(yǔ)言,即沒(méi)有語(yǔ)句的概念。
修改本地變量時(shí)需要使用感嘆號(hào),等號(hào)作為聲明局部變量的操作符。
Skip 還包括常見(jiàn)的控制流語(yǔ)句,如 if、for/in、while、do 和 loop。與大部分語(yǔ)言不同,Skip 的控制流語(yǔ)句是表達(dá)式,且和其它表達(dá)式一樣可以生成值??刂屏鞅磉_(dá)式可用于期望使用的任何語(yǔ)境。
稍有不同的是,break, else都有返回值。
和深度學(xué)習(xí)有關(guān)?
LeCun在介紹Skip語(yǔ)言的時(shí)候,還提到一個(gè)問(wèn)題:Skip會(huì)成為深度學(xué)習(xí)框架、深度學(xué)習(xí)語(yǔ)言的一個(gè)新品種嗎?
并且還附上了一個(gè)Skip語(yǔ)言編寫(xiě)的、基于ArrayFire引擎的深度學(xué)習(xí)原型框架Skai的GitHub倉(cāng)庫(kù)。Skai的開(kāi)發(fā)受到著名C++機(jī)器學(xué)習(xí)庫(kù)FlashLight的啟發(fā)。
LeCun表示,期待下一個(gè)Skip的特性就是支持GPU計(jì)算。
Grid.ai的首席 AI Educator、威斯康星大學(xué)麥迪遜分校的統(tǒng)計(jì)專(zhuān)業(yè)副教授Sebastian Raschka表示,由于Skip的開(kāi)發(fā)始終圍繞著副作用和緩存的特點(diǎn),有可能是一種優(yōu)秀的DL語(yǔ)言。不過(guò)與此同時(shí),要換成非Python的東西真的很難。Python有一個(gè)強(qiáng)大的社區(qū),這也是新的語(yǔ)言很難從頭開(kāi)始建立的東西。Julia對(duì)于ML/DL來(lái)說(shuō)也有很大的意義,但它也沒(méi)被選中。
也有網(wǎng)友表示Facebook開(kāi)發(fā)的產(chǎn)品通常都是虎頭蛇尾,有著很強(qiáng)大的理想主義,但最終無(wú)法普及也就無(wú)法獲得成功,只能變成一個(gè)實(shí)驗(yàn)項(xiàng)目開(kāi)放出來(lái)給大家玩。
不過(guò)這么多年,想挑戰(zhàn)Python的語(yǔ)言都沒(méi)成功,停更近4年的Skip靠著社區(qū)能翻盤(pán)嗎?
參考資料:
https://twitter.com/ylecun/status/1495029342203695104
http://skiplang.com/
https://github.com/pikatchu/skai
掃描二維碼推送至手機(jī)訪(fǎng)問(wèn)。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長(zhǎng)刪除。
轉(zhuǎn)載請(qǐng)注明出處http://macbookprostickers.com/xintu/58906.html