當前位置:首頁 » 編程軟體 » erlang編譯運行

erlang編譯運行

發布時間: 2022-07-18 04:34:34

A. Web 有哪些 Erlang 語言應用的例子

Mochiweb
一句話介紹: MochiWeb is an Erlang library for building lightweight HTTP servers.
Mochiweb在Erlang項目中被當做一個Web組件被廣泛使用(比如RabbitMQ的plug-in),它的設計相當收斂,除了基礎的Web請求處理沒有提供特別復雜的功能集(後面會提到其它Web Server).目前我已經在兩個項目中使用了Mochiweb,得心應手.
Mochiweb項目代碼有很多值得學習的地方,比如 mochiglobal [ 鏈接 ],Parameterized mole [鏈接]今年夏天我把Mochiweb代碼列印了一份,看得很是過癮.這里有一篇實戰風格的入門文章:A practical introction to MochiWeb - Alex Marandon[鏈接]
使用Rebar很容易編譯運行,裡面自帶一個簡單的Echo demo,你可以使用Rebar快速建立起來自己的站點框架,動手試試吧
項目地址:mochi/mochiweb · GitHub

Cowboy
一句話介紹: Cowboy is a small, fast and molar HTTP server written in Erlang.
使用Cowboy需要通過編寫Handler來定製如何處理Web請求.這是它設計上的一大特色.項目源碼自帶了N種版本的hello_world,也是可以非常快上手.編譯運行依然是rebar搞定,這個項目現在保持更新,每天都能收到github推送的代碼變更郵件.
項目地址:extend/cowboy 路 GitHub

YAWS
一句話介紹:Yaws is a HTTP high perfomance 1.1 webserver particularly well suited for dynamic-content web applications.
這個略顯怪異的名字是Yet another Webserver的縮寫.其提供的已經不是簡單的腳手架了,而是支持動態內容輸出,REST,文件上傳SOAP等等.在其官網上有豐富的文檔和樣例代碼.O'Reilly在2012年6月出版的 Building Web Applications with Erlang 一書中使用的就是YAWS.這本不足150頁的小冊子是很好的YAWS入門教程.估計國內出版社不會引進這樣一本冷冷的書,自己找電子版讀吧,很容易找到.
項目地址:Yaws

Misultin [停止更新]
一句話介紹: Misultin development has been discontinued.
是的,這個項目已經不再繼續更新了;停止更新的原因是作者認為各個Web server項目有"too much plication of efforts".作者在項目介紹中倒是簡單評價了Mochiweb和Cowboy:

Mochiweb has been around the block for a while and it's proven solid in proction, I can only recommend it for all basic webserver needs you might have. Cowboy has a very interesting approach since it allows to use multiple TCP and UDP protocols on top of a common acceptor pool. It is a very modern approach, is very actively maintained and many projects are starting to be built around it.
項目地址:ostinelli/misultin ¡ GitHub
看過Misultin作者的一番評論,其實可以回答不少人關於"用Mochiweb做Web項目很痛苦"的問題:如果你要做一個豐富多彩的Web站點,在Mochiweb提供的腳手架上,你要完成很多工作,顯然你需要其它選擇,呃,或許你需要選擇一個Web Framework了.對於大多數框架來說,其設計的總要目標就是開發效率和常見應用場景的支持.我們看看有哪些Erlang Web Framework可用吧!
Elrang Web Frameworks
除了http://Asp.net MVC,RoR之外,其實還有很多Web Framework可用,看看Erlang世界裡面的解決方案吧:

ChicagoBoss
一句話介紹:Chicago Boss is a server framework inspired by Rails and written in Erlang.
ChicagoBoss是現在非常活躍的Erlang Web Framework,在各種細節上都為新手准備的相當周到比如60秒快速上手教程什麼的.甚至它說自己區別於其它Erlang Web Framework的就是" it is easy to set up and use."它之間Web Server是選擇的Misultin現在已經遷移到Cowboy.前端MVC架構,內置消息隊列BOSSMQ,數據存儲方面選擇性也比較多:Mnesia MongoDB Mysql PostgreSQL Riak ,Tokyo Tyrant;模板方案依然是使用ErlyDTL.
另外,我覺得ChicagoBoss的文案是這些項目裡面寫的最棒的,直接命中你最想知道的兩個問題:
"Chicago Boss is a server framework inspired by Rails and written in Erlang. It offers all the conveniences of modern web development, including Comet. What sets Chicago Boss apart from other non-Erlang frameworks is that it can handle large amounts of traffic without any drop in performance. What sets Chicago Boss apart from other Erlang frameworks is that it is easy to set up and use."
項目地址:ChicagoBoss/ChicagoBoss 路 GitHub
入門PDF: http://www.evanmiller.org/chicago-boss-tutorial.pdf

Nitrogen

一句話介紹:Nitrogen Web Framework is the fastest way to develop interactive web applications in full-stack Erlang.
看群裡面討論,採用Nitrogen的項目也不在少數,這個項目動態模板方案不是採用ErlyDTL,而是自己有一套解決方案Nitrogen records [鏈接].網站上的常式和Step by Step教程足夠詳細,入門應該比較快.
項目地址:Nitrogen - Nitrogen Web Framework for Erlang

Zotontic
一句話介紹:Zotonic is the open source, high speed, real-time web framework and content management system, built with Erlang.
應該說Zotontic和其它框架的差異更多是在業務定位上了,提供了很多CMS直接可用的功能,查看其features列表能夠看到詳細介紹,注意:"Typically 10 times (and much more) faster than PHP content management systems." [鏈接]
Zotontic構建在Mochiweb和PostgreSQL之上.
項目地址:http://zotonic.com/

BeepBeep
一句話介紹: BeepBeep is a simple web application framework for Mochiweb inspired by Rails and Merb
BeepBeep 構建在 MochiWeb 和 ErlyDTL (後面會介紹) 基礎之上. 沿襲了mochiweb的優良傳統一鍵建站,基於ErlyDTL提供Django 模板的視圖展現.
這個項目已經09年之後就沒有實質性的更新,最近一次更新是2010年更新了一下README,慎重選擇吧.
還有一個項目ErlyWeb同樣是

B. 如何用gdb調試erlang運行期

1: 對於在應用程序中加入參數進行調試的方法:
直接用 gdb app -p1 -p2 這樣進行調試是不行的。
需要像以下這樣使用:
#gdb app
(gdb) r -p1 -p2
或者在運行run命令前使用set args命令:
(gdb) set args p1 p2
可以用show args 命令來查看

2. 加入斷點:
break
break
break +offset
break -offset
(在當前行號的前面或後面的offset行停住。)

break filename:linenum
在源文件filename的linenum行處停住。

break filename:function
在源文件filename的function函數的入口處停住。

break ... if
...可以是上述的參數,condition表示條件,在條件成立時停住。比如在循環境體中,可以設置 break if i=100,表示當i為100時停住程序。

3. 查看運行時的堆棧:
使用bt命令

4. 列印某個變數的值:
print val

5. 單步: n
繼續運行: c
step
單步跟蹤,如果有函數調用,他會進入該函數。
next
同樣單步跟蹤,如果有函數調用,他不會進入該函數。很像VC等工具中的step over。後面可以加count也可以不加,不加表示一條條地執行,加表示執行後面的count條指令,然後再停住。
set step-mode
set step-mode on
打開step-mode模式,於是,在進行單步跟蹤時,程序不會因為沒有debug信息而不停住。這個參數有很利於查看機器碼。
set step-mod off
關閉step-mode模式。
finish
運行程序,直到當前函數完成返回。並列印函數返回時的堆棧地址和返回值及參數值等信息。
until 或 u
當你厭倦了在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體。

6.在GDB中執行shell命令:
在gdb環境中,你可以執行UNIX的shell的命令,使用gdb的shell命令來完成:
eg. shell make

7. 運行環境
可設定程序的運行路徑。
show paths 查看程序的運行路徑。
set environment varname [=value] 設置環境變數。如:set env USER=hchen
show environment [varname] 查看環境變數。

8.觀察點(WatchPoint)
觀察點一般來觀察某個表達式(變數也是一種表達式)的值是否有變化了,如果有變化,馬上停住程 序。我們有下面的幾種方法來設置觀察點:
watch
為表達式(變數)expr設置一個觀察點。一量表達式值有變化時,馬上停住程序。
rwatch
當表達式(變數)expr被讀時,停住程序。
awatch
當表達式(變數)的值被讀或被寫時,停住程序。
info watchpoints
列出當前所設置了的所有觀察點。

9. 維護breakpoint
clear
清除所有的已定義的停止點。
clear func
清除所有設置在函數上的停止點。
delete [breakpoints] [range...]
刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range 表示斷點號的范圍(如:3-7)。其簡寫命令為d。
比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。
disable [breakpoints] [range...]
disable所指定的停止點,breakpoints為停止點號。如果什麼都不指定,表示disable所有的停止 點。簡寫命令是dis.
enable [breakpoints] [range...]
enable所指定的停止點,breakpoints為停止點號。

10、程序變數
查看文件中某變數的值:
file::variable
function::variable
可以通過這種形式指定你所想查看的變數,是哪個文件中的或是哪個函數中的。例如,查看文件f2.c中的全局變數x的值:
gdb) p 'f2.c'::x

查看數組的值
有時候,你需要查看一段連續的內存空間的值。比如數組的一段,或是動態分配的數據的大小。你可以使用GDB的「@」操作符,「@」的左邊是第一個內存的地址的值,「@」的右邊則你你想查看內存的長度。例如,你的程序中有這樣的語句:
int *array = (int *) malloc (len * sizeof (int));
於是,在GDB調試過程中,你可以以如下命令顯示出這個動態數組的取值:
p *array@len
如果是靜態數組的話,可以直接用print數組名,就可以顯示數組中所有數據的內容了。

11.輸出格式
一般來說,GDB會根據變數的類型輸出變數的值。但你也可以自定義GDB的輸出的格式。例如,你想輸出一個整數的十六進制,或是二進制來查看這個整型變數的中的位的情況。要做到這樣,你可以使用GDB的數據顯示格式:

x 按十六進制格式顯示變數。
d 按十進制格式顯示變數。
u 按十六進制格式顯示無符號整型。
o 按八進制格式顯示變數。
t 按二進制格式顯示變數。
a 按十六進制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
(gdb) p/f i
$24 = 1.41531145e-43
(gdb) p/x i
$25 = 0x65
(gdb) p/t i
$26 = 1100101

11.查看內存
使用examine命令(簡寫是x)來查看內存地址中的值。x命令的語法如下所示:
x/
n、f、u是可選的參數。
n 是一個正整數,表示顯示內存的長度,也就是說從當前地址向後顯示幾個地址的內容。
f 表示顯示的格式,參見上面。如果地址所指的是字元串,那麼格式可以是s,如果地十是指令地址,那麼格式可以是i。
u 表示從當前地址往後請求的位元組數,如果不指定的話,GDB默認是4個bytes。u參數可以用下面的字元來代替,b表示單位元組,h表示雙位元組,w表示四位元組,g表示八位元組。當我們指定了位元組長度後,GDB會從指內存定的內存地址開始,讀寫指定位元組,並把其當作一個值取出來。

n/f/u三個參數可以一起使用。例如:
命令:x/3uh 0x54320 表示,從內存地址0x54320讀取內容,h表示以雙位元組為一個單位,3表示三個單位,u表示按十六進制顯示。

12.自動顯示

你可以設置一些自動顯示的變數,當程序停住時,或是在你單步跟蹤時,這些變數會自動顯示。相關的GDB命令是display。
display
display/
display/ expr
expr是一個表達式,fmt表示顯示的格式,addr表示內存地址,當你用display設定好了一個或多個表達式後,只要你的程序被停下來,GDB會自動顯示你所設置的這些表達式的值。

格式i和s同樣被display支持,一個非常有用的命令是:
display/i $pc

undisplay
delete display
刪除自動顯示,dnums意為所設置好了的自動顯式的編號。

disable display
enable display
disable和enalbe不刪除自動顯示的設置,而只是讓其失效和恢復。

info display
查看display設置的自動顯示的信息。GDB會打出一張表格,向你報告當然調試中設置了多少個自動顯示設置,其中包括,設置的編號,表達式,是否enable。

13. 設置顯示選項
set print address
set print address on
打開地址輸出,當程序顯示函數信息時,GDB會顯出函數的參數地址。系統默認為打開的,
show print address
查看當前地址顯示選項是否打開。

set print array
set print array on
打開數組顯示,打開後當數組顯示時,每個元素佔一行,如果不打開的話,每個元素則以逗號分隔。這個選項默認是關閉的。與之相關的兩個命令如下,我就不再多說了。

set print array off
show print array

set print elements
這個選項主要是設置數組的,如果你的數組太大了,那麼就可以指定一個來指定數據顯示的最大長度,當到達這個長度時,GDB就不再往下顯示了。如果設置為0,則表示不限制。

show print elements
查看print elements的選項信息。

set print null-stop
如果打開了這個選項,那麼當顯示字元串時,遇到結束符則停止顯示。這個選項默認為off。

set print pretty on
如果打開printf pretty這個選項,那麼當GDB顯示結構體時會比較漂亮。

14.關於顯示源碼list

C. erlang自帶的C編譯和makefile編譯有什麼區別

makefile提供了控制編譯的方式,比如,我要編譯那些目錄下的那些文件,編譯結果生成到哪裡,c,c++等等語言都提供makefile編譯控制機制,而且語法都類似甚至一樣。而你的erlc或者c(mole)是erlang的編譯實現方法。

D. erlang可以做一些在什麼方面的應用呢請專家解釋一下

編程語言吧。
Erlang是一種通用的面向並發的編程語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種可以應對大規模並發活動的編程語言和運行環境。
Erlang是一個結構化,動態類型編程語言,內建並行計算支持。最初是由愛立信專門為通信應用設計的,比如控制交換機或者變換協議等,因此非常適合於構建分布式,實時軟並行計算系統。 使用Erlang編寫出的應用運行時通常由成千上萬個輕量級進程組成,並通過消息傳遞相互通訊。進程間上下文切換對於Erlang來說僅僅只是一兩個環節,比起C程序的線程切換要高效得多得多了。 使用Erlang來編寫分布式應用要簡單的多,因為它的分布式機制是透明的:對於程序來說並不知道自己是在分布式運行。 Erlang運行時環境是一個虛擬機,有點像Java虛擬機,這樣代碼一經編譯,同樣可以隨處運行。它的運行時系統甚至允許代碼在不被中斷的情況下更新。另外如果你需要更高效的話,位元組代碼也可以編譯成本地代碼運行。

E. 如何調試Erlang程序

在erlang環境搭建好之後,它會默認自帶一個調試的工具---erlang debugger(這個名字起得很好(^_^)).
Erlang debugger的簡單使用:
假設我們有一個寫好的test.erl.
1.編譯模塊。編譯模塊的時候,應該這樣編譯
c(test,[debug_info]).
2.打開debugger。在erlang shell中輸入"im()."即可。
3.設置斷點。在打開的monitor中,把左下方的Auto Attach下的三個選項全部選上,即First Call, On Break, On Exit(這個細節是很重要的)。然後選擇Mole->Interpret Moles,在打開的窗口中,選擇test.erl源文件。這時,在剛才的Monitor窗口中,雙擊左上腳的test,在打開的"View Mole test"新窗口中,選擇Break->Function Break,選擇一個自己的函數(當然,在Break當中,可以選擇其他的方式進行斷點的設置)。至此,斷點設置成功。
4.開始調試。在erlang shell當中輸入要調用的函數(就像平時我們沒有調試的時候,直接輸入模塊調用那樣。eg: test:reverse([1, 2, 3, 4]). 這個是我隨便輸的)。然後大家在打開的窗口當中就可以調試自己的程序了。

F. 什麼是Erlang,普及一下

Erlang是一種通用的面向並發的編程語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種可以應對大規模並發活動的編程語言和運行環境。Erlang問世於1987年,經過十年的發展,於1998年發布開源版本。Erlang是運行於虛擬機的解釋性語言,但是現在也包含有烏普薩拉大學高性能Erlang計劃(HiPE)開發的本地代碼編譯器,自R11B-4版本開始,Erlang也開始支持腳本式解釋器。在編程范型上,Erlang屬於多重范型編程語言,涵蓋函數式、並發式及分布式。順序執行的Erlang是一個及早求值, 單次賦值和動態類型的函數式編程語言。

G. 開始接觸erlang,erlang怎麼編譯成一個獨立運行的程序

escript可以直接執行erl源碼

$ cat factorial #!/usr/bin/env escript %% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
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).

?

$ factorial 5
factorial 5 = 120
$ factorial
usage: factorial integer
$ factorial five
usage: factorial integer

H. erlang語言,gen_server.erl編譯時出現錯誤。求大神指導

第一個錯誤原因是你調用gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).時宏?SERVER沒有定義,應該是書上的例子沒有把打完全吧。
解決這個問題在代碼start_link()上一行前邊加上
-define(SERVER, ?MODULE).

這個時加入宏?SERVER的定義,讓?SERVER 指向當前模塊。

第二個錯誤提示函數沒有定義,這種情況一般是符號錯誤,檢查每個函數最後的句號和函數開頭的->
你自己找一找吧

I. erlang protobuffs怎麼編譯

客戶端lua,通信協議是protobuf,以前用網易的proto-gen-lua,使用過程遇到些問題需要繞,比如:1、每次更改、增加proto都要生成新的文件,代碼規模劇增2、由於lua本身,每個文件最大文件內全局local變數不能超過200個,所以當proto規模太大時,生成的lua文件就不能用,需要把proto拆分3、我之前做proto-gen-lua的集成,好像使用protobuf2.5的不行,被迫只能用2.4了,然後對proto里message的格式支持不全,比如message內包含其他的message是不行的,無奈只能把要包含的message定義再寫在message內部最近新項目,想研究下protobuf的動態解析,於是在github上發現了這個項目:/zhanjunxiong/luapb/issues/2動態解析的序列化反序列化效率肯定比生成代碼差很多,所以高並發server可能不適用,客戶端沒太大影響

J. 我有一個erlang代碼,這個 程序怎麼使用

去下個erlang的環境 然後make 然後運行。。。windows linux都行 如果開點分 可以幫你看看

熱點內容
怎麼啟動ftp服務 發布:2025-02-07 12:27:46 瀏覽:865
拜託別黑我ftp 發布:2025-02-07 12:25:22 瀏覽:170
評價web伺服器的標準是什麼 發布:2025-02-07 12:24:37 瀏覽:444
opencvpython34 發布:2025-02-07 12:23:44 瀏覽:153
androidondraw調用 發布:2025-02-07 12:09:22 瀏覽:189
linuxkill進程 發布:2025-02-07 12:09:17 瀏覽:197
c語言sqrt函數怎麼用 發布:2025-02-07 12:07:48 瀏覽:896
安卓手機怎麼不用手機id登錄 發布:2025-02-07 12:06:28 瀏覽:39
ceph緩存變慢 發布:2025-02-07 11:46:52 瀏覽:924
python做什麼用的 發布:2025-02-07 11:46:46 瀏覽:565