原文鏈接:http://www.csdn.net/article/2015-10-27/2826040-Elixir-Jos%C3%A9Valim
Elixir是一種運(yùn)行于Erlang VM上的函數(shù)式、具有元編程特性的動態(tài)語言。它擁有靈活的語法和強(qiáng)大的宏系統(tǒng)吱殉,還具備模式匹配、通過協(xié)議(類似Clojure的方式)支持多態(tài)等功能瞎暑;繼承了Erlang的優(yōu)點(diǎn),尤其適合開發(fā)并行、分布式陡厘,以及高容錯應(yīng)用总寒。Erlang之父Joe Armstrong也對Elixir贊賞有加扶歪。日前,Elixir設(shè)計(jì)者José Valim接受了CSDN專訪摄闸,分享了他在設(shè)計(jì)這門語言時的感悟善镰。
Elixir設(shè)計(jì)者,Rails核心團(tuán)隊(duì)成員年枕,Plataformatec聯(lián)合創(chuàng)始人José Valim
語言成熟需待時間醞釀
CSDN:你設(shè)計(jì)Elixir的原因是什么炫欺,希望解決哪些問題?
José Valim:Erlang VM是種神奇的軟件熏兄,在過去十年中品洛,許多公司使用它編寫出了高并發(fā)、分布式和高容錯性軟件摩桶。Elixir的主要目標(biāo)是將Erlang VM通過另一種語法和另一套工具暴露給開發(fā)者桥状。
最終,我希望Elixir和Erlang將能共享相同的字節(jié)碼和數(shù)據(jù)類型硝清。這意味著開發(fā)者可以同時擁有Elixir的表達(dá)力岛宦,以及Erlang具備的高可靠性和高性能。
CSDN:Elixir的語法在很大程度上借鑒了Erlang和Ruby耍缴,為什么你沒有選擇一種更激進(jìn)的變化砾肺?
José Valim:在Elixir設(shè)計(jì)初期挽霉,我知道自己需要Elixir具備宏系統(tǒng),這是從Lisp中得到的啟發(fā)变汪。對于宏系統(tǒng)侠坎,只有在一種編程語言的語法能通過它自身的數(shù)據(jù)結(jié)構(gòu),以一種很直接的方式表達(dá)的情況下才合理裙盾。帶著這個目標(biāo)实胸,我設(shè)計(jì)了一種非常簡潔的語法,而后逐步增加層次番官,這部分靈感大多來自Ruby和Erlang中的慣用法庐完。
由于Elixir的目的是增強(qiáng)Erlang,所以我在做設(shè)計(jì)決定時經(jīng)常向Erlang的語法和語義靠攏徘熔,這樣就可以幫助開發(fā)者更好地融入生態(tài)圈门躯。
CSDN:我們知道一種語言的成熟可能需要經(jīng)歷漫長的過程。在設(shè)計(jì)的過程中酷师,哪些部分你用心最多讶凉?
José Valim:設(shè)計(jì)一種編程語言,對耐心的考驗(yàn)比努力更多山孔。首先你需要明確一系列目標(biāo)懂讯,然后在你希望語言發(fā)展的方向上寬廣地推進(jìn),給你自己和語言都留出更多時間台颠,然后觀察這些目標(biāo)之間如何演進(jìn)與調(diào)和褐望。
倘若你試圖一蹴而就,或者不對未來做打算串前,不為演進(jìn)留出空間譬挚,就將得到一種不一致的語言——也許能實(shí)現(xiàn)所有目標(biāo),但這些目標(biāo)之間卻齟齬相抵酪呻。
CSDN:請給我們詳細(xì)談?wù)凟lixir的設(shè)計(jì)目標(biāo)。
José Valim:Elixir的設(shè)計(jì)目標(biāo)可以概括為兼容性盐须、高效率和擴(kuò)展性這幾部分玩荠。
之前已談到兼容Erlang VM是Elixir的目標(biāo)之一,當(dāng)我們談到Erlang這個詞贼邓,可以將它分解為下面三部分:
一種函數(shù)式編程語言Erlang阶冈;
一系列設(shè)計(jì)原則,稱為OTP塑径;
Erlang虛擬機(jī)女坑,稱為EVM或BEAM。
Elixir與Erlang運(yùn)行在同一種虛擬機(jī)上统舀,并兼容OTP匆骗。不僅如此劳景,所有Erlang生態(tài)系統(tǒng)中使用的工具和庫,Elixir也能使用碉就,因?yàn)樵贓rlang中調(diào)用Elixir沒有任何性能代價盟广,反過來也是如此。
所有Elixir代碼在輕量級進(jìn)程中運(yùn)行瓮钥,包含自己的狀態(tài)筋量,用于彼此交換信息。Erlang VM將這些進(jìn)程分配到多個處理器核心中碉熄,使代碼可以輕松地并行執(zhí)行桨武。
如果你編譯Elixir代碼,會發(fā)現(xiàn)CPU中的所有核心都在開動锈津。當(dāng)像Parallella這種技術(shù)變得更容易獲取且成本更低廉時呀酸,你很難忽視Erlang VM所能提供的強(qiáng)大能力。未來Erlang VM將會被用來搭建能永久運(yùn)行一姿、能自我修復(fù)和擴(kuò)展的系統(tǒng)七咧。
效率很難測量,能高效開發(fā)桌面應(yīng)用的編程語言卻可能在數(shù)學(xué)運(yùn)算領(lǐng)域捉襟見肘叮叹,它與你期望從事的領(lǐng)域艾栋、生態(tài)圈中的可用工具,以及是否能方便地創(chuàng)造和擴(kuò)展這些工具有關(guān)蛉顽。
基于這種原因蝗砾,我們選擇了簡約的語言核心。在許多編程語言中携冤,if悼粮、case、try這些關(guān)鍵詞都需要專門的語法分析器曾棕,而Elixir中只有宏扣猫。這樣做的好處之一是,開發(fā)者可以自己擴(kuò)展語言翘地,以適應(yīng)他們自己的工作領(lǐng)域申尤。宏還是Elixir元編程的構(gòu)建基礎(chǔ):具備通過代碼生成代碼的能力,令開發(fā)者能擺脫煩瑣的工作衙耕,創(chuàng)造出更強(qiáng)大的工具昧穿。
宏也對語法有巨大的影響,前面已經(jīng)提到橙喘。盡管許多關(guān)于語言的話題一開始就會討論語法时鸵,但在Elixir身上,從未將“簡單地提供另一種不同語法”作為它的目標(biāo)厅瞎。
盡管基于簡潔的語言核心饰潜,開發(fā)者可以構(gòu)建和擴(kuò)展針對自己領(lǐng)域的語言初坠。但Elixir還繼承了擅長并行和分布式應(yīng)用的特點(diǎn)。在這些領(lǐng)域囊拜,Elixir補(bǔ)充了下面一些標(biāo)準(zhǔn)庫:
Unicode字符串和相應(yīng)的操作某筐;
強(qiáng)大的單元測試框架;
更多數(shù)據(jù)類型冠跷;
多態(tài)記錄南誊;
嚴(yán)格和惰性枚舉API;
便于腳本操作的函數(shù)蜜托,例如路徑和文件系統(tǒng)抄囚;
一些用于編譯和測試Elixir代碼的項(xiàng)目管理工具。
此外橄务,還有更多庫幔托、模塊、協(xié)議等便于擴(kuò)展的特性蜂挪。
以源碼為良師
CSDN:你都是通過哪些方式提高編程技能重挑?
José Valim:我的閱讀量很大。既讀書棠涮,也閱讀其他開發(fā)者的代碼谬哀。我覺得每個人都不應(yīng)該畏懼自己所使用項(xiàng)目的源代碼。當(dāng)然严肪,我也通過在現(xiàn)實(shí)問題中實(shí)踐來提高自己史煎。
CSDN:Elixir的名字有典故嗎?
José Valim:我很希望有驳糯,不過很可惜篇梭,這個名字其實(shí)沒有特別的出處。
CSDN:Elixir已足夠成熟酝枢,可以用于生產(chǎn)環(huán)境嗎恬偷?
José Valim:Elixir確實(shí)已可以用于生產(chǎn)環(huán)境了,已有開發(fā)者和公司將它應(yīng)用到了產(chǎn)品中帘睦。不過袍患,Elixir社區(qū)的發(fā)展速度很快,所以開發(fā)者還需要跟上語言發(fā)展的步伐官脓。
CSDN:在設(shè)計(jì)和發(fā)展Elixir的過程中,你有哪些經(jīng)驗(yàn)可以與讀者分享涝焙?
José Valim:我最喜歡的一條建議是“Use the source, Luke!”(《星球大戰(zhàn)》中的一句話)卑笨。閱讀你所使用的工具和項(xiàng)目的源代碼會讓你變成更好的程序員,也會讓你更好地理解它們仑撞,還會讓你對在社區(qū)中貢獻(xiàn)更近一步赤兴。公開軟件的源代碼是一件美好的事情妖滔,它曾經(jīng)(也依然)是我最重要的老師。