Meta Programming 主要解決什麼了問題?

時間 2021-06-04 19:57:38

1樓:

Meta Programming 主要解決什麼了問題,我覺得這個問法不好,應該說 Meta Programming 是怎麼產生的。我更願意把元程式設計理解為一種解決方法的思路,或者看待程式設計問題的一種方式。這種方式就是過程分形的一種體現,所謂過程的分形,就是解決問題的整個過程,和解決問題中某個步驟,在形式上是一致的。

如同幾何圖案的分形,或者組織結構的分形一樣。

程式設計的整個過程就是把要解決的問題轉換為程式的過程。而元程式設計就是程式設計的程式設計,用程式將要解決的問題轉換為程式。這是一種很自然的想法。

其實整個計算機的發展史就是這樣。從機械裝置到通用計算機,我們將解決問題的方法(機械裝置就是硬編碼的方法)變成機器指令,相對於計算機,這些機器指令就是它的資料。然後我們建立了程式語言/編譯器/直譯器,用來將高階語言/抽象的問題藐視轉換為機器指令,那麼高階語言就是這些程式語言/編譯器/直譯器的資料,而此時機器語言是硬編碼的,而高階語言是資料。

我們再編寫各種應用軟體,此時高階語言本身又是硬編碼,而我們的資料成了資料……在每個層次上看,這個過程本身是一樣的,這就是過程的分形。

所以用程式處理程式,和把程式當成資料,是元程式設計的本質,而這種思想是很自然出現的。

2樓:zpan

把 template<...> 看作乙個函式,那麼模板就是一種可以把型別作為引數,並返回型別的函式。模板的本質就是對型別的運算。

3樓:ghost

元程式設計實現的抽象層次更高,提供了一種在執行期擴充套件自身的能力。。

如果,你需要定義100個方法。

1. 你可以編寫100個方法

2. 可以編寫乙個方法生成100個方法。

3. 實現乙個動態方法來接管某些呼叫請求。

在第二種情況下,這100個方法,在你編寫的原始碼裡面是找不到的,當程式執行時候,它動態裝載方法到記憶體裡,是真實存在的。 第三種情況下,即便是記憶體裡也找不到你方法的完整定義,它是乙個幽靈。在ruby中,它將被method_missing接管。

在某些情況下,你不知道你需要定義的方法的數量是未知的,如果你不想改變程式設計策略(例如換個解決方案的話),你需要借助元程式設計。

或者,根本就沒有元程式設計,從來都只有程式設計而已。

4樓:yishen chen

舉個栗子,django的ORM用的就是meta programing。

開發者可以直接把乙個抽象的物件對映到資料庫而無需關注細節,這種忽略甚至可以讓乙個對資料庫完全沒有概念的程式設計師直接使用資料庫。

5樓:馮東

Meta-programming 其實很多語言都有,比如 C。

你一定很驚訝。因為我說的是字面的 meta-programming。平常人認為的 meta-programming,實際上是 control flow abstraction。

也就是在語言中創造新的 control flow。

其實還有一種 abstraction - data type abstraction,我們每天都用。用 struct/class 建立新的 type。

很多所謂 CS 就不平衡了,理論家最講平衡的。既然 data 可以 abstraction,control-flow 也要 abstraction。所以主要解決了理論優美上的平衡問題

6樓:up duan

如果把元程式設計定義為對程式進行操作的程式設計,那麼,似乎沒有理由把eval排除於元程式設計之外。

至於到底是應該編譯期還是執行期,我覺得還真是無所謂的。

元程式設計顯然是多提供了乙個抽象層次,相當於讓你不僅可以通過乙個層次去抽象問題,還能通過另乙個層次對你的問題模型進行抽象。如果用的好,這似乎提供了巨大的能量。不過,這也似乎超出了大多數人的腦部運作規則,不太適合大面積推廣。

至於monad,如果專注於它可以重定義;也就是定義運算序列的能力的話,也勉強可以算是元程式設計吧。

說個題外話:

上面有人提到REBOL,說它的元程式設計不好,我的感覺明顯不同。由於REBOL採用最簡語法作為它的form,這就導致了自定義dialect可以做到非常自然和直觀,因而其元程式設計更自然,更漂亮。

廣相主要解決了非慣性係的問題,但也基於慣性系下的光速不變及其時空變形推論的,非慣性係下光速是否不變呢?

野生年華 我沒怎麼看明白 光速的不變性是乙個測量的結果。換句話,無論你往哪個方向,你在列車上,還是在列車下,你怎麼移動,你用什麼方法來測試,你都會得到光速是不變的。所以,光速不變不是信仰,而是乙個測量的結果。這是乙個事實!例如,你在火車上,向著火車前進方向發射一道光,以及反方向發射一道光,你在車下測...

XTS AES模式主要是解決什麼問題,是怎樣解決的

宰相小甘羅 我昨天剛好看過一點點.比如磁碟的乙個sector是4k,那麼我們需要M C,如果C M乙個sector就不夠用了。因此我們不能存下IV,要用deterministic encryption.而我們又希望每個sector用不同的key加密,防止一些資訊的洩漏 如果用同乙個key,那麼相同的...

中學時主要在什麼課上容易困?通常如何解決?

小花同志 我是從小到大一見數學老師就標誌性的打哈欠,還沒上課就開始打了,不知道怎麼回事兒哈哈,我父親數學教師,我還是老樣子,並且我數學極差。我每次困的時候都掐自己的肉,顯然沒什麼用,不然數學不會至今還是差。哈哈哈,好啦正經點,我覺得這個還是靠自己的意識吧,如果對你而言上課困而導致你的種種目標失敗等,...