iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 2
0
自我挑戰組

Metaprogramming Ruby and Rails系列 第 2

Day 2 -- What is Metaprogramming ?

What is metaprogramming in Ruby?

這是我看到書封面時,腦中的第一個問題:什麼是 Metaprogramming ? 然而本書作者在第一章節的第一句話就已經回答了。

"Metaprogramming is writing code that writes code " from Metaprogramming Ruby

很糗的是作者的回答並沒有解決我心中的疑問…程式會自己寫code的話,那是人工智慧嗎?
再看看維基百科中文版的註解是:

元程式設計(英語:Metaprogramming),又譯超程式設計,是指某類電腦程式的編寫,這類電腦程式編寫或者操縱其它程式(或者自身)作為它們的資料,或者在執行時完成部分本應在編譯時完成的工作。多數情況下,與手工編寫全部代碼相比,程式設計師可以獲得更高的工作效率,或者給與程式更大的靈活度去處理新的情形而無需重新編譯。

看完之後,好像有比較暸解了,但是實際上的運作還是一知半解,所以又去查了英文版的解釋:

Metaprogramming is a programming technique in which computer programs have the ability to treat other programs as their data. It means that a program can be designed to read, generate, analyze or transform other programs, and even modify itself while running. In some cases, this allows programmers to minimize the number of lines of code to express a solution, in turn reducing development time. It also allows programs greater flexibility to efficiently handle new situations without recompilation.

我們先來淺談『編譯式語言 VS 直譯式語言』

編譯式語言 (C++, Visual Basic…)

Compiled language 是需要在程式執行前經過編譯器 (complier) 編譯後,再翻譯成電腦看得懂的機器碼(machine code)才能夠執行。其優點是執行速度會比較快,因為已經編譯過了,可以直接讓電腦執行了。不過缺點是程式語言的開發及除錯會相對較慢

直譯式語言(Ruby, Javascript…)

Interpreted language 則是省略了編譯器的檢查,雖然可以在執行期間就可除錯、查詢及編譯程式碼,但需要ㄧ句ㄧ句的執行,因此速度會比編譯式語言要來得慢。

認識了 Ruby 身為直譯式語言的本質,再結合書中第一句對 Metaprogramming 的解釋,更為合適的定義是:

"Metaprogramming is writing code that manipulates language constructs at runtime" from Metaprogramming Ruby 

仔細詳讀後,忽然想起這不就是在講我們熟悉的 Ruby on Rails 開發框架嗎?毫無疑問地, Rails 是至今最快速的的網站開發框架之一。其中的原因之一就是說都說不完的黑魔法,例如:它幫助開發者省略了許多網頁開發套件的整合、跟資料庫的溝通、前端畫面的呈現等...,甚至在裝備 StimulusReflex 套件下,不需要寫任何 javascript 程式碼就可以有即時互動的功能。

最後

這些無止盡的黑魔法背後的幕後工程倒底是如何運作的呢?
期望30天過後,我們都能覺得 “ 喔..原來這是那樣運作的呀!”


上一篇
Day 1 -- 參賽宣言
下一篇
Day 3 -- Open Class
系列文
Metaprogramming Ruby and Rails33

尚未有邦友留言

立即登入留言