系統技術非業餘研究 » escript的高階特性
escript Erlang scripting support, 可以讓erl模組轉身變成unix script來使用,大大方便使用者,具體的使用參看otp文件。我這裡要演示的是些比較被忽視的高階特性:
首先crack erts/etc/common/escript.c:33 static int debug = 1; 讓之顯示呼叫引數。
[email protected]:~# cat >factorial
[color=red]#!/usr/bin/env escript %% -*- erlang -*- %%! -smp enable -sname factorial -mnesia debug verbose[/color] main([String]) -> try N = list_to_integer(String), F = fac(N), io:format("factorial ~w = ~w\n", [N,F]) catch _:_ -> usage() end; main(_) -> usage(). usage() -> io:format("usage: factorial integer\n"), halt(1). fac(0) -> 1; fac(N) -> N * fac(N-1).
CTRL+D
[email protected]:~# chmod +x factorial [email protected]:~# ./factorial 10
[color=red]erl +B -boot start_clean -noshell -smp enable -sname factorial -mnesia debug verbose -run escript start -extra ./factorial 10[/color]
factorial 10 = 3628800
特性1:
摘抄文件。。。
On the third line (or second line depending on the presence of the Emacs directive), it is possible to give arguments to the emulator, such as
%%! -smp enable -sname factorial -mnesia debug verbose
Such an argument line must start with %%! and the rest of the line will interpreted as arguments to the emulator.
我們可以看到 這些選項被傳遞給了 erl
特性2:
-mode(compile).
這個選項是在escript.erl這個模組處理的。預設情況下 escript是被解釋執行的,如果你的指令碼很複雜,那麼效率估計會是瓶頸。這種情況下, 你可以通過這個選項來讓escript來先編譯你的模組成opcode, 在vm裡面執行。
特性3:
-d 選項 用來除錯script的
-c 編譯執行
-i 解釋執行
-s 只檢查不執行
[email protected]:~# escript -d ./factorial 10
我們就可以看到 除錯介面如下圖
特性4:
可以把一個beam檔案作為script
[email protected]:/usr/src# cat hello.erl
-module(hello). -export([start/0,main/1]). main(_)-> start(). start()-> io:format("hello world~n",[]).
[email protected]:/usr/src# erlc hello.erl [email protected]:/usr/src# cat >hello
#!/usr/bin/env escript %% -*- erlang -*- %%! -smp enable -sname factorial -mnesia debug verbose
CTRL+D
[email protected]:/usr/src# cat hello.beam >>hello [email protected]:/usr/src# chmod +x hello [email protected]:/usr/src# ./hello hello world
特性5:
可以把一個zip檔案作為script
[email protected]:/usr/src# cat hello.erl
-module(hello). -export([start/0,main/1]). main(_)-> start(). start()-> io:format("hello world, fac(10)=~w ~n",[fac:fac(10)]).
[email protected]:/usr/src# cat fac.erl
-module(fac). -export([fac/1]). fac(0) -> 1; fac(N) -> N * fac(N-1).
[email protected]:/usr/src# erlc *.erl [email protected]:/usr/src# erl Erlang R13B03 (erts-5.7.4) [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.7.4 (abort with ^G) 1> zip:zip("hello.zip", ["hello.beam", "fac.beam"]). {ok,"hello.zip"} 2>
[email protected]:/usr/src# cat >hello
#!/usr/bin/env escript %% -*- erlang -*- %%! -smp enable -sname factorial -mnesia debug verbose -escript main hello
CTRL+D
[email protected]:/usr/src# cat hello.zip >>hello [email protected]:/usr/src# chmod +x hello [email protected]:/usr/src# ./hello hello world, fac(10)=3628800
特性6:
在獨立的包裡面 把escript偽裝成我們的應用程式
[email protected]:/usr/src# cat >hello.escript
-module(hello). -export([start/0,main/1]). main(_)-> start(). start()-> io:format("hello world~n",[]).
CTRL+D
[email protected]:/usr/src# cp `which escript` hello [email protected]:/usr/src# ./hello hello world
規則是 escript 改名成xxxx 執行xxxx的時候 實際上要讀取的指令碼是 xxxx.escript
綜述: escript是很強大的 未來的erlang standalone全靠它。
Post Footer automatically generated by wp-posturl plugin for wordpress.
相關推薦
系統技術非業餘研究 » escript的高階特性
escript Erlang scripting support, 可以讓erl模組轉身變成unix script來使用,大大方便使用者,具體的使用參看otp文件。我這裡要演示的是些比較被忽視的高階特性: 首先crack erts/etc/common/escript.c:33 static i
系統技術非業餘研究 » erlang高階原理和應用PPT
公司培訓用的 湊合看吧 主要講erlang系統的特點,分佈叢集以及mnesia的使用, 從比較高的角度來看erlang, 讓你有了大體觀. Post Footer automatically generated by wp-posturl plugin for wordpress. No
系統技術非業餘研究 » Erlang R15的記憶體delayed dealloc特性對訊息密集型程式的影響
在新的NUMA體系結構下,每個CPU都有自己的本地記憶體,如果要訪問其他CPU的記憶體,那算remote了,要走CPU之間的QPI通道,通常這樣速度會有40%的下降。 那麼對於多執行緒的程式來講,這個硬體的變化對軟體也有很大的影響。在多執行緒程式裡面,通常一個執行緒會為一個物件分配記憶體,然後把這
系統技術非業餘研究 » Erlang R17新特性淺評
Erlang R17RC2 原始碼已經就緒, 參見 這裡 後續版本的釋出時間,官方的時間安排參見 這裡,摘抄如下: Preliminary dates for the upcoming release: Release: erts, emu,comp |Code stop
系統技術非業餘研究 » 如何用gdb除錯erlang執行期(高階)
前些天在erlang的原始碼裡面閒逛的時候發現了 bin目錄下的cerl,一看原來是個除錯的高階貨。 我之前寫過一篇文章http://mryufeng.javaeye.com/blog/113852 如何除錯erlang 但是這是土八路的方法, cerl才是現代化工業。 # This is a s
系統技術非業餘研究 » Erlang如何檢視gen_server系列的狀態 (高階)
gen_server在erlang otp程式設計中的地位是無可撼動的,幾乎都是gen_server或者gen_fsm的模型。那麼程式執行起來的時候 我們如何檢視gen_server的內部狀態呢。有2種方法: 1. 自己寫個類似於info這樣的函式,來獲取狀態。 2. 利用系統現有的架構。sas
系統技術非業餘研究 » 系統標準庫的hipe支援(高階)
前篇文章http://mryufeng.javaeye.com/blog/428845 講述瞭如何啟用erlang hipe支援,但是使用者程式大量依賴的標準庫如stdlib, kernel等預設都不是native模式的, 所以我們的程式雖然啟用了hipe,但是隻是部分啟用了。用oprofile等
系統技術非業餘研究 » ETS新的壓縮特性
即將釋出的R14B01要支援ets的壓縮,更大程度的提高記憶體的利用率。 在github上可以看到這個分支,有興趣的同學可以下載下來看看。 壓縮的時候只壓縮value, key是不壓縮的。 value特別簡單型別的eterm也是不壓縮的,因為zip壓縮需要一定長度的內容,而且壓縮本身也要加入一點的
系統技術非業餘研究 » erts_ use_sender_punish未公開的特性
我們知道erlang的VM排程是根據reds的,每個程序初始的時候分配2000個reds, 一旦這個reds用完了,程序就被掛起,放到佇列去排隊,等待下一次排程。OTP R13B04下一個程序給另外一個程序傳送訊息,是需要扣除傳送者一定的reds, 這樣看起來更公平。因為古語說殺敵一千, 自損八百
系統技術非業餘研究 » Erlang叢集未公開特性:IP網段限制
Erlang叢集二個節點之間的通訊是通過一個tcp長連線進行的,而且是全聯通的,一旦cookie論證通過了,任何一個節點就獲得全叢集的訪問權,可以參考Erlang分佈的核心技術淺析 。erlang的這個授權模式特定搞的這麼簡單,但是在實際使用中還是有安全性的問題。我們退而求其次,來個IP網段限制,
系統技術非業餘研究
ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼
系統技術非業餘研究 » MySQL資料庫架構的演化觀察
MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql
系統技術非業餘研究 » inet_dist_connect_options
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 推薦工作機會
最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗: 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海
系統技術非業餘研究 » 新的工作和研究方向
和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w
系統技術非業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 2017升的最快的幾個資料庫無責任點評
ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼
系統技術非業餘研究 » Erlang 17.5引入+hpds命令列控制程序預設字典大小
Erlang 17.5釋出引入控制程序預設字典大小的命令列引數: Erlang/OTP 17.5 has been released Written by Henrik, 01 Apr 2015 Some highlights of the release are: ERTS: Added co
系統技術非業餘研究 » inet_dist_listen_options
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 老生常談: ulimit問題及其影響
ulimit最初設計是用來限制程序對資源的使用情況的,因為早期的系統系統資源包括記憶體,CPU都是非常有限的,系統要保持公平,就要限制大家的使用,以達到一個相對公平的環境。以下是典型的機器預設的限制情況: $ ulimit -a core file size (blocks,