偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

從過去5年編程語言的演化看未來趨勢(shì)

開發(fā) 前端 開發(fā)工具
Fogus在這篇帖子里介紹了過去5年間涌現(xiàn)出來的一些新的編程語言,就如作者本人所說,你并不需要也不可能掌握所有這些語言,但是花點(diǎn)時(shí)間了解下它們,或許你就會(huì)從中發(fā)現(xiàn)未來編程語言的演進(jìn)趨勢(shì)。

Fogus在這篇帖子里介紹了過去5年間涌現(xiàn)出來的一些新的編程語言,就如作者本人所說,你并不需要也不可能掌握所有這些語言,但是花點(diǎn)時(shí)間了解下它們,或許你就會(huì)從中發(fā)現(xiàn)未來編程語言的演進(jìn)趨勢(shì),原文介紹了14種語言(當(dāng)然不止這些),由于篇幅太長(zhǎng),我將分兩部分發(fā)布這篇文章:

推薦51CTO編程語言排行榜

前些天我編譯了一個(gè)Perlis(譯者注:Alan Perlis,第一屆圖靈獎(jiǎng)得主)語言列表,目的就是為了向大家展示主流編程語言之外的廣闊天地,這些語言只是為了拓展你的視野,就藝術(shù)性和實(shí)現(xiàn)上的技巧性而言,并沒有什么過人之處。在今天這篇帖子里,我會(huì)向大家介紹一些相對(duì)較新的編程語言(讓我們限定在過去5年之內(nèi)),主要目的是展示這些語言中的一些有趣的特性,以及當(dāng)前人們對(duì)舊有編程語言的認(rèn)識(shí),和對(duì)下一代語言發(fā)展方向的思考和探索,下面所列的這些語言有些可能已經(jīng)停止開發(fā)了,但是在某種程度上它們依然代表了人們對(duì)于“新一代編程語言”的思考與探索,記住,這有時(shí)候并不意味著就是“創(chuàng)新”。

同我的Perlis列表不同,下面所列的這些語言我并沒有花太多的時(shí)間去了解,所以,如果有錯(cuò)誤還希望大家能夠批評(píng)指正,另外,以下排名不分先后。

Shen

發(fā)布時(shí)間: 2011, 作者: Dr. Mark Tarver

在我的Perlis列表里,我介紹了Qi這門語言,所以在這里介紹它的繼承者Shen就是理所當(dāng)然的事情了,事實(shí)上,Shen和Qi的大部分(或者全部?)的特性都差不多:

* Lisp方言

* 可選靜態(tài)類型

* 帶保護(hù)的模式匹配

* 宏

* 交互式執(zhí)行(Partial application)

* 函數(shù)回溯(backtracking)

* 內(nèi)置Prolog

* 內(nèi)置編譯器

盡管如此,Shen實(shí)際上是Qi的進(jìn)化版,Shen的很多點(diǎn)子都是繼承自Qi,但是同Qi不同,它最主要的目標(biāo)是靶向性(targetability),這是什么意思呢?Qi主要是以Common Lisp作為它的宿主語言,并在這方面花了大量精力,盡管如此,Qi的實(shí)現(xiàn)實(shí)際上只使用了Common Lisp的一個(gè)非常小的子集,因此,Tarver博士決定繼承這個(gè)點(diǎn)子,并限定Shen只依賴一個(gè)叫做KI的最小化的Lisp語言核心,因此在理論上, 這讓Shen可以更容易的移植到其它宿主語言上,比如Javascript,Python,Clojure以及Common Lisp等等,“kernel Lisps”曾經(jīng)激起過我的無限遐想,Shen算是在這方面的一個(gè)比較成熟的實(shí)踐。

下面是一個(gè)簡(jiǎn)單的使用了嵌入Prolog的member函數(shù):

  1. (defprolog member  
  2.   X [X | _] <--;  
  3.   X [_ | Y] <-- (member X Y);)  
  4.  
  5. (prolog? (member 1 [1 2 3]))  
  6. /*=> true */ 

交互式執(zhí)行(Partial application):

  1. (* 2)  
  2. /*=> #  
  3.  
  4. ((* 2) 54)  
  5. /*=> 108 */ 

下面這個(gè)函數(shù)用于計(jì)算第N個(gè)三角形數(shù):

  1. (define triangle  
  2.   0 -> 0  
  3.   N -> (+ N (triangle (- N 1))))  
  4.  
  5. (triangle 100)  
  6. /*=> 5050 */ 

這是上面那個(gè)函數(shù)的帶類型限定的版本:

  1. (tc +)  /* turn on type-checking */  
  2.  
  3. (define triangle  
  4.   {number --> number}  
  5.   0 -> 0  
  6.   N -> (+ N (triangle (- N 1))))  
  7.  
  8. (triangle 5)  
  9. /*=> 15 : number */  
  10.  
  11. (triangle a)  
  12. /* type error */ 

我們可以將Shen看作是Lisp漫長(zhǎng),蜿蜒的歷史中的一個(gè)自然的進(jìn)化,實(shí)際上許多現(xiàn)代語言只不過是從Lisp語言中吸收了其早在很多年之前就已經(jīng)提出過的理念而已,因此,要說最令人激動(dòng)語言,那仍然是Lisp本身。

更多資源:

* 官方網(wǎng)站

* 源碼

* 15分鐘學(xué)習(xí)Shen

#p#

Agda 2

發(fā)布日期:2009,作者: Ulf Norel

我曾試著想要全身心的投入到Agda語言中,但是關(guān)于它,我卻不知從何說起,首先,Agda是一門純函數(shù)式,模式匹配,獨(dú)立類型的編程語言,并且,它還嘗試實(shí)現(xiàn)輔助證明(proof assistants)。在獨(dú)立類型的語言中,類型表達(dá)式可以包含一個(gè)程序表達(dá)式,因此,對(duì)類型的限定就只能通過函數(shù)語句或是值預(yù)測(cè)來解決,就實(shí)在是再遭不過了,Agda的類型語句和值語句是等價(jià)的(就是編程語句本身),這就意味著Agda的類型系統(tǒng)可以支持遠(yuǎn)比靜態(tài)語言復(fù)雜的多的數(shù)據(jù)類型,比如,我們可以說這個(gè)函數(shù)只接受已經(jīng)經(jīng)過排序的列表類型(PDF),恩,讓我們看個(gè)例子吧:

下面是一個(gè)Agda類型系統(tǒng)的奇偶數(shù)編碼程序

  1. data Nat : Set where  
  2.   zero : Nat  
  3.   suc  : Nat -> Nat  
  4.  
  5. fortyTwo : Nat  
  6. fortyTwo = 42 
  7.  
  8. plus : Nat -> Nat -> Nat  
  9. plus  zero   mm = m  
  10. plus (suc n) m = suc (plus n m)  
  11.  
  12. mutual  
  13.   even : Nat -> Bool  
  14.   even zero    = true 
  15.   even (suc n) = odd n  
  16.  
  17.   odd : Nat -> Bool  
  18.   odd zero    = false 
  19.   odd (suc n) = even n 

上面的代碼定義了兩個(gè)數(shù)據(jù)類型 1) 自然數(shù) 2)偶數(shù),當(dāng)然,你也可以定義類型函數(shù)作為前置操作符:

  1. _+_ : Nat -> Nat -> Nat  
  2. zero  + mm = m  
  3. suc n + m = suc (n + m) 

目前為止我對(duì)Agda的了解也就這些了,但是如果有時(shí)間,我希望可以對(duì)它做進(jìn)一步的了解。

更多資源:

* The Agda Wiki

* 介紹資源

* 使用Agda的論文

* 源碼

#p#

Ioke

發(fā)布日期:2008,作者:Ola Bini

Ola Bini的Ioke語言就是為了回答這樣一個(gè)很簡(jiǎn)單的問題:如果完全不用考慮性能,而只專注于表達(dá)性(expressivity),那么你會(huì)創(chuàng)造怎樣的一門語言出來?事實(shí)證明從Bini的PPT里你可以看到這門語言具有難以置信的可表達(dá)性(見下面鏈接),Ioke最有趣的一個(gè)特性就是它是一個(gè)支持宏的homoiconic語言(homoiconic指程序本身可以作為語言的一種數(shù)據(jù)結(jié)構(gòu)來表示)。

  1. myfor = dsyntax(  
  2. "takes a name, an enumerable, and a transforming expr  
  3. and returns the result of transforming each entry in  
  4. expression, with the current value of the enumerable  
  5. bound to the name given as the first argument",  
  6.  
  7.   [argName, enumerable, argCode]  
  8.  
  9.   ''(`enumerable map(`argName, `argCode))  
  10. )  
  11.  
  12. myfor(x, 1..5, x*2)  
  13. ;=> [2,4,6,8,10] 

另一個(gè)促使我學(xué)習(xí)Ioke的動(dòng)力就是:

牛逼的人創(chuàng)造的東西總是值得學(xué)習(xí)的。

不斷將我們的能力推向邊緣是作為程序員的職責(zé)所在,而學(xué)習(xí)聰明人的創(chuàng)造則是做到這點(diǎn)最有效的方式。

更多資源:

* Ioke

* Ioke: a Folding Language (視頻)

* Ioke Wiki

* Announcement

* 源碼

* Macro types in Ioke – or: What is a dmacro?

#p#

Pure

發(fā)布日起: 2008, 作者: Albert Gräf

Pure也是一個(gè)基于term rewriting構(gòu)建的函數(shù)式編程語言,Term rewriting有點(diǎn)像是我們?cè)诟咧写鷶?shù)里用到的FOIL(一種拆解多項(xiàng)式的方法)方法:

  1. (x1 + y1) * (x2 + y2) =  
  2.   (x1 * x2) +            // First  
  3.   (x1 * y2) +            // Outer  
  4.   (y1 * x2) +            // Inner  
  5.   (y1 * y2);             // Last 

上面的代碼展示了如何使用FOIL方法來對(duì)兩個(gè)多項(xiàng)式相乘進(jìn)行變換,讓我們來看看Pure可以做什么:

  1. (x + 3) * (x + 5);  
  2. //=> x*x+x*5+3*x+15 

或許你認(rèn)為答案應(yīng)該是x^2 + 8*x + 15,但是因?yàn)槲覀儧]有定義消除冗余的操作,所以結(jié)果會(huì)是下面的樣子:

  1. x*xx = x^2;  
  2.  
  3. (x + 3) * (x + 5);  
  4. //=> x^2+x*5+3*x+15 

這已經(jīng)很接近了。

另一個(gè)更復(fù)雜的例子就是求解一個(gè)數(shù)的質(zhì)因子:

  1. factor n = factor 2 n with  
  2.   factor k n = k : factor k (n div k) if n mod k == 0;  
  3.          = if n>1 then [n] else [] if k*k>n;  
  4.          = factor (k+1) n if k==2;  
  5.          = factor (k+2) n otherwise;  
  6. end;  
  7.  
  8. factor 138;  
  9. //=> [2,3,23] 

要說在這篇帖子里最讓我佩服語言,就是屬Pure了。

更多資源

*Pure wiki

* Albert Gräf訪談

* Term Rewriting and All That

* 源碼

#p#

Go

發(fā)布時(shí)間: 2009,作者: Robert Griesemer, Rob Pike, and Ken Thompson

對(duì)于是否要在這篇貼子里介紹Go讓我糾結(jié)了很久,到目前為止,我對(duì)Go都有非常強(qiáng)的抵觸情緒,盡管如此,但是人們似乎覺得多一種系統(tǒng)級(jí)的編程語言選擇是件好事情,所以最終我還是決定拋棄個(gè)人偏見,將Go包含在內(nèi)。

下面是一段用Go編寫的游程編碼(run-length encoding)程序:

  1. package main  
  2.  
  3. import (  
  4.     "fmt"  
  5.     "strings"  
  6. )  
  7.  
  8. var order = 4 
  9. var grain = "*" 
  10.  
  11. func main() {  
  12.     t := []string{grain + strings.Repeat(" ", len([]int(grain)))}  
  13.     for ; order > 0; order-- {  
  14.         sp :strings.Repeat(" ", len([]int(t[0]))/2)  
  15.         top :make([]string, len(t))  
  16.         for i, s :range t {  
  17.             top[i] = sp + s + sp  
  18.             t[i] += s  
  19.         }  
  20.         t = append(top, t...)  
  21.     }  
  22.     for _, r :range t {  
  23.         fmt.Println(r)  
  24.     }  

對(duì)于系統(tǒng)級(jí)編程,這個(gè)世界需要更多的選擇,而Go正是針對(duì)這個(gè)目標(biāo)設(shè)計(jì)的。

更多資源

* Official site

* 源碼

* 指南

#p#

Arc

發(fā)布日起:2008,作者:Paul Graham以及Robert Morris

很難相信Arc居然只是一個(gè)3年前才誕生的語言(根據(jù)發(fā)布日期),當(dāng)然,我之所以覺得它古老,這和我花了無數(shù)時(shí)間閱讀Graham介紹Arc的帖子有關(guān),在Arc發(fā)布之前,它曾讓人無比激動(dòng),但不幸的是,在它真正發(fā)布之后,對(duì)這個(gè)語言的評(píng)價(jià)基本上都處于失望和生氣之間,我也非常想要喜歡它,但是找來找去我還是沒能找到充足的理由說服自己,我覺得如果沒有Clojure,Racket或是Qi這樣的語言,那么我或許會(huì)愿意去嘗試下Arc,不過我必須得承認(rèn),Arc的核心理念“簡(jiǎn)明就是力量”仍然深深的打動(dòng)了我,除了語言本身(它的實(shí)現(xiàn)只部分遵從了這一原則),它的核心哲學(xué)依然足夠強(qiáng)壯,讓我們來看看Paul Graham在“Arc challenge”里的這段話吧:

假設(shè)要寫一個(gè)程序讓某個(gè)URL(比如,http://localhost:port/said)產(chǎn)生一個(gè)帶有輸入框和提交按鈕的頁面,然后當(dāng)提交按鈕被按下時(shí),這時(shí)應(yīng)該有第二個(gè)頁面,這個(gè)頁面只包含一個(gè)簡(jiǎn)單的鏈接“點(diǎn)這里”,當(dāng)你點(diǎn)了這個(gè)鏈接之后,會(huì)出現(xiàn)第三個(gè)頁面,在這個(gè)頁面你會(huì)看到“你剛剛說的是:……”,這里的省略號(hào)就是你在第一個(gè)頁面所輸入的內(nèi)容。

 要實(shí)現(xiàn)上面描述的功能,下面是Arc的解決方式:

  1. (defop said req  
  2.   (aform [w/link (pr "you said: " (arg _ "foo"))  
  3.            (pr "click here")]  
  4.     (input "foo")  
  5.     (submit))) 

學(xué)習(xí)Arc的一個(gè)額外的好處就是你可以順帶了解到Racket語言的神奇,好吧,我承認(rèn)我作弊幫Racket做宣傳了。

更多資源

* Succinctness is Power

* Arc指南

* Arc核心

* Arc論壇

* Arc源碼

#p#

CoffeeScript

發(fā)布日期:2009,作者:Jeremy Ashkenas

我發(fā)現(xiàn)Jeremy Ashkenas絕對(duì)是個(gè)超級(jí)聰明的程序員,他的一些哲學(xué)與我不謀而合,另外值得注意的是,CoffeeScript是這篇帖子里介紹的這些語言中唯一一個(gè)我會(huì)在實(shí)際工作中使用的語言,它的語法實(shí)在是太干凈自由了,但是它最牛的地方(也有些人說這是最弱的)就是它只是對(duì)JS的非常淺的封裝,CoffeeScript實(shí)際上是對(duì)于Crockford(譯者注:JavaScript社區(qū)最知名的權(quán)威之一,JSON、JSLint、JSMin和ADSafe之父)的“Javascript: The Good Parts”一書的最好詮釋,并且還是以更優(yōu)美的語法實(shí)現(xiàn)的。

CoffeeScript最有趣的一個(gè)特性就是它提供了一種非常輕量級(jí)的JSON語法:

  1. jsn =  
  2.   foo: 'a'  
  3.   bar: 'b'  
  4.  
  5. jsn.bar  
  6. #=> 'b' 

這讓下面這樣的對(duì)象語法變得更加容易:

  1. sanders =  
  2.   speed: 8  
  3.   juke: 10  
  4.   report: -> "#{@speed} and #{@juke}"  
  5.  
  6. sanders.report();  
  7. #=> '8 and 10' 

還有列表的實(shí)現(xiàn):

  1. transpose = (matrix) -> 
  2.     (t[i] for t in matrix) for i of matrix[0]  
  3.  
  4. transpose [[1,2,3],[4,5,6]]  
  5.  
  6. //=> [[1,4],[2,5],[3,6]] 

下面這點(diǎn)不知道該說好還是壞,CoffeeScript還提供了基于類支持:

  1. class Animal  
  2.   constructor: (voice) -> 
  3.     @voicevoice = voice  
  4.  
  5.   speak: => 
  6.     "#{@voice}!!"  
  7.  
  8. class Dog extends Animal  
  9.   constructor: -> 
  10.     super("ruff")  
  11.  
  12. d = new Dog  
  13. d.speak()  
  14. #=> 'ruff!!' 

CoffeeScript并不是第一個(gè)基于Javascript的語言,但是它對(duì)JS的適配和支持是最完美的,并且實(shí)踐證明大多數(shù)人都可以接受這種方式,而同樣重要的是Coffeescript還解決了寄生語言如何與現(xiàn)有的JS庫和框架共存的問題。

更多資源:

* 官方網(wǎng)站

* 源碼

* CoffeeScript書籍

#p#

Potion

發(fā)布日期: 2009, 作者: _why the Lucky Stiff

曾經(jīng)有個(gè)叫_why的家伙在ruby圈子里引起了一場(chǎng)不小的風(fēng)波,作為一個(gè)神秘人,他對(duì)Ruby和編程的一些見解為他在ruby以及ruby之外的世界贏得了很高的聲譽(yù),_why就是這樣一個(gè)神奇的開源貢獻(xiàn)者,在他的眾多開源項(xiàng)目中,有一個(gè)叫做Potion的項(xiàng)目,這個(gè)項(xiàng)目的目標(biāo)是創(chuàng)造一個(gè)小巧且強(qiáng)大的新編程語言,Potion繼承了很多Io,Lua,OCaml以及Ruby的想法,并將它們匯集于一身:

  1. Person = class: /name, /age, /sex.  
  2. Policeman = Person class (rank): /rankrank = rank.  
  3. Policeman print = ():  
  4.   ("My name is ", /name, " and I'm a ", /rank, ".")  
  5.   join print.  
  6.  
  7. Policeman ("Constable") print  
  8. # My name is nil and I'm a Constable. 

不過讓我最感興趣的就是,Potion分離了數(shù)據(jù)和表達(dá)式的符號(hào)系統(tǒng),當(dāng)然我必須得承認(rèn)這個(gè)語言并不是很富有創(chuàng)造性,這是因?yàn)樽髡邔⒋蟛糠志Χ纪度氲搅藢?shí)現(xiàn)上,它的實(shí)現(xiàn)非常簡(jiǎn)潔,只有大約6000行代碼,也就是說一般公司的年輕程序員(或者是像我這樣的老家伙)都可以在幾周之內(nèi)完全理解整個(gè)語言的實(shí)現(xiàn),閱讀代碼是個(gè)很好的學(xué)習(xí)方式,尤其是閱讀這樣出色的的代碼。

繼續(xù)了解

* 官方網(wǎng)站

* 源代碼

Mirah

發(fā)布日期: 2008, 作者: Charles Nutter

JRuby算是一個(gè)非常不錯(cuò)的在JVM之上構(gòu)建的語言了,但是就像其它許多的Java.next語言一樣,它也受到運(yùn)行時(shí)問題的困擾,作為一個(gè)共生語言,要想提供一個(gè)強(qiáng)大且高效的開發(fā)和運(yùn)行時(shí)體驗(yàn),共生語言需要提供一個(gè)可以在任何java運(yùn)行時(shí)上部署的核心庫。如果我們將這個(gè)運(yùn)行時(shí)限定在只支持一個(gè)輕量級(jí)的運(yùn)行環(huán)境,那么這在實(shí)踐中就不是什么大問題。讓我們來看看Mirah,Mirah的目標(biāo)(這是個(gè)很靠譜的目標(biāo))就是創(chuàng)造一個(gè)新的基于JVM的語言(語法主要借鑒Ruby),讓你可以得到動(dòng)態(tài)語言的體驗(yàn),但又不需要增加任何額外的運(yùn)行時(shí)庫。

  1. def reverse(s:string)  
  2.     StringBuilder.new(s).reverse  
  3. end  
  4.  
  5. puts reverse('reversed') 

初看起來,Mirah就是一個(gè)增加了類型聲明支持的JRuby,如果我不是這樣喜歡JRuby,或許我會(huì)希望Charles Nutter把他所有的時(shí)間都花在Mirah上。

繼續(xù)了解

* 官方網(wǎng)站

* 初始聲明

* 源碼

#p#

Scratch

發(fā)布日期: 2007, 作者: Mitchel Resnick

當(dāng)我看到我5歲的兒子毫不費(fèi)力的完成了對(duì)這些樂高機(jī)器人的編程時(shí),我就在想著,或許應(yīng)該有一種提供圖形化IDE的通用語言,當(dāng)我發(fā)現(xiàn)Scratch時(shí),我大吃了一驚,這個(gè)圖形化的語言居然和我想的如此接近,并且它和上面講的樂高機(jī)器人都是由MIT的一個(gè)小組開發(fā)的。

下面是Scratch版的“Hello,World”:

Scratch算是Smalltalk的一個(gè)近親,但是它的目標(biāo)是以“玩樂式的體驗(yàn)”幫助孩子學(xué)習(xí)必要的數(shù)學(xué)和編程技能——我非常贊同這個(gè)目標(biāo),Scratch雖然看起來和微軟的Kodu有點(diǎn)像,但是基于我玩樂高的體驗(yàn),我更喜歡Scratch一些。

更多資源

* 官方網(wǎng)站

* 源碼

ClojureScript

發(fā)布日期: 2011, 作者: Rich Hickey

ClojureScript是一個(gè)基于JavaScript之上的語言,它采用了大部分Clojure的語法,然后被編譯成Javascript,因?yàn)槲冶救司褪荂lojureScript的開發(fā)者,我對(duì)它的看法難免會(huì)有偏見,所以還是讓Brenton Ashworth來告訴你ClojureScript到底有多酷吧:

ClojureScript browser-connected REPL from Brenton Ashworth

這是個(gè)連我都被震住了的視頻。

繼續(xù)了解

* ClojureScript聲明

* 介紹ClojureScript

* 源碼

Clojure

發(fā)布日期: 2007, 作者: Rich Hickey

同上面一樣,我對(duì)Clojure的喜愛也不可避免的帶有偏見,所以我盡量少說一些,下面就是我對(duì)它的簡(jiǎn)短評(píng)價(jià):

不變性(Immutability)將會(huì)成為游戲規(guī)則的顛覆者

另外,下面是一個(gè)由Christophe Grand實(shí)現(xiàn)的生命游戲的Clojure版本:

  1. (defn neighbours [[x y]]  
  2.   (for [dx [-1 0 1] dy (if (zero? dx) [-1 1] [-1 0 1])]  
  3.     [(+ dx x) (+ dy y)]))  
  4.  
  5. (defn step [cells]  
  6.   (set (for [[loc n] (frequencies (mapcat neighbours cells))  
  7.              :when (or (= n 3) (and (= n 2) (cells loc)))]  
  8.          loc)))  
  9.  
  10. (def board #{[2 1] [2 2] [2 3]})  
  11.  
  12. (defn print-board [board w h]  
  13.   (doseq [x (range (inc w)) y (range (inc h))]  
  14.     (if (= y 0) (print "\n"))  
  15.     (print (if (board [x y]) "[X]" " . "))))  
  16.  
  17. (defn display-grids [grids w h]  
  18.   (doseq [board grids]  
  19.     (print-board board w h)  
  20.     (print "\n"))) 

再就是,我寫過一本關(guān)于Clojure的書。

更多資源

* 官方網(wǎng)站

* 源碼

#p#

OMeta

發(fā)布日期: 2009 (?), 作者: Alessandro Warth

最近幾年關(guān)于DSL的討論越來越多,大家的很大一部分注意力都被轉(zhuǎn)移到了這個(gè)話題上,盡管如此,如果有人曾經(jīng)參與過DSL的設(shè)計(jì)或者實(shí)現(xiàn),那么他應(yīng)該會(huì)發(fā)現(xiàn),現(xiàn)在的情況遠(yuǎn)不能讓人滿意,問題就是你很難用一個(gè)通用語言實(shí)現(xiàn)一個(gè)既強(qiáng)大又健壯的DSL,造成這個(gè)問題的原因有很多,但最主要的問題就是,即使是使用那些具有很大的語法靈活性的語言,你也仍然很難保證你實(shí)現(xiàn)出來的DSL不會(huì)太過丑陋,當(dāng)然,你可以做到,但是如果你想要實(shí)現(xiàn)一個(gè)理想的DSL,你會(huì)發(fā)現(xiàn),你真的需要一套簡(jiǎn)單的工具來幫你構(gòu)建一個(gè)完整的語言解析器和運(yùn)行時(shí),關(guān)于這個(gè),我都可以花上一天再寫個(gè)新帖了,但我還是先省省吧,讓我們回到主題,真的,DSL的世界需要這樣一種語言,它只是為你提供一套工具,讓你可以編寫?yīng)毩⒌腄SL解析器,或是嵌入式的變體,沒錯(cuò),那就是OMeta。

Github上的OMeta示例代碼

就像JetBrain的元編程系統(tǒng)提供的那種非常容易理解且強(qiáng)大的工具集一樣,OMeta最大的優(yōu)勢(shì)就在于它非常簡(jiǎn)單,OMeta是基于語法表達(dá)式解析器(PEG)構(gòu)建的,你可以輕松對(duì)它進(jìn)行擴(kuò)展來支持通用的數(shù)據(jù)結(jié)構(gòu)。

更多資源

* 官方網(wǎng)站

* JavaScript源碼

Fortress

Fortress有點(diǎn)超出了這個(gè)貼的時(shí)間限制,因?yàn)樵谒_發(fā)布之前,它已經(jīng)在Sun內(nèi)部被使用了多年,F(xiàn)ortress之所以引起我的關(guān)注,只是因?yàn)镚uy Steele參與了這個(gè)項(xiàng)目,除了這一點(diǎn),F(xiàn)ortress引人注目之處還在于它將精力放在了并行計(jì)算上,它的語法看起來更像是數(shù)學(xué)符號(hào),并且支持對(duì)象-函數(shù)范式,comprehensions,traits, contracts以及靜態(tài)計(jì)量單位解析和分布式數(shù)據(jù)結(jié)構(gòu)。

  1. for i←seq(1:m) do  
  2.   for j←seq(1:n) do  
  3.     print a[i,j]  
  4.   end  
  5. end 

上面的這個(gè)簡(jiǎn)單的嵌套循環(huán)展示了Fortress的一個(gè)非常有趣的特性,那就是循環(huán)中的語句是并行執(zhí)行的,F(xiàn)ortress對(duì)于并行采用了一個(gè)很堅(jiān)決的做法,它沒有將并行作為語言的一個(gè)可選項(xiàng),而是將它和語言本身緊密的結(jié)合在了一起,當(dāng)然,除了這種隱式的并行,F(xiàn)ortress也支持顯式的并行計(jì)算。

更多資源

* 項(xiàng)目主頁

* 源碼

接下來?

最近又涌現(xiàn)了許多新的編程語言,但是我對(duì)這些語言的了解僅限于一條Tweet的長(zhǎng)度:

* Dart

51CTO推薦專題:Google Dart新結(jié)構(gòu)化編程語言

第一定理(譯者注:這里指作者前面說的一句話:當(dāng)牛逼的人創(chuàng)造了某個(gè)東西,你應(yīng)該學(xué)習(xí)之)

看起來為適配更多的運(yùn)行時(shí)做了均衡

* Rust

看起來像是D語言的繼承者

第一定理

* Ceylon,不確定對(duì)于一個(gè)堅(jiān)持追隨Java約定的團(tuán)隊(duì),這個(gè)語言為他們提供了什么

* Kotlin,基于IDE打造

* Newspeak,smalltalk+: FloatD的簡(jiǎn)化版

* Perl6,鑒于我不是Perl程序員,所以我可以等

* Magpie

或許是最好的關(guān)于編程語言開發(fā)的“Blog"了

很不幸沒時(shí)間去看它的源代碼

由Dart團(tuán)隊(duì)的一員開發(fā)

感謝Tracy Harms提醒

更少人知道的

下面這些語言是其他人推薦給我的,我對(duì)它們基本上一無所知:

* Felix 屬于ML系

* Wheeler 看起來真的很獨(dú)特,我會(huì)花點(diǎn)時(shí)間探索下

* Opa 下一代的Web語言

* Frege 又一個(gè)Java.next語言,Haskell系

* Cobra 帶給我合同

* Clay 另一個(gè)系統(tǒng)級(jí)編程語言,在我看來很干凈

寫完這篇文章,一個(gè)讓我驚奇的發(fā)現(xiàn)是,過去5年間我們對(duì)于數(shù)組編程【6】幾乎沒有取得什么進(jìn)展,盡管如此,我懷疑可能還有有一些私有的項(xiàng)目沒被我發(fā)現(xiàn),隨著時(shí)間的推移,我的感受就是,編程語言正在朝著衍生和進(jìn)化的方向發(fā)展,而不是再從頭重新發(fā)明一種革命性的新語言,這并不一定就是件壞事情,因?yàn)橛?jì)算機(jī)史上還有很多隱藏的很深的好點(diǎn)子等著我們?nèi)グl(fā)掘。

本文是“Programming language development: the past 5 years”一文的上半部分,作者:Fogus,翻譯:yuanyiz

原文:http://heikezhi.com/2011/11/06/programming-language-development-the-past-5-years-part-1/

【編輯推薦】

  1. 適合IT經(jīng)理的編程語言
  2. Google Dart新結(jié)構(gòu)化編程語言
  3. 敲擊最多的鍵和編程語言語法
  4. 8月編程語言排行榜:以總統(tǒng)為名的語言新貴Lua
  5. 每一門編程語言都是上輩子折翼的天使
責(zé)任編輯:陳貽新 來源: 黑客志
相關(guān)推薦

2019-12-17 14:39:43

5G手機(jī)廠商消費(fèi)

2022-10-27 09:59:55

視音學(xué)習(xí)

2010-03-10 18:33:58

Python編程語言

2019-01-17 16:15:08

人工智能互聯(lián)網(wǎng)機(jī)器人

2019-10-21 13:03:04

編程語言PythonJava

2022-05-31 09:01:44

RedisRDBAOF

2023-03-22 14:04:00

編程語言PythonPHP

2012-06-25 14:57:27

HTML5

2019-08-15 22:55:39

大數(shù)據(jù)數(shù)據(jù)圏數(shù)據(jù)產(chǎn)生量

2019-08-14 09:38:31

2015-11-02 17:25:23

Elixir編程語言未來

2012-08-29 08:41:25

編程語言

2015-08-03 09:39:46

數(shù)據(jù)

2015-04-07 13:34:32

php語言發(fā)展趨勢(shì)

2016-01-29 09:36:38

編程初學(xué)者編程趨勢(shì)

2012-07-04 13:08:58

軟件開發(fā)軟件編程

2023-08-24 09:00:00

Java編程

2012-03-07 11:25:58

編程語言

2009-06-15 15:33:13

ScalaTwitter

2019-03-17 16:45:09

RSA 2019網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)