erlang的**執行有2種方式 1. 編譯成opcode 2. eval. 這2種形式都需要把erl**翻譯成abstract code, 然後在不同的途徑分別開.
通常情況下我們在eshell 裡面輸入的東西都是動態eval的. erl還支援命令列動態解釋. erl -eval e
init.erl
start_it() ->
str = binary_to_list(bin),
= erl_scan:string(str),
ts1 = case reverse(ts) of
[|_] -> ts;
tsr -> reverse([ | tsr])
end,
= erl_parse:parse_exprs(ts1),
erl_eval:exprs(expr, ),
ok;我們看到express先文法掃瞄, 確認以dot結尾, 然後進行語法分析,形成abstract code, 最後 erl_eval解釋abstact code.
我們注意到 在erl_parse的時候 表示式是這樣的 f()->expr. 這就解釋了為什麼在shell裡面無法定義函式,無法定義module什麼的.
io模組和shell模組都是以上面的形式來動態eval的. 這個特性很好用, 配合parse_transform, 我們可以很容易自己實現個dsl語言.
Erlang 學習小記 erlang 表,
cmd 控制台 輸入 erl 可以進入erl的shell 就可以 使用erlang 語法 進行控制 erl每個語句結束用 結尾 運算算數運算和其他語言基本一樣 在控制台 輸出 1 2加個 再按回車 即可得到輸出結果 模組中如果想要呼叫其他模組 需要在頭部 新增 module 模組名字 加 即可 模組...
erlang學習 為什麼學習erlang
相對於其它語言,erlang的根本性的優勢在於 1 面向併發的支援 它提供的建立大量程序能力,徹底改變了傳統的多執行緒的程式設計模式。在傳統的程式語言中,為了做到高效能,提供併發處理能力,通常是通過多執行緒模型來解決。多執行緒必然會導致加鎖的諸多問題,此外多執行緒程式對程式設計師自身的能力提出了更好...
Erlang模組與Erlang程式的執行方法
一 模組與程式檔案 erlang是一種函式式程式語言,當我們要完成乙個專案時,總不可能把所有的函式都定義在乙個程式檔案中,為了開發和維護方便,通常按邏輯功能劃分將其分別分散在多個程式檔案中。每個erlang程式檔案就是乙個模組,檔名的副檔名部分為.erl,模組的名稱必須與檔名稱中的主檔名完全相同 不...