什么是元编程(meta-promgramming)?
生活随笔
收集整理的這篇文章主要介紹了
什么是元编程(meta-promgramming)?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
可以擴(kuò)展程序自身,這樣的能力,為元編程。
比如Ruby,使用元編程可以擴(kuò)展出領(lǐng)域?qū)S谜Z言DSL, 比如RSpec、puppet、chef等。相對于新創(chuàng)造的領(lǐng)域?qū)S谜Z言DSL來說, Ruby語言就成為其的元語言,所以叫做元編程 。
「我的電話是 +86 123 4567 8910」
——這是一條數(shù)據(jù);
「+86 123 4567 8910 有十三個(gè)數(shù)字和一個(gè)字符,前兩位是國家代碼,后面是一個(gè)移動(dòng)電話號碼」 —— 這是關(guān)于前面那條數(shù)據(jù)的數(shù)據(jù)。
如此說來,inline SQL 甚至動(dòng)態(tài)生成 HTML 也是元編程了?摳定義的話是這樣吧。元編程是用代碼在編譯期或運(yùn)行期生成/改變代碼。除非程序的運(yùn)行期的輸入數(shù)據(jù)會(huì)被直接或間接轉(zhuǎn)化成代碼,否則元編程不會(huì)給程序帶來新的邏輯(信息論原理),此時(shí)它本質(zhì)上是一種(讓程序員自我感覺良好的)手工壓縮源代碼技術(shù)。
不過 metaprogramming 更狹義的意思應(yīng)該是指「編寫能改變語言語法特性或者運(yùn)行時(shí)特性的程序」。換言之,一種語言本來做不到的事情,通過你編程來修改它,使得它可以做到了,這就是元編程。本版同文提及 method_missing,那么 Wat — Destroy All Software Talks 之中給出了運(yùn)行時(shí)元編程的經(jīng)典范例: >> ruby has no bare words NameError: undefined local variable or method `words' for main:Objectfrom (irb) 1 >> def method_missing(*args); args.join(" "); end => nil >> ruby has bare words => "ruby has bare words" >> bare words can even have bangs! => "bare words can even have bangs!" C、C++、Python、JavaScript…… 多數(shù)流行的語言或多或少都有元編程能力;Lisp 諸方言更是以元編程為基本。而 Ruby 更是因?yàn)樵幊桃子糜謴?qiáng)大,被許多人拿來寫 DSL,因?yàn)樵幊炭梢阅蟪觥副静淮嬖诘恼Z法特性」來讓書寫 DSL 變得簡單。總結(jié)
以上是生活随笔為你收集整理的什么是元编程(meta-promgramming)?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整理学习:100多道前端面试题(一起加油
- 下一篇: python里sample_python