Rails並不是用Ruby編寫的
這是來自波蘭人solnic.codes的帖子,大意如下:
波蘭語是一門非常難學的語言,它實際上被認為是世界上最難學習的 10 種語言之一。在波蘭,就像在許多其他國家一樣,有些地區使用方言而不是“純粹”的語言形式,所以在我的城市,我們有自己的方言。
程式語言也有方言,根據定義,程式語言方言是“語言的(相對較小的)變體或擴充套件,不會改變其內在性質”。這種變化或擴充套件是如何實現的並不重要。重要的部分是原始語言得到了擴充套件,它提供了更多的功能,而它的原始性質和行為保持不變。
Ruby是一種具有開放類的程式語言,即使是語言的核心功能也可以通過簡單地向核心類新增新方法來擴充套件,例如String或Array. 這使得建立自己的 Ruby 方言變得非常簡單!
DHH 在建立 Ruby on Rails 框架時就利用了 Ruby 的這一獨特功能。這個框架的基礎是一個名為 ActiveSupport 的庫——一個核心 Ruby 擴充套件的大集合,它們共同建立了一個 Ruby 方言,一個 Ruby 語言的擴充套件版本,它不會改變它的內在本質。
如果你試圖從 Rails 中刪除 ActiveSupport,一切都會崩潰。
Monkey-patching是另一種說法,即某段程式碼通過利用Ruby中的開放類來改變一個現有的類。ActiveSupport庫對許多類進行了Monkey-patch,目前在其core_ext目錄下有3471個LOC。
當你有一個庫,一個 ruby gem,它為核心類新增了如此大量的新方法時,理解這一點很重要:
- 您不再使用 Ruby,您現在使用的是 Ruby 方言,實現為名為 ActiveSupport 的庫
- 您必須知道,您在應用程式程式碼中新增到自己的類的方法可能會導致與 ActiveSupport 發生衝突
- 構建其他庫(也是猴子補丁核心類)是一個非常糟糕的主意,因為它們也會導致衝突
前段時間,我們有很大依賴monkey-patching的ruby gems,我們甚至有一個旨在與 Rails 競爭的全棧框架。它被稱為 Merb,它也有類似 ActiveSupport 的東西,它被稱為 extlib。正如您可能猜到的那樣——它導致了與 ActiveSupport 的衝突,因此在同一個程式碼庫中使用這兩個庫並不可行。
不過,Merb 和 Rails “合併”到了 Rails 3 中,這就是我們不再有“extlib 問題”的原因,因為庫已經消失了。
隨著時間的推移,許多從事各種 gem 的 Ruby 開發人員已經瞭解了monkey-patching的缺點,並且乾脆停止了。
不幸的是,即使大多數 gem 不再依賴於monkey-patchin,我們仍然有 ActiveSupport,因為它是 Rails 的基礎部分。畢竟,框架是用 ActiveSupport Ruby 方言編寫的!
不過,問題的癥結在於:
作為 Ruby 方言的一部分實現的 API 看起來“更好”、更簡潔和自然
為什麼?因為它看起來像是語言的一部分!這就是為什麼像這樣的東西1.day.ago看起來如此“自然”。除了它不是 Ruby ,因為它是 ActiveSupport。
更多點選標題
相關文章
- Ruby on Rails?有人會用嗎?AI
- rails on ruby,ruby on rails 之程式碼塊(二)AI
- [ruby] rails renderAI
- Ruby on Rails 生成指定版本的 Rails 專案AI
- ruby on rails 小技巧AI
- Ruby on Rails 相關AI
- Ruby On Rails 技術AI
- 如何提高 Ruby On Rails 的效能?AI
- Ruby on Rails Ping ++ 支付AI
- do |r| Ruby & Rails endAI
- 什麼是 Ruby on Rails?AI
- 如何提高 Ruby On Rails 效能AI
- java 和 Ruby On Rails的對比JavaAI
- ruby on rails筆記和理解AI筆記
- ruby on rails 伺服器配置AI伺服器
- .nil? .empty? .blank? .present? in Ruby on RailsAI
- Ruby on Rails Mountable vs. Full EngineAI
- Ruby on rails專案中 引入BootstrapAIboot
- 使用 Ruby on Rails 開發 Go 介面AIGo
- Ruby社群應該去Rails化了AI
- 使用 Typhoeus 和 Ruby 編寫的爬蟲程式爬蟲
- ruby on rails腳手架之初體驗AI
- Ruby On Rails 另一個笑談而已AI
- Ruby on Rails中的MVC架構是如何工作的AIMVC架構
- 為 Web 開發提供的 10 個 Ruby on Rails GemsWebAI
- 為Ruby On Rails開發者準備的5款IDEAIIDE
- 從NodeJS切換到Ruby on Rails - nikodunkNodeJSAI
- 在Ubuntu 15.04中安裝Ruby on RailsUbuntuAI
- Ruby On Rails實踐—中文亂碼問題AI
- Ruby on Rails HTML表單語句大全[Z]AIHTML
- 肖威洞察 | Ruby on Rails 的快速學習的體系框架;AI框架
- 26本 Ruby/Rails 相關英文圖書的簡評AI
- Rails不是入門的好東西(gateway drug)AIGateway
- Hprose-ruby與Rails結合使用心得ROSAI
- 在Windows下配置Ruby on Rails開發環境WindowsAI開發環境
- Ruby on Rails:開源技術將深入企業AI
- 12 款不可錯過的開源 Ruby on Rails 開發工具AI
- 10 個必備而且非常有用的 Ruby on Rails 4 GemsAI