什么是元编程(meta-promgramming)?
生活随笔
收集整理的這篇文章主要介紹了
什么是元编程(meta-promgramming)?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可以擴展程序自身,這樣的能力,為元編程。
比如Ruby,使用元編程可以擴展出領域專用語言DSL, 比如RSpec、puppet、chef等。相對于新創造的領域專用語言DSL來說, Ruby語言就成為其的元語言,所以叫做元編程 。
「我的電話是 +86 123 4567 8910」
——這是一條數據;
「+86 123 4567 8910 有十三個數字和一個字符,前兩位是國家代碼,后面是一個移動電話號碼」 —— 這是關于前面那條數據的數據。
如此說來,inline SQL 甚至動態生成 HTML 也是元編程了?摳定義的話是這樣吧。元編程是用代碼在編譯期或運行期生成/改變代碼。除非程序的運行期的輸入數據會被直接或間接轉化成代碼,否則元編程不會給程序帶來新的邏輯(信息論原理),此時它本質上是一種(讓程序員自我感覺良好的)手工壓縮源代碼技術。
不過 metaprogramming 更狹義的意思應該是指「編寫能改變語言語法特性或者運行時特性的程序」。換言之,一種語言本來做不到的事情,通過你編程來修改它,使得它可以做到了,這就是元編程。本版同文提及 method_missing,那么 Wat — Destroy All Software Talks 之中給出了運行時元編程的經典范例: >> 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…… 多數流行的語言或多或少都有元編程能力;Lisp 諸方言更是以元編程為基本。而 Ruby 更是因為元編程易用又強大,被許多人拿來寫 DSL,因為元編程可以捏出「本不存在的語法特性」來讓書寫 DSL 變得簡單。總結
以上是生活随笔為你收集整理的什么是元编程(meta-promgramming)?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整理学习:100多道前端面试题(一起加油
- 下一篇: 《转发》django如何自定义404以及