回答
Ruby具有非常強大和靈活的元編程功能。
Ruby一直被譽爲元語言,但它沒有一個結構良好的元編程框架 - 它只是使用它的動態特性,如Python。恕我直言,學習元編程值得重新審視元類和自反語言,即使慣例是使用基於散列的動態語言。 – 2010-05-21 15:17:41
不知道我們是否具有「元編程」的相同定義,但肯定沒有最好的語言學習。我會建議你深入研究函數式編程。選擇哪種語言取決於您的背景和工作環境。我現在會選擇F#,但Haskel也應該是一個不錯的選擇。
歡呼聲, 阿希姆
你說的元編程是什麼意思?元編程是一組概念,而不是一種特定的技術。
請參閱this answer其中列出了各種概念和相關語言。這是一個總結:
- 元編程與宏 - > Lisp的
- 元編程與DSL - >內部DSL許多語言,外部DSL更棘手
- 反思 - > Smalltalk中,紅寶石
- 註釋 - > Java的
- 字節碼或AST轉換 - > Groovy的
詳情參見完整的答案。一般來說,我認爲一個好的OO全才是Ruby。否則,任何類似Lisp的人都可以完成這項工作:它就像手中的油灰一樣。但這將取決於你想要做什麼...
Lisps幾乎是各種元編程技術的選擇語言。在可用的現代Lisp中,如果您希望立即使用強大的和,我會推薦Clojure作爲更易於訪問的Lisp,它可以訪問積極的HUGE庫(Java領域中的任何內容)。
對於其他元編程方法,幾乎所有的函數式語言都可以做到。 Haskell對於學習技巧和函數式編程是一個很好的選擇,但這不是我稱之爲現實中最實用的語言。 Erlang更實用,但不太適合元編程。 OCaml是另一種可能的選擇,但在實用性方面也存在一些問題。然而,在許多方面它比Haskell更容易獲得。
在腳本語言世界Ruby是一種語言,其中元編程是一種流行的技術。它的方法有點類似於Lisp,但具有更傳統的語法。但是,它缺乏Lisps的全部功能和靈活性,但另一方面,除了上面的Clojure之外,它具有更直接的實用性。
有幾種語言我會推薦學習元編程。
第一個是Prolog。 Prolog程序是一個數據庫。 Prolog「代碼」,這些條款是數據的一部分。該程序可以讀取它們,包括它們的內容。它也可以生成新的代碼作爲數據結構並進行聲明,從而在運行時自行更改。所有這些都沒有使用術語擴展,這是Prolog的智能宏系統。一些Prolog AI書籍首先在Prolog中實現一個元解釋器,然後根據需要進行更改。
第二個是,如上所述,Lisp,特別是CLOS(公共列表對象系統),它包括meta-OOP的命令。
最後,Python支持運行時元編程,它是元類(創建類的類)的運行時元編程一個很好的,而不是太晦澀的機制。
首先 - 我不認爲我同意你的說法,即「元編程是編碼的未來」。這是一個很棒的工具,但並不是每個人都喜歡它(例如,Java設計人員故意將宏從語言中移出 - 並不是我喜歡Java,但人們有理由反對元編程)。
無論如何... 我可以想到兩種不同的元編程方法:在syntatic級別和運行時。
對於語法元編程,我認爲Scheme是一個很好的選擇(如果你沒有提到簡單等我建議使用Common Lisp)。 對於運行時間元編程,我猜測Prolog和Smalltalk都是非常有趣的。 (您可以即時添加,更改和刪除事實到Prolog數據庫;並且您可以隨時更改Smalltalk對象)。你也可以在Ruby中進行運行時元編程,但我不知道Ruby。
因此 - Scheme中有幾種不同的元編程方法(不同的宏系統)。我建議你看看一些基本的計劃書,後來閱讀兩個不同的宏觀系統。
一些很好的計劃書:
Scheme實現彼此非常不同的,所以你還可以使用你的計劃實施手冊一很多。
學習計劃宏一些地方:
- http://www.lispforum.com/viewtopic.php?f=22&t=100
- http://www.ibm.com/developerworks/linux/library/l-metaprog2.html
- http://chicken.wiki.br/explicit-renaming-macros
如果你決定使用這比計劃更大混亂語言,嘗試的Common Lisp 。有三本書我會建議:
- 首先,「Practical Common Lisp」通過Peter seibel。這會讓你開始使用Common Lisp和宏;
- 二,Paul Graham的「On Lisp」。然後你會知道宏比以前想象的更強大,並且會學到非常好的技巧;
- 三,Doug Hoyte的「Let Over Lambda」。一本先進的書,最好在Graham的On Lisp之後閱讀。
對於Prolog,您可以閱讀Clocksin和Mellish的「Programming in Prolog」(獲取最新版!),然後轉到Covington,Vellino和Nute的「Prolog Programing in Depth」。請參閱第6章。
有很多很好的Smalltalk書籍。我喜歡Simon Lewis的「Smalltalk的藝術和科學」。 關於Smalltalk,還有一個非常不錯的free tutorial/primer by Canol Gokel(但它不像教授元編程)。
我喜歡你講述這個話題的方式。另外,考慮企業應用和一系列概念,實現和可維護性(在一個團隊中工作),我知道語法元編程技術(如您所描述的)比運行時更好。 – Erup 2010-05-21 14:09:21
@Erup:不要用你的團隊現在使用的語言來學習概念。學習概念,學習概念,使用任何工具幫助最好,然後選擇你的語言,一旦你瞭解這個概念。例如,你可以用C++進行元編程,如果你對模板非常熟悉,但通過C++進行LEARNING元編程將是非常重要的。 – 2010-05-21 14:37:02
謝謝@JUST我正確的意見,學習的概念是我想要的。當我說「在團隊中工作」時,我的意思是使用易於使用的技術。所有的團隊都必須學習! – Erup 2010-05-21 14:49:20
我很驚訝沒有人提到ML。 ML代表元語言。所以...是的... CaML是一個標準的實現。 (OCAML,其中提到的只是我的正確OPINIO是CAML的OO版本,這可能增加了功能,使元編程不太明顯...)
除此之外,我計劃的大風扇,但相當許多函數式編程語言對此都有好處...總是有Little Lisper,呃,對不起,Little Schemer ...
在OCaml中編程的人傾向於真的非常迅速地丟棄O部分,只留下Caml。我不認爲任何嚴重的OCaml程序員都會以任何頻率使用它的面向對象部分。 – 2010-05-21 14:38:57
- 1. 學習編程語言
- 2. 需要學習哪種彙編語言
- 3. 學習正確的編程語言?
- 4. 什麼是學習機器學習的最佳編程語言?
- 5. 學習編程語言概念
- 6. 學習HTML和學習編程語言有什麼區別?
- 7. 逆向工程編程語言或'無監督學習語言'
- 8. 我是否需要學習更多的編程語言?
- 9. 學習C++語言
- 10. 學習彙編語言是否值得?
- 11. 學習Ontology網絡語言
- 12. 學習x86彙編語言。需要一些說明
- 13. 學習新語言時要做的資源/練習
- 14. 理想的學習新編程語言的方式
- 15. 數學編程語言
- 16. 希望學習一門新的編程語言
- 17. 學習編程語言的工作方式
- 18. 正在學習很多不同的編程語言嗎?
- 19. 尋找低級編程語言的學習材料
- 20. 學習如何在沒有語言的情況下編程?
- 21. 想要學習一門用於移動開發的新編程語言
- 22. 從哪裏開始想要學習特定項目的編程語言?
- 23. 您是否需要學習語言以學習SQL以外的Tableau?
- 24. 學習函數式編程語言有多困難?
- 25. Io框架開始學習Io(編程語言)
- 26. 如何將R學習爲編程語言?
- 27. 學習彙編語言如何幫助我調試C程序?
- 28. 學習斯威夫特第一個編程語言
- 29. 深度學習DJI Mavic Pro和指導SDK編程語言
- 30. 語言學習語音識別工具
您可能想將此作爲一個社區wiki問題,以避免在主觀和論證基礎上關閉。 – 2010-05-21 13:01:41
現在是社區wiki。 – Erup 2010-05-21 13:24:12
+1好問題。真正的恥辱是關閉的,因爲關於這個問題有很多話要說。 Lisp(1960)是所有元編程語言的母親。 Scheme是一個易於學習的Lisp。 MetaLanguage(ML,1970s)系列語言是專門爲元程序設計和現代衍生產品(OCaml,Haskell,F#)設計的。查看一些語言,讓您可以定位像.NET這樣的虛擬機,同時也可以使用LLVM。正則表達式是元編程有用性的一個引人注目的實例。 – 2012-02-22 09:19:24