1. 程式人生 > >Julia :超程式設計、巨集

Julia :超程式設計、巨集

超程式設計(鼻祖是Lisp)一直在語法上和書寫上特立獨行,其功能也和一般的函式不一樣,與從不同。
這個你需要去體會。比如反射。

有人喜歡“用程式生成程式”等描述。

比如,沒有事先定義一個類或函式,但是可以根據客戶輸入的資訊,動態生成相應的類或函式。這個有點象C++的“模版”。

比如,你輸入引數input =[“name”,“book”,“price”,“publish date”,…],可以生成一個新的類。但是,在此前,模版並不知道“輸入”什麼內容。

函式也是一樣的,我們一般情況下,函式是要先寫好,再呼叫的。超程式設計則具備這種能力,也許是你輸入什麼名字串,就生成什麼樣的函式簽名。

超程式設計的本質是程式碼“書寫”程式碼的能力。

超程式設計與巨集

巨集也是一種特殊的函式,Julia的巨集會在函式簽名前面加一個“@”,rust則不同,會在函式簽名後加一個“!”。
巨集也有這樣“操作程式碼”的神奇能力。

大家最熟悉@time

macro time(ex)
    return quote
        local t0 = time()
        local val = $ex   # 一段程式碼
        local t1 = time()
        println("elapsed time: ", t1-t0, " seconds")
        val
    end
end

進一步閱讀:

https://github.com/thautwarm/MLStyle.jl

https://github.com/MikeInnes/MacroTools.jl