《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装
本節(jié)書摘來自異步社區(qū)《Ruby程序員修煉之道》一書中的第1章,第1.2節(jié)剖析Ruby的安裝,作者【美】David A. Black(戴維 A. 布萊克),更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“異步社區(qū)”公眾號查看。
1.2 剖析Ruby的安裝
在系統(tǒng)上安裝Ruby意味著在許多磁盤目錄中安裝了Ruby語言的庫和支持文件。大多數(shù)時(shí)候,Ruby都知道如何找到其所需要的這些目錄而不用彈出提示。但是了解Ruby安裝的知識對了解Ruby本身大有益處。
查看Ruby的源代碼
除了Ruby安裝目錄體系之外,Ruby的源代碼目錄也安裝好了。如果沒有,可以到Ruby的主頁中下載。源代碼目錄中包含了許多在最終安裝中出現(xiàn)的Ruby文件和許多已編譯為目標(biāo)文件并安裝好的C語言文件。另外,源代碼目錄包含了一些如ChangeLog和軟件授權(quán)文件這樣的資料類型文件。
Ruby安裝文件的位置很容易獲取。要得到這些信息,只需要在irb會話中加載名為rbconfig的Ruby庫。rbconfig是一個(gè)接口,通過它可以得到關(guān)于Ruby安裝的許多內(nèi)部編譯的配置信息,可以通過irb的命令行標(biāo)志-r和指定的包名調(diào)用irb去加載它:
$ irb --simple-prompt -rrbconfig
現(xiàn)在可以獲取這些信息了。例如,可以找到Ruby可執(zhí)行文件(包括ruby和irb)的安裝目錄:
RbConfig::CONFIG["bindir"]
RbConfig::CONFIG是一個(gè)引用散列(hash,是一種數(shù)據(jù)結(jié)構(gòu))的常量,用于在Ruby中保存配置信息。字符串"bindir"是散列的主鍵。用"bindir"這個(gè)主鍵查詢散列將返回對應(yīng)的值,這個(gè)值是安裝二進(jìn)制文件的目錄名。
其余的配置信息也使用相同的方式獲取:通過散列的主鍵訪問配置信息中的值。如果要獲得其他安裝信息,在irb命令中替換bindir為其他詞語。但是每次都要遵循相同的基本原則:RbConfig::CONFIG["術(shù)語"]。表1-5概括了這些術(shù)語及其指向的目錄。
這就是對Ruby主要的安裝目錄和其包含內(nèi)容的一個(gè)概述。此刻不必記住它們,但要意識到需要時(shí)如何找到它們(或者好奇時(shí)瀏覽一下并查看Ruby的代碼示例!)。
1.2.1 Ruby標(biāo)準(zhǔn)庫子目錄(RbConfig::CONFIG[rubylibdir])
在rubylibdir目錄中,可以看到用Ruby編寫的程序文件。這些文件提供了標(biāo)準(zhǔn)庫的功能,如果需要它們提供的功能,可以在程序中請求(require)它們。在本目錄中可以找到以下文件。
- cgi.rb:CGI編程工具庫。
- fileutils.rb:易用的文件操作實(shí)用工具。
- tempfile.rb:自動(dòng)創(chuàng)建臨時(shí)目錄的機(jī)制。
- drb.rb:分布式編程工具。
在標(biāo)準(zhǔn)庫中有一些庫,如drb,由多個(gè)文件構(gòu)成。可以看到目錄中有一個(gè)drb.rb文件,并且整個(gè)drb子目錄包含了drb庫的所有組件。
瀏覽rubylibdir子目錄能夠?qū)uby提供的編程工具所能完成的任務(wù)有一個(gè)感性認(rèn)識(也許一開始就是顛覆性的)。大多數(shù)程序員只使用了這些工具的子集,但這些巨大的編程庫集合的子集也已經(jīng)能夠提供許多功能。
1.2.2 C語言擴(kuò)展目錄(RbConfig::CONFIG[archdir])
通常archdir目錄位于rubylibdir下的第一級目錄中,它包含了特定架構(gòu)的擴(kuò)展和庫文件。通常在目錄中,這些文件都是以.so、.dll、.bundle(依賴于硬件和操作系統(tǒng))為文件擴(kuò)展名的。這些文件是C語言擴(kuò)展:它們是二進(jìn)制文件,是運(yùn)行時(shí)可加載的文件,由Ruby的C語言擴(kuò)展代碼生成,并在Ruby安裝過程中編譯成為二進(jìn)制格式。
如在rubylibdir目錄中的Ruby語言程序文件,archdir目錄中的文件包含了能夠加載到用戶程序的標(biāo)準(zhǔn)庫組件。(除此之外,還有一些rbconfig的擴(kuò)展文件,這些擴(kuò)展可以使用irb命令去發(fā)現(xiàn)它們。)這些文件不是用戶可讀的,但是Ruby的解釋器可以讀懂它們。從Ruby程序員的視角來說,由于它們都被編譯為了二進(jìn)制格式文件,所以所有的標(biāo)準(zhǔn)庫使用都是一樣的,不管它們是用Ruby編寫的還是用C語言編寫的。
安裝在archdir目錄的文件,每個(gè)平臺安裝的都不相同,它們依賴于其被編譯的擴(kuò)展。這個(gè)擴(kuò)展又反過來取決于由個(gè)人請求編譯的內(nèi)容和Ruby能夠編譯的擴(kuò)展所組成的代碼庫。
1.2.3 site_ruby(RbConfig::CONFIG[sitedir])和vendor_ruby (RbConfig::CONFIG[vendordir])目錄
在Ruby安裝目錄中包括一個(gè)名為site_ruby的子目錄,它用于存儲用戶和系統(tǒng)管理員安裝的第三方擴(kuò)展和庫文件。該目錄中可能包括了用戶所寫的程序,還有一些從其他網(wǎng)站下載的工具包,以及Ruby庫文件的存檔。
site_ruby目錄包含Ruby語言和C語言的不同子目錄(是RbConfig::CONFIG中不同的兩個(gè)項(xiàng),分別為sitelibdir和sitearchdir),就這個(gè)意義而言,其與Ruby主安裝目錄并存在一個(gè)目錄下。當(dāng)用戶請求一個(gè)擴(kuò)展,Ruby解釋器檢查site_ruby下的子目錄,也同時(shí)檢查主rubylibdir目錄和主archdir目錄。
與site_ruby目錄并存的是vendor_ruby目錄。第三方的擴(kuò)展都安裝于此。vendor_ruby目錄首次出現(xiàn)是在Ruby1.9中,從這兩個(gè)目錄中獲得的包仍然在不斷發(fā)展中。
1.2.4 gems目錄
RubyGems實(shí)用工具是打包和發(fā)布Ruby庫文件的標(biāo)準(zhǔn)方式。當(dāng)用戶安裝gems(被稱為包)時(shí),未綁定的庫文件則會放置于gems目錄。這個(gè)目錄沒有在配置數(shù)據(jù)結(jié)構(gòu)(RbConfig::CONFIG) 中列出,但是通常都和site_ruby在同一級目錄。假如讀者找到了site_ruby,便可以看看gems目錄中還安裝了什么。在1.4.5節(jié)中將會了解更多關(guān)于gems的知識。
在這一節(jié)中,學(xué)到了Ruby調(diào)用擴(kuò)展的機(jī)制和語義,這也是編寫和安裝擴(kuò)展時(shí)需要用到的知識。
總結(jié)
以上是生活随笔為你收集整理的《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activiti实战. 导读
- 下一篇: MATLAB 数据分析方法(第2版)1.