2010-05-21 116 views
13

您認爲學習和使用元編程最適合的語言(就簡單性,可讀性和代碼優化而言)是什麼?要學習元編程的語言

我認爲元編程是「編碼的未來」。並不是說代碼將會滅絕,但我們可以看到這種情況出現在新技術上。

+4

您可能想將此作爲一個社區wiki問題,以避免在主觀和論證基礎上關閉。 – 2010-05-21 13:01:41

+1

現在是社區wiki。 – Erup 2010-05-21 13:24:12

+2

+1好問題。真正的恥辱是關閉的,因爲關於這個問題有很多話要說。 Lisp(1960)是所有元編程語言的母親。 Scheme是一個易於學習的Lisp。 MetaLanguage(ML,1970s)系列語言是專門爲元程序設計和現代衍生產品(OCaml,Haskell,F#)設計的。查看一些語言,讓您可以定位像.NET這樣的虛擬機,同時也可以使用LLVM。正則表達式是元編程有用性的一個引人注目的實例。 – 2012-02-22 09:19:24

回答

2

Ruby具有非常強大和靈活的元編程功能。

+4

Ruby一直被譽爲元語言,但它沒有一個結構良好的元編程框架 - 它只是使用它的動態特性,如Python。恕我直言,學習元編程值得重新審視元類和自反語言,即使慣例是使用基於散列的動態語言。 – 2010-05-21 15:17:41

0

不知道我們是否具有「元編程」的相同定義,但肯定沒有最好的語言學習。我會建議你深入研究函數式編程。選擇哪種語言取決於您的背景和工作環境。我現在會選擇F#,但Haskel也應該是一個不錯的選擇。

歡呼聲, 阿希姆

4

你說的元編程是什麼意思?元編程是一組概念,而不是一種特定的技術。

請參閱this answer其中列出了各種概念和相關語言。這是一個總結:

  • 元編程與宏 - > Lisp的
  • 元編程與DSL - >內部DSL許多語言,外部DSL更棘手
  • 反思 - > Smalltalk中,紅寶石
  • 註釋 - > Java的
  • 字節碼或AST轉換 - > Groovy的

詳情參見完整的答案。一般來說,我認爲一個好的OO全才是Ruby。否則,任何類似Lisp的人都可以完成這項工作:它就像手中的油灰一樣。但這將取決於你想要做什麼...

+0

關於企業應用程序和概念的思考,不僅僅是一種技術,而是元編程所能做的一切。我的意思是,使用一個容易的工作和學習技術。 Ruby認爲是一個不錯的選擇。 – Erup 2010-05-21 13:31:29

+0

正如@Jay所列,在我看來,語法元編程技術在企業環境中表現得更好。在運行時操作並不合適,有時(比如Ruby?)。 – Erup 2010-05-21 16:01:53

5

Lisps幾乎是各種元編程技術的選擇語言。在可用的現代Lisp中,如果您希望立即使用強大的,我會推薦Clojure作爲更易於訪問的Lisp,它可以訪問積極的HUGE庫(Java領域中的任何內容)。

對於其他元編程方法,幾乎​​所有的函數式語言都可以做到。 Haskell對於學習技巧和函數式編程是一個很好的選擇,但這不是我稱之爲現實中最實用的語言。 Erlang更實用,但不太適合元編程。 OCaml是另一種可能的選擇,但在實用性方面也存在一些問題。然而,在許多方面它比Haskell更容易獲得。

在腳本語言世界Ruby是一種語言,其中元編程是一種流行的技術。它的方法有點類似於Lisp,但具有更傳統的語法。但是,它缺乏Lisps的全部功能和靈活性,但另一方面,除了上面的Clojure之外,它具有更直接的實用性。

2

有幾種語言我會推薦學習元編程。

第一個是Prolog。 Prolog程序是一個數據庫。 Prolog「代碼」,這些條款是數據的一部分。該程序可以讀取它們,包括它們的內容。它也可以生成新的代碼作爲數據結構並進行聲明,從而在運行時自行更改。所有這些都沒有使用術語擴展,這是Prolog的智能宏系統。一些Prolog AI書籍首先在Prolog中實現一個元解釋器,然後根據需要進行更改。

第二個是,如上所述,Lisp,特別是CLOS(公共列表對象系統),它包括meta-OOP的命令。

最後,Python支持運行時元編程,它是元類(創建類的類)的運行時元編程一個很好的,而不是太晦澀的機制。

8

首先 - 我不認爲我同意你的說法,即「元編程是編碼的未來」。這是一個很棒的工具,但並不是每個人都喜歡它(例如,Java設計人員故意將宏從語言中移出 - 並不是我喜歡Java,但人們有理由反對元編程)。

無論如何... 我可以想到兩種不同的元編程方法:在syntatic級別和運行時。

對於語法元編程,我認爲Scheme是一個很好的選擇(如果你沒有提到簡單等我建議使用Common Lisp)。 對於運行時間元編程,我猜測Prolog和Smalltalk都是非常有趣的。 (您可以即時添加,更改和刪除事實到Prolog數據庫;並且您可以隨時更改Smalltalk對象)。你也可以在Ruby中進行運行時元編程,但我不知道Ruby。

因此 - Scheme中有幾種不同的元編程方法(不同的宏系統)。我建議你看看一些基本的計劃書,後來閱讀兩個不同的宏觀系統。

一些很好的計劃書:

Scheme實現彼此非常不同的,所以你還可以使用你的計劃實施手冊一很多。

學習計劃宏一些地方:

如果你決定使用這比計劃更大混亂語言,嘗試的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(但它不像教授元編程)。

+1

我喜歡你講述這個話題的方式。另外,考慮企業應用和一系列概念,實現和可維護性(在一個團隊中工作),我知道語法元編程技術(如您所描述的)比運行時更好。 – Erup 2010-05-21 14:09:21

+1

@Erup:不要用你的團隊現在使用的語言來學習概念。學習概念,學習概念,使用任何工具幫助最好,然後選擇你的語言,一旦你瞭解這個概念。例如,你可以用C++進行元編程,如果你對模板非常熟悉,但通過C++進行LEARNING元編程將是非常重要的。 – 2010-05-21 14:37:02

+0

謝謝@JUST我正確的意見,學習的概念是我想要的。當我說「在團隊中工作」時,我的意思是使用易於使用的技術。所有的團隊都必須學習! – Erup 2010-05-21 14:49:20

2

我很驚訝沒有人提到ML。 ML代表元語言。所以...是的... CaML是一個標準的實現。 (OCAML,其中提到的只是我的正確OPINIO是CAML的OO版本,這可能增加了功能,使元編程不太明顯...)

除此之外,我計劃的大風扇,但相當許多函數式編程語言對此都有好處...總是有Little Lisper,呃,對不起,Little Schemer ...

+2

在OCaml中編程的人傾向於真的非常迅速地丟棄O部分,只留下Caml。我不認爲任何嚴重的OCaml程序員都會以任何頻率使用它的面向對象部分。 – 2010-05-21 14:38:57