我只是在Coursera聽講座(https://www.coursera.org/saas/),教授說Ruby中的一切都是一個對象,並且每個方法調用都在對象上調用send方法,並傳遞一些參數給它。這包括數字,數組和其他基本類。Ruby效率
我去谷歌和尋找效基準,我發現了以下內容:http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.html
雖然它不是令人震驚的是編譯語言比解釋的速度更快,(紅寶石,蟒蛇)和Java之間的性能差異比如令人震驚。
即使有一種編譯ruby代碼的方法(我還沒有研究過這個主題),我認爲由於核心「問題」在語言中效率問題仍然存在: 基本操作太重了: 1 + 1需要更多的CPU週期才能完成。
我愛Ruby。我喜歡元編程的高層次方面,我認爲這是未來應該前進的方向,我同意,有時我們需要妥協某些事情才能更有效:我沒有看到自己在彙編中優化我的代碼爲了節省幾個額外的毫秒。但是,當我們在C中執行1 + 1時,它不會成倍增加基本操作的時間量!
我的問題是你們如何處理密集型操作程序?我們有一個我們已經開發了大約一年的Ruby on Rails項目,現在我們開始做一些機器學習,並進行地理位置遍歷和優化。
我希望你明白我的顧慮,並提供:-)
對於在ruby中添加兩個fixnums所花費的時間沒有任何指數。它仍然是'O(1)'(並且添加兩個bignum是'O(log n)')。 – sepp2k 2012-03-03 09:44:57
Ruby中的1 + 1查找1的類型,發現它是一個Fixnum,在查找表中查找+方法,執行它並返回結果。它需要一些額外的步驟,這是一個固定的數字,理論上,你是對的,這是一個O(1)。但實際上,如果每種方法都這樣做,所花費的時間就會「呈指數級增長」(正如我在基準測試中所看到的那樣)。我傾向於區分理論算法複雜性和實際算法複雜性。桶排序是要看看http://en.wikipedia.org/wiki/Bucket_sort – Abdo 2012-03-03 09:58:43
不,如果一切方法做到這一點,時間增加是線性的。每次添加方法調用時,程序的運行時間不會加倍。它增加了一個不變的因素。您可以儘可能多地區分理論和現實生活 - 「指數」仍然不是「大」的同義詞。 – sepp2k 2012-03-03 10:04:45