前言:
Ruby作為一門非常有名的編程語言就不過多的介紹了捏境,有人對(duì)她的魔幻著迷于游,有人對(duì)她的晦澀難懂極度厭惡,個(gè)人也常常使用Ruby做一些程序設(shè)計(jì)垫言,可以說對(duì)Ruby的情感既有愛也有恨贰剥,作為一名千千萬萬程序員中的無名小卒,說說自己對(duì)Ruby的粗陋理解筷频。碼下這篇文章時(shí)我是瑟瑟發(fā)抖蚌成,還請(qǐng)大佬打臉輕一些。
背景:
Ruby在松本行弘設(shè)計(jì)之初凛捏,考慮的就是以人為本担忧,從人的角度出發(fā),要符合程序員個(gè)人的心理感受坯癣。在當(dāng)時(shí)(1993年)這樣的思想可以說是相當(dāng)大膽的瓶盛,因?yàn)槟莻€(gè)時(shí)候機(jī)器的硬件性能普遍低下,內(nèi)存幾個(gè)M坡锡,CPU主頻不到半個(gè)G蓬网,硬/軟盤容量和讀寫速度低的可怕,雖然現(xiàn)在的年輕一代沒有經(jīng)歷過那個(gè)環(huán)境鹉勒,但是還是可以想象的帆锋。
在大多數(shù)程序員都在想著優(yōu)化程序內(nèi)存,最大化提升機(jī)器效率和速度的時(shí)候禽额,Ruby可以說是相當(dāng)不受待見锯厢,不過歷史上松本行弘不是第一個(gè)這樣做的,1958年脯倒,約翰·麥卡錫在麻省理工學(xué)院發(fā)明了Lisp編程語言实辑,自動(dòng)內(nèi)存管理和垃圾回收,可想而知藻丢,當(dāng)時(shí)Lisp并沒有實(shí)質(zhì)性的應(yīng)用開發(fā)價(jià)值剪撬。時(shí)至今日,Lisp依舊不溫不火悠反,但是Lisp成了一種思想残黑,個(gè)人認(rèn)為Lisp僅把動(dòng)作和命令賦予在表格數(shù)據(jù)上就有了強(qiáng)悍的表現(xiàn)能力馍佑。似乎有些跑題,接著說Ruby梨水。
提煉精華
松本行弘的創(chuàng)新其實(shí)并沒有多少拭荤,但是他把一些優(yōu)秀編程語言中的精華提煉出來,糅合成一家疫诽,這甚至比創(chuàng)新都有難度舅世,Ruby啟發(fā)語言來自:Ada、C++奇徒、CLU雏亚、Dylan、Eiffel逼龟、
Lisp评凝、Perl、Python腺律、Smalltalk甚至更多,其中借鑒最多的是Perl和smalltalk宜肉,Perl個(gè)人沒有怎么使用過匀钧,不好評(píng)價(jià),但是我知道Perl的語言密度極高谬返,用字符指定行為在Perl中非常常見之斯,有人把Perl寫成天書,甚至Perl可以簡(jiǎn)潔到不可多一個(gè)字符或少一個(gè)字符遣铝,smalltalk的IDE非常強(qiáng)大佑刷,有人說它是一個(gè)自帶IDE的編程語言。不熟悉就不過多的評(píng)論酿炸。Ruby也繼承了Perl的這部分特點(diǎn)瘫絮,所以才會(huì)有人說她是一個(gè)魔幻的語言,這種風(fēng)格吸引著一部分人深入了解并學(xué)習(xí)應(yīng)用填硕,也擋住了不少的好奇的腳步麦萤,總體來說Ruby的學(xué)習(xí)曲線還是比較平緩的,經(jīng)常有人建議編程初學(xué)者以Python為入門語言扁眯,其實(shí)Ruby更好壮莹,個(gè)人認(rèn)為比Ruby更好的還有scheme,但是scheme畢竟太小眾了姻檀,而且scheme的實(shí)用價(jià)值并不大命满。
風(fēng)格
接著說Ruby的魔幻
Ruby的魔幻特性注定Ruby只能是一門小眾語言,由于Ruby中自由的表達(dá)方式绣版,新手入門后看Ruby有關(guān)項(xiàng)目的源代碼胶台,會(huì)發(fā)現(xiàn)每個(gè)人都有自己的風(fēng)格歼疮,風(fēng)格無法統(tǒng)一,讓新人有種摸不著頭腦的感覺概作,這樣并不利于初學(xué)者對(duì)高級(jí)知識(shí)的理解腋妙,如果這樣還能堅(jiān)持學(xué)習(xí)Ruby的人,就更是少部分人了讯榕,這樣形成了Ruby社區(qū)的風(fēng)格骤素,大牛多,小白少愚屁,想入門的都徘徊在一個(gè)門檻前济竹,少部分人踏過了門檻,大牛的數(shù)量提升緩慢霎槐。
Rails
但是怎么解釋Ruby on Rails的熱度和人數(shù)一直在比較高的地位呢送浊?(Rails一般是創(chuàng)業(yè)公司使用,國內(nèi)只有少部分公司的部分業(yè)務(wù)使用Rails丘跌,統(tǒng)計(jì)數(shù)據(jù)不包含中國地區(qū)的Rails使用者袭景,這個(gè)年頭在中國創(chuàng)業(yè)還不如炒房,一套一二線城市的房子價(jià)值就趕得上一個(gè)創(chuàng)業(yè)公司了闭树,國內(nèi)的環(huán)境使得創(chuàng)業(yè)只是口號(hào)耸棒,創(chuàng)業(yè)者寥寥)
這就引出Ruby的另一個(gè)現(xiàn)象了,Ruby的元編程能力非常強(qiáng)报辱,非常適合寫DSL与殃,Ruby誕生之初的語法就是為了嵌入式DSL而優(yōu)化設(shè)計(jì)的,Ruby on Rails可以說是用Ruby語言開發(fā)的Web DSL碍现,Rails誕生之初幅疼,猶如盤古開天辟地,當(dāng)時(shí)昼接,php還是old style爽篷,代碼混雜html,net還停留在WebfoRms階段辩棒,java還是with or widthout EJB中掙扎狼忱,Python還在用Zope這個(gè)先進(jìn)的無法使用的東西,可以毫不夸張的說一睁,Rails的誕生就如Iphone剛問世一樣钻弄,Web開發(fā)有了革命性的創(chuàng)新,之后各種語言的各種Web開放框架或多或少的都在向Rails致敬者吁,甚至影響了微軟MVC開發(fā)的方式窘俺,感興趣的可以搜索MonoRails,這里就不過多贅述了瘤泪。
Ruby的DSL特性使得Ruby有了這樣一種現(xiàn)象:某大牛寫出一種DSL灶泵,如果這個(gè)DSL特別出色,就有很多人去使用這個(gè)DSL对途,Ruby也就會(huì)火一陣赦邻。但是并不是每個(gè)Ruby開發(fā)者都有能力寫出優(yōu)秀的DSL,所以Ruby會(huì)隨著某些優(yōu)秀DSL的出現(xiàn)而火一陣实檀,接著熱潮就會(huì)褪去惶洲。在技術(shù)圈,尤其是程序員這個(gè)特殊的群體膳犹,如果不是底層開發(fā)恬吕,不接受新知識(shí),似乎就是落后须床,統(tǒng)計(jì)學(xué)的正態(tài)分布數(shù)據(jù)不會(huì)欺騙人群分布铐料,Ruby注定小眾,而且真正的Ruby開發(fā)者高手居多豺旬。
而且近幾年前端的大熱钠惩,JS MVC框架的路越來越廣,已經(jīng)不用太依賴服務(wù)端模板族阅,ES語法也在逐漸改進(jìn)javascRipt這門先天設(shè)計(jì)不足的語言妻柒,微服務(wù),后端提供API方式逐漸流行耘分,Rails的優(yōu)勢(shì)也小了一些,但是不可否認(rèn)绑警,如果還是開發(fā)Web項(xiàng)目求泰,Rails依然是最佳選擇。
之前在一個(gè)Ruby交流群中有人說Ruby將來會(huì)一直低迷计盒,Ruby在數(shù)據(jù)分析渴频,人工智能,科學(xué)計(jì)算方面根本沒有好用的gem北启。我認(rèn)為Ruby是否低迷不一定卜朗,同樣作為圖靈完備語言,只要想咕村,都是可以做的(商業(yè)公司要考慮成本問題场钉,而且商業(yè)公司居多),Ruby在其它方面確實(shí)落后Python很多懈涛,未來Ruby的應(yīng)用領(lǐng)域應(yīng)該是某個(gè)領(lǐng)域的某個(gè)部分逛万,在某些有特殊要求的地方用自己的強(qiáng)大DSL能力給開發(fā)者一個(gè)簡(jiǎn)單的解決方案。
從語言的角度也可以這樣看批钠,Python在語言密度和語義表達(dá)方面做到了一個(gè)平衡宇植,才會(huì)有這么多的人去使用得封,而Ruby的語言密度和語義表達(dá)都比Python要高一些,受眾小也是自然的指郁。
另外Metasploit真好用忙上。
以上是個(gè)人淺薄感想,如果有不正確的地方還請(qǐng)?zhí)岢觥?/p>