[閒聊] Meta-programming強的語言有哪些?

看板PLT (程式語言與理論)作者 (神奇的空指標)時間10年前 (2014/12/24 00:21), 編輯推噓8(8017)
留言25則, 8人參與, 最新討論串1/1
小弟最近玩C++的Template Meta-programming玩得有點上癮了, C++只靠Template做出來的元編程在所有語言中不是算是頂尖的吧? 所以我想研究一下別的語言的元編程,希望版上有相關經驗的大大 能夠給個研究方向,順便分享一下那個語言是有多神奇XD 聽說Lisp的Macro很厲害,但是我估狗來估狗去的還是看不太懂, 希望有大神能夠舉例一下(聽說Ruby好像在這方面也很在行呢) 也歡迎有元編程成癮症的患者一起討論真實/幻想中的元編程, 功能會有多神奇~ XD -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.252.20.53 ※ 文章網址: http://www.ptt.cc/bbs/PLT/M.1419351667.A.920.html

12/24 01:19, , 1F
個人覺得Ruby挺強,有define_method, method_missing
12/24 01:19, 1F

12/24 01:20, , 2F
還有send可以用,還可以改Class這個class去影響其他cla
12/24 01:20, 2F

12/24 01:20, , 3F
class
12/24 01:20, 3F

12/24 01:22, , 4F
Ruby在修改class方面的工具挺多,很輕易就可以做meta
12/24 01:22, 4F

12/24 01:22, , 5F
programming相關的事情,google一下就有很多文章介紹
12/24 01:22, 5F

12/24 01:24, , 6F
一個最明顯的例子就是standard library中的OpenStruct
12/24 01:24, 6F

12/24 01:25, , 7F
person = OpenStruct.new; person.name = "Mars"
12/24 01:25, 7F

12/24 01:26, , 8F
person.name # => "Mars" 完全不用管有沒有name這個
12/24 01:26, 8F

12/24 01:26, , 9F
attribute在裡面,他內部就是用method_missing做的
12/24 01:26, 9F

12/24 17:58, , 10F
Ruby真的很方便,難怪有些人喜歡用Ruby來做DSL
12/24 17:58, 10F

12/24 18:00, , 11F
而且Ruby的元編程非常的動態,之前好像看過能自己生出
12/24 18:00, 11F

12/24 18:03, , 12F
一串結構類似的method的方法,像是自己生一堆setter之類的
12/24 18:03, 12F

12/24 21:02, , 13F
是說我以前就摸過C++的TMP技術,直到最近學了FP類的語言
12/24 21:02, 13F

12/24 21:03, , 14F
才知道C++Programmer口中的TMP特例化根本就是FP的匹配模式
12/24 21:03, 14F

12/24 21:08, , 15F
話說我覺得雖然很像, 不過應該有點差別; FP 的模式匹配會
12/24 21:08, 15F

12/24 21:08, , 16F
(通常)由上到下 matching, C++ 則不是
12/24 21:08, 16F

12/28 14:18, , 17F

12/29 13:11, , 18F
http://terralang.org/ 見 "Generative programming" 那段
12/29 13:11, 18F

12/30 23:06, , 19F
FORTH定義 : 1 type ; : 2 s" enthos" ; : 3 ." Hello," ;
12/30 23:06, 19F

12/30 23:06, , 20F
執行, 3 2 1 結果 Hello,enthos ok
12/30 23:06, 20F

12/30 23:13, , 21F
原本的加法 1 9 + . 10 ok
12/30 23:13, 21F

12/30 23:13, , 22F
把1定義成9,+定義成* : 1 9 ; : + * ; redefined + ok
12/30 23:13, 22F

12/30 23:13, , 23F
執行 1 9 + . 81 ok
12/30 23:13, 23F

01/04 19:04, , 24F

03/24 19:59, , 25F
lua, javascript
03/24 19:59, 25F
文章代碼(AID): #1KcPPpaW (PLT)
文章代碼(AID): #1KcPPpaW (PLT)