亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
樓主: send_linux
打印 上一主題 下一主題

《ruby元編程》有獎(jiǎng)試讀中!(獲獎(jiǎng)名單已公布) [復(fù)制鏈接]

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期:2018-03-27 11:59:132015年亞洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49雙魚(yú)座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亞冠之布里斯班獅吼
日期:2015-07-13 10:44:56
31 [報(bào)告]
發(fā)表于 2012-02-28 10:42 |只看該作者
元編程誰(shuí)也比不上 Lisp 吧,但是畢竟元編程在程序中只占很小比例。Easy things should be easy and hard things should be possible Perl 中這名格言我想很適合這里。日常應(yīng)用方面 Lisp 相當(dāng)?shù)谋瘎,想要用個(gè)模塊找不到,處理字符串感覺(jué)像在寫(xiě)匯編,數(shù)學(xué)計(jì)算方面前置語(yǔ)法看的人想死……

Ruby 在提供常用功能的情況下讓元編程同自己的語(yǔ)言模型比較好的結(jié)合起來(lái),這些就夠了,作者也沒(méi)狂妄到要超越 Lisp 吧。

可以省掉調(diào)用的括號(hào)很有用啊畢竟函數(shù)當(dāng)參數(shù)在 Ruby 中更少用,它用 BLOCK 語(yǔ)法省掉了不少高階函數(shù)。另外千萬(wàn)別噴我啊,我也是 Lisp 黨

論壇徽章:
0
32 [報(bào)告]
發(fā)表于 2012-02-28 11:20 |只看該作者
本帖最后由 琳琳的小狗 于 2012-02-28 11:40 編輯

回復(fù) 30# OwnWaterloo

其實(shí)繞到最后,兄臺(tái)挖了個(gè)坑自己跳下去了。還記得最初的討論焦點(diǎn)么?導(dǎo)火索來(lái)自于《Ruby元編程》中作者有利用Ruby語(yǔ)法優(yōu)勢(shì)貶低其他語(yǔ)言(如C++、以及Lisp)的嫌疑,F(xiàn)在回頭看看,不正是以FP語(yǔ)言之長(zhǎng)來(lái)對(duì)比Ruby的短板么?

Ruby社區(qū)以Pragmatic為宗旨,屬于實(shí)戰(zhàn)派,相比Lisp這種學(xué)院派的風(fēng)格來(lái)說(shuō),的確是不太一樣(當(dāng)然,你也可以說(shuō)是因?yàn)镕P另類(lèi))。面向?qū)ο笳Z(yǔ)言之所以獲得大多數(shù)人的關(guān)注,其中最大的一個(gè)原因就是他盡力去模擬現(xiàn)實(shí)生活中的事物,比較符合人類(lèi)的心智模型,要不然FP這么優(yōu)雅高級(jí),怎么就流行不起來(lái)呢?lua還好點(diǎn),恕在下孤陋寡聞,還真沒(méi)在多少場(chǎng)合下見(jiàn)到Lisp的大規(guī)模應(yīng)用。俗話說(shuō)“工欲善其事,必先利其器”,就那我最熟悉的Web應(yīng)用開(kāi)發(fā),以及自動(dòng)化測(cè)試來(lái)講,使用Ruby這類(lèi)動(dòng)態(tài)語(yǔ)言才是最佳選擇。

感覺(jué)OO實(shí)在是被妖魔化了,如果真如某些人所言,那怎么有這么多語(yǔ)言都以此為賣(mài)點(diǎn)?比如javascript,還有風(fēng)頭正旺的Objective C,為何不搞成純FP呢?個(gè)人認(rèn)為,F(xiàn)P太過(guò)于抽象的思維是其受阻的最大原因,另一個(gè)原因就是源代碼的可讀性,Lisp那括號(hào)語(yǔ)法,以及前綴表達(dá)式,都給初學(xué)者帶來(lái)了不小的障礙。還記得SICP第一章的導(dǎo)言么?作者是這么說(shuō)的:“程序是寫(xiě)給人看的,機(jī)器順便執(zhí)行”。同樣的道理,映射到Ruby中來(lái),方法調(diào)用可省略括號(hào)、各種操作符比如加號(hào)的語(yǔ)法糖,無(wú)一不是為了實(shí)現(xiàn)整潔、易讀的代碼而設(shè)計(jì)的,《Ruby元編程》一書(shū)中指代的“程序員友好”就在這里。

至于我的回帖中引入Ruby實(shí)現(xiàn)的Lisp解釋器,僅僅只是想說(shuō)明,如果你愿意,使用這種帶有一定約束條件的內(nèi)部DSL,也是完全可以實(shí)現(xiàn)FP那些特性的。但是,可以歸可以,為什么沒(méi)人去這么干呢?這是個(gè)問(wèn)題。Rubyist一般都會(huì)采取最簡(jiǎn)單的辦法來(lái)實(shí)現(xiàn)手頭的任務(wù),如果開(kāi)發(fā)過(guò)程中,真要我去實(shí)現(xiàn)一個(gè)map,那我頂多這么做:
  1. def map(operate, *args)
  2.   args.shift.zip(*args).map {|pair| pair.reduce operate}
  3. end

  4. p (map :+, [1, 2, 3], [4, 5, 6], [7, 8, 9]) #輸出[12, 15, 18]
  5. p (map :push, [[1, 2],[3,4]], [5,6], [7, 8]) #輸出[[1, 2, 5, 7], [3, 4, 6, 8]]
復(fù)制代碼
的確,正如你說(shuō),利用了zip和reduce,但是就API的使用者而言,真的有區(qū)別么?拿BDD的理論來(lái)比擬,客戶(hù)是關(guān)注你軟件的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),還是更關(guān)注于產(chǎn)品的功能和行為?

大乘佛藏經(jīng)雖然牛逼,可以普度眾生,還不是需要唐僧師徒一行遠(yuǎn)涉萬(wàn)里西天取經(jīng)么?同理,如果沒(méi)有人推廣傳授,F(xiàn)P可能永遠(yuǎn)都是實(shí)驗(yàn)室那些科學(xué)怪人們的小蜜,僅此而已。所以我倒是覺(jué)得,其他語(yǔ)言能借鑒其中好的思想,并將其應(yīng)用到實(shí)戰(zhàn)總來(lái),這絕對(duì)是有百益而無(wú)一害的好事情。他山之石可以攻玉,在Ruby社區(qū)這樣一個(gè)滿懷包容性、以及上進(jìn)心的生態(tài)環(huán)境中,作為其中的一員,我很欣慰。還是那句老話,切莫跑題,先拋棄成見(jiàn),就這本書(shū)的內(nèi)容進(jìn)行展開(kāi)討論吧:)

論壇徽章:
0
33 [報(bào)告]
發(fā)表于 2012-02-28 12:56 |只看該作者
狂熱的PK,能讓人熱血沸騰,但轉(zhuǎn)過(guò)身之后,還需要大家冷靜、理性地選擇合適的技術(shù),總之,我喜歡Ruby!

論壇徽章:
0
34 [報(bào)告]
發(fā)表于 2012-02-28 15:22 |只看該作者
還可以吧,沒(méi)什么特別的感覺(jué),技術(shù)類(lèi)的圖書(shū)都差不多。。

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
35 [報(bào)告]
發(fā)表于 2012-02-28 17:10 |只看該作者
回復(fù) 31# zhlong8

>> 但是畢竟元編程在程序中只占很小比例
no。 是因?yàn)樵幊淘谄渌Z(yǔ)言里不容易,所以才占很小比例。


>> 日常應(yīng)用方面 Lisp 相當(dāng)?shù)谋瘎?br /> 目前我也覺(jué)得是這樣。

討論語(yǔ)言時(shí),一部分人是將語(yǔ)言、語(yǔ)言實(shí)現(xiàn)、語(yǔ)言所在環(huán)境一起在討論。
而一部分人,比如我在這個(gè)帖子里,是僅僅討論語(yǔ)言本身。

因?yàn)檫@幾者本來(lái)就是分開(kāi)的概念。
例如,Java語(yǔ)言(實(shí)現(xiàn)只有一個(gè))很爛,但JVM環(huán)境還不錯(cuò),至少很豐富,移植性很好,安裝程度也很普遍。
于是clojure(實(shí)現(xiàn)也只有一個(gè))出現(xiàn)了,lisp+JVM……  等haskell學(xué)完了(學(xué)得會(huì)么我……)下一個(gè)可能就是它了……
又或者h(yuǎn)askell遇到瓶頸了(已經(jīng)遇到了……) 與clojure同步學(xué)……

類(lèi)似的,Lua是一個(gè)好語(yǔ)言,也是一個(gè)好的實(shí)現(xiàn)。但環(huán)境就匱乏了。
于是雖然我沒(méi)事就挑Python/emacs lisp毛病,但日常應(yīng)用方面還是得用它或者emacs lisp……


>> 數(shù)學(xué)計(jì)算方面前置語(yǔ)法看的人想死
可以自己寫(xiě)個(gè)宏,將表達(dá)式從中綴解析為后綴。
如果數(shù)學(xué)計(jì)算的比例很多的話。


>> 作者也沒(méi)狂妄到要超越 Lisp 吧。
我想作者應(yīng)該沒(méi)有。 但用戶(hù)呢?

有Python程序員,甚至是個(gè)知名人士,宣稱(chēng)Python是lisp —— 《關(guān)于Lisp最迷人的故事》。
JS也想?yún)⒑,說(shuō)JS=C+Lisp,(文章名我忘了,因?yàn)閮?nèi)容太狗血了…… 。
說(shuō)是因?yàn)镴S學(xué)了C的語(yǔ)法…… C的語(yǔ)法毫無(wú)亮點(diǎn),中綴聲明是被詬病的存在好嗎……
而從Lisp里學(xué)了什么我真沒(méi)看出來(lái)……  因?yàn)镴S的設(shè)計(jì)者是個(gè)scheme程序員?
或者是gc? dynamic typing? first class function? closure? 我都不好意思說(shuō)if-else與recursion了……  但是, who doesn't

而Ruby,貌似有篇文章名字叫做: ruby is an acceptable lisp。
觀點(diǎn)有2:
1. ruby語(yǔ)法比lisp好
2. lisp元編程功能的80%在ruby中都可以實(shí)現(xiàn)

我是學(xué)了lisp之后才明白為什么這些語(yǔ)言都想與lisp扯上關(guān)系:真像給自己臉上帖金了一樣。
但沒(méi)有一個(gè)學(xué)到了lisp的精髓。 syntax friendly從來(lái)就不是lisp的精髓, 而且會(huì)影響AST的直觀性。
所以ruby那篇第1個(gè)觀點(diǎn)就站不住腳。 第2個(gè)觀點(diǎn)我很懷疑80%這個(gè)數(shù)據(jù)。
也許能完成80%的功能, 但不是以lisp的元編程的方式。
直到現(xiàn)在我都不能肯定ruby里能夠code transformation。 而且即使能, 多樣的語(yǔ)法也許也會(huì)造成轉(zhuǎn)換時(shí)的障礙。


>> 可以省掉調(diào)用的括號(hào)很有用啊畢竟函數(shù)當(dāng)參數(shù)在 Ruby 中更少用,它用 BLOCK 語(yǔ)法省掉了不少高階函數(shù)。
我沒(méi)說(shuō)它沒(méi)用……
block語(yǔ)法,不是1st class value,需要Proc.new/lambda后才是。 這也許是松本一開(kāi)始的設(shè)計(jì)失誤。
省略調(diào)用的括號(hào)更是讓函數(shù)也降級(jí)了, f 也不是 1st class value, 需要 method 后才是。 這是"友好"語(yǔ)法產(chǎn)生的代價(jià)。
一個(gè)影響函數(shù)傳出,一個(gè)影響函數(shù)傳入…… 這還怎么算是函數(shù)式語(yǔ)言?

注意……  我前面也強(qiáng)調(diào)了, 不是說(shuō)Ruby就一定要有l(wèi)isp那樣元編程, 就一定要支持FP。
它不支持是它的選擇。 如果能用其他方式,比如OO,表達(dá)思想依然沒(méi)什么可挑剔的。
但是:
1. 許多表達(dá)不是OO專(zhuān)屬的,僅僅只是Ruby這么選擇了
2. 如果Ruby不支持lisp那樣的元編程, 就不要說(shuō)它支持
3. 如果Ruby對(duì)FP的支持是這種樣子…… 至少?zèng)]法說(shuō)服我Ruby是個(gè)函數(shù)式語(yǔ)言……

與上面的X語(yǔ)言是否是Lisp一樣。 許多語(yǔ)言也稱(chēng)自己是函數(shù)式…… 就像java說(shuō)自己支持generic……
其實(shí)FP并不是個(gè)很精確的定義, 但它常使用的那些構(gòu)造就有比較精確的定義。
在這些定義下這些號(hào)稱(chēng)FP的語(yǔ)言各有各的問(wèn)題,而Ruby的問(wèn)題是很?chē)?yán)重的。 前面已經(jīng)說(shuō)了這里就不重復(fù)了。



>> 另外千萬(wàn)別噴我啊,我也是 Lisp 黨
我像在噴人么……  我一般只會(huì)噴Java、OO、設(shè)計(jì)模式等等…… 現(xiàn)在也有點(diǎn)懶得噴了……

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
36 [報(bào)告]
發(fā)表于 2012-02-28 17:21 |只看該作者
回復(fù) 32# 琳琳的小狗

>> 其實(shí)繞到最后,兄臺(tái)挖了個(gè)坑自己跳下去了。還記得最初的討論焦點(diǎn)么?導(dǎo)火索來(lái)自于《Ruby元編程》中作者有利用Ruby語(yǔ)法優(yōu)勢(shì)貶低其他語(yǔ)言(如C++、以及Lisp)的嫌疑。現(xiàn)在回頭看看,不正是以FP語(yǔ)言之長(zhǎng)來(lái)對(duì)比Ruby的短板么?

承認(rèn)FP是Ruby的短板了?  那我部分目的也達(dá)到了。

我一直記得討論是怎么展開(kāi)的:
1. 我認(rèn)為那些技術(shù)不是OO的專(zhuān)利,只是Ruby選擇了OO來(lái)實(shí)現(xiàn)這些功能
2. 你質(zhì)疑我對(duì)OO的質(zhì)疑
3. 因?yàn)槲衣?tīng)許多人(不僅僅是你)說(shuō)Ruby是FP語(yǔ)言, 而我知道這兩種風(fēng)格結(jié)合在一起很容易出問(wèn)題

于是將那些容易出問(wèn)題的地方向你請(qǐng)教, 結(jié)果發(fā)現(xiàn)Ruby為了省略調(diào)用括號(hào)連1st class function都不支持……

而且我一直在強(qiáng)調(diào)…… 這很重要,我再重復(fù)一次……
不是說(shuō)Ruby必須支持FP,它支持OO也沒(méi)什么可挑剔的。
而是說(shuō)1) Ruby的那些功能不是OO的專(zhuān)利 2) 就不要再說(shuō)Ruby對(duì)FP的支持很好了好嗎……

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
37 [報(bào)告]
發(fā)表于 2012-02-28 17:35 |只看該作者
回復(fù) 32# 琳琳的小狗

關(guān)于OO的流行,與FP以及Lisp的不流行。  記得前面你說(shuō)的"不流行不代表不好"嗎?

說(shuō)OO符合人類(lèi)的心智模型,其實(shí)是在說(shuō)OO扯低了程序員的整體水平。
3.times ...  a.push(x) 才符合人類(lèi)心智? 而times(3, ...) push(a,x) 就不行? 這抽象思維水平是得有多低?
而且前者是后者的特殊化, 這種特殊化會(huì)另語(yǔ)言變得很復(fù)雜。 前面js與python的反例我舉了, lua的正例我舉了。
ruby的oo方面我接觸到的那一塊 —— 整個(gè)ruby中的一小部分 —— 已經(jīng)比lisp整體復(fù)雜了 ……

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
38 [報(bào)告]
發(fā)表于 2012-02-28 17:44 |只看該作者
回復(fù) 32# 琳琳的小狗

關(guān)于你那行代碼 map :push, [[1, 2],[3,4]], [5,6], [7, 8]
我似乎看到了ruby的希望, 只是不知道ruby是如何解釋這一行為的。

關(guān)于這里的語(yǔ)法問(wèn)題,以及省略調(diào)用括號(hào),加法操作符等等等等……
語(yǔ)法簡(jiǎn)單不等于語(yǔ)意簡(jiǎn)單。 有一個(gè)語(yǔ)法使得看代碼看上去好看, 寫(xiě)起來(lái)舒服, 但代碼是否真如看上去那樣的運(yùn)作?
于是無(wú)論語(yǔ)法如何簡(jiǎn)煉, 系統(tǒng)的學(xué)習(xí)一門(mén)語(yǔ)言終歸是要學(xué)習(xí)它的語(yǔ)意

lisp的語(yǔ)意 —— 此處特指emacs lisp,因?yàn)閏l/scheme是標(biāo)準(zhǔn)化的,由一兩個(gè)實(shí)現(xiàn)去解釋標(biāo)準(zhǔn)不合適……
我可以在10句話、200字以?xún)?nèi)說(shuō)解釋完。
其余的都是由語(yǔ)言自己實(shí)現(xiàn)的, 可以通過(guò)上面的核心語(yǔ)意去看這些機(jī)制的準(zhǔn)確定義。

而lisp的語(yǔ)法更是沒(méi)什么好說(shuō)的了…… 它的目的就是為了代碼寫(xiě)成什么樣子, 就讀(read procedure)做什么樣子……

ruby能做到嗎?

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
39 [報(bào)告]
發(fā)表于 2012-02-28 17:52 |只看該作者
回復(fù) 32# 琳琳的小狗

>> 所以我倒是覺(jué)得,其他語(yǔ)言能借鑒其中好的思想,并將其應(yīng)用到實(shí)戰(zhàn)總來(lái),這絕對(duì)是有百益而無(wú)一害的好事情。

也許ruby借鑒了smalltalk,但smalltalk我不了解……
但我了解smalltalk有一個(gè)特性, 叫image-based execution。 如果有興趣也許會(huì)去了解, 不過(guò)這東西在cl里面也有, 也許不會(huì)有那個(gè)空閑。

lisp我了解,ruby從lisp里借鑒的 —— 排開(kāi)其他許多語(yǔ)言都已經(jīng)借鑒過(guò)的 —— 是expression only。 這是值得肯定的。
但僅僅為了調(diào)用省略括號(hào)就拋棄1st class function…… 我覺(jué)得代價(jià)太大……
C我了解,我沒(méi)看出ruby從C里借鑒了什么…… 難道只是因?yàn)镃、Lisp招牌響亮就要說(shuō)自己是它們的后繼?


>> 他山之石可以攻玉,在Ruby社區(qū)這樣一個(gè)滿懷包容性、以及上進(jìn)心的生態(tài)環(huán)境中,作為其中的一員,我很欣慰。
no, Ruby是排外的, 前面已經(jīng)說(shuō)了它排斥FP與編譯。


>> 還是那句老話,切莫跑題,先拋棄成見(jiàn),就這本書(shū)的內(nèi)容進(jìn)行展開(kāi)討論吧:)

我有成見(jiàn)嗎? 我指出的那些問(wèn)題難道不是事實(shí)? 只是我對(duì)ruby的誤解?
關(guān)于跑題…… 這帖人氣高啊…… 要另外去開(kāi)一帖: ruby不是函數(shù)式語(yǔ)言, 就沒(méi)人來(lái)了啊……  我就學(xué)不到東西了啊…… 碼這么多字還干嘛呢……

論壇徽章:
0
40 [報(bào)告]
發(fā)表于 2012-02-28 21:03 |只看該作者
回復(fù) 39# OwnWaterloo


    Lisp是很強(qiáng)大,但是復(fù)雜度太高了。語(yǔ)言的目的是交流,不運(yùn)用就沒(méi)有價(jià)值。所以Lisp與其說(shuō)是語(yǔ)言不如說(shuō)是理論。就像大部分科學(xué)家潛在的內(nèi)心都對(duì)數(shù)學(xué)家有所嫉妒,有所自卑。諸多語(yǔ)言都羨慕Lsip的強(qiáng)大,并且從中吸取養(yǎng)分。所以?xún)烧邲](méi)有什么可比性。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP