Erlang語言介紹

 

Erlang (/ˈɜrlæŋ/ er-lang) is a general-purpose concurrentgarbage-collected programming language and runtime system. The sequential subset of Erlang is a functional language, with strict evaluationsingle assignment, and dynamic typing. It was designed by Ericsson to support distributed, fault-tolerantsoft-real-time, non-stop applications. It supports hot swapping, so that code can be changed without stopping a system.[2]php

While threads require external library support in most languages, Erlang provides language-level features for creating and managing processes with the aim of simplifying concurrent programming. Though all concurrency is explicit in Erlang, processes communicate using message passing instead of shared variables, which removes the need for locks.css

The first version was developed by Joe Armstrong in 1986.[3] It was originally a proprietary language within Ericsson, but was released as open source in 1998.
wikipedia:http://en.wikipedia.org/wiki/Erlang_(programming_language)正則表達式

Erlang是一種通用的並行程序設計語言,它由喬·阿姆斯特朗瑞典電信設備製造商愛立信所轄的計算機科學研究室開發,目的是創造一種能夠應付大規模開發活動的程序設計語言運行環境。Erlang於1987年發佈正式版本,最先是愛立信擁有的私有軟件,通過十年的發展,於1998年發表開放源代碼版本。shell

Erlang是運做於虛擬機解釋型語言可是如今也包含有烏普薩拉大學高性能Erlang計劃(HiPE)[1]開發的原生代碼編譯器,自R11B-4版本開始,Erlang也支持腳本方式執行。在程序設計範型上,Erlang屬於多重範型編程語言,涵蓋函數式並行分佈式。循序運行的Erlang是一個及早求值單次賦值動態類型函數式編程語言數據庫

Erlang得名於丹麥數學家統計學家Agner Krarup Erlang,同時Erlang還能夠表示Ericsson Language。Erlang語言由瑞典愛立信電信公司的喬·阿姆斯特朗開始設計,開始於公元一九八零年代。最初是以Prolog程序設計語言爲基礎,幾度改版以後,改爲以Joe's Abstract Machine爲基礎的獨立語言運行環境。雖然語言風格仍與Prolog相近,不過因Erlang語言設計的走向,Erlang成爲具有函數語言特點的程序設計語言[2]apache

 http://baike.baidu.com/view/765701.htm編程

語言特點 

  • 並行程序設計 在語言中,能夠藉由spawn/*函數,將特定的函數設置爲獨立的進程,以後能夠作跨進程通訊。
  • 函數式程序設計 因爲Erlang早期以Prolog開發製成,受語言特性影響,即成爲函數式語言。
  • 單次賦值 每一個變量只能跟數據綁一次,因此,不像通常程序設計語言的變量能夠屢次指定爲不一樣的值。單次賦值的好處是狀態單純,使程序容易閱讀。
  • 及早求值或嚴格求值 Erlang基本求值策略爲電腦語言中及早求值之特性。並且,能夠藉由明確使用無參數的λ表達式,將特定函數設置爲惰性求值策略。
  • 動態數據類型與類型系統 有編譯時期的類型檢查系統支持。
  • 快速失敗 在運行時期發生的錯誤,會由錯誤位置提交信息,發生錯誤的進程馬上中止執行。藉由進程通信機制,能夠自動傳遞錯誤、捕捉錯誤,使其餘進程可以幫助處理錯誤。
  • 代碼熱更新 因爲Erlang是函數語言,能夠撰寫特定的程序結構,製做實時更換新版函數的機制。
  • 腳本語言 Erlang實現提供了腳本運行方式。

http://zh.wikipedia.org/wiki/Erlang服務器

幾分鐘入門教程:網絡

Erlang不可是一種編程語言,並且它具備比編程語言更加貼近操做系統的一些特性:併發線程、做業調度、內存管理、分佈式、網絡化等。聽說使用Erlang編寫的Yaws Web服務器,其併發性能是apache的15倍!數據結構

這個Erlang初始開源版本包含了Erlang的實現,同時它也是用於構建分佈式高可用性系統的Ericsson中間件的最大組成部分。

Erlang具備如下特性:

◆併發性

Erlang具備超強的輕量級進程,這種進程對內存的需求是動態變化的,而且它沒有共享內存和經過異步消息傳送的通信。Erlang支持超大量級的併發線程,而且不須要操做系統具備併發機制。

◆分佈式

Erlang被設計用於運行在分佈式環境下。一個Erlang虛擬機被成爲Erlang節點。一個分佈式Erlang系統是多個Erlang節點組成的網絡(一般每一個處理器被做爲一個節點)。一個Erlang節點可以建立運行在其它節點上的並行線程,而其它節點可使用其它操做系統。線程依賴不一樣節點之間的通信,這徹底和它依賴於單一節點同樣。

◆健壯性

Erlang具備多種基本的錯誤檢測能力,它們可以用於構建容錯系統。例如,進程可以監控其它進程的狀態和活動,甚至這些進程是在其它節點上執行。在分佈式系統中的線程可以配置爲在其它節點故障的狀況下自動進行故障恢復,並在故障節點恢復時自動遷移回到恢復節點。

◆軟實時性

Erlang支持可編程的「軟」實時系統,這種系統須要反應時間在毫秒級。而在這種系統中,長時間的垃圾收集(garbage collection)延遲是沒法接受的,所以Erlang使用了遞增式垃圾收集技術。

◆熱代碼升級

一些系統不可以因爲軟件維護而中止運行。Erlang容許程序代碼在運行系統中被修改。舊代碼能被逐步淘汰然後被新代碼替換。在此過渡期間,新舊代碼是共存的。這也使得安裝bug補丁、在運行系統上升級而不干擾系統操做成爲了可能。

◆遞增式代碼裝載

用戶可以控制代碼如何被裝載的細節。在嵌入式系統中,全部代碼一般是在啓動時就被徹底裝載。而在開發系統中,代碼是按需裝載的,甚至在系統運行時被裝載的。若是測試到了未覆蓋的bug,那麼只有具備bug的代碼須要被替換。

◆外部接口

Erlang進程與外部世界之間的通信使用和在Erlang進程之間相同的消息傳送機制。這種機制被用於和操做系統通信、與其它語言編寫的程序交互。若是出於高效率的須要,這種機制的一個特殊版本也容許例如C程序這樣的代碼直接連接到Erlang運行時系統中來。

Erlang組件

Erlang具備許多單獨的組件,它們可以在開發應用時做爲組建塊(building blocks)使用。同時這些組件也熟知Erlang的系統消息(load、unload、start、stop、restart、change code)。

◆Inets

HTTP 1.0服務器和FTP客戶端。

◆Mnesia

使用Erlang的分佈式實時數據庫。它支持RAM複製、磁盤存儲、動態改變shema、保存任意複雜的數據結構。Mnesia之因此很是快速,是由於它運行在和應用相同的地址空間(由於Mnesia和應用都使用Erlang編寫)。Mnesia展現了Erlang的強大:你可以使用多少種語言使用少於20000行的代碼編寫一個全特性、工業強度、分佈式的DBMS?

◆Orber

CORBA v2.0對象請求代理(ORB)。

◆SNMP

可擴展的SNMP v1/v2代理和MIB編譯器。

Erlang工具和代碼庫

Erlang具備一套經常使用工具庫:

◆Appmon

進程組圖形監控(在本地和遠程節點上)。

◆ASN.1

支持ASN.1基本標記法和BER、DER、PER編碼規則的編譯時和運行時的代碼包。

◆Compiler

Erlang編譯器。

◆Debugger

圖形化Erlang調試器。

◆ERTS

Erlang運行時系統,包括虛擬機、垃圾收集、端口映射守護進程。

◆GS

編寫圖形用戶接口的代碼庫。

◆IC

把OMG的接口定義語言(IDL)轉換到Erlang、C和Java語言的編譯器。

◆Kernel

運行Erlang系統所必須的C代碼:Erlang內建功能(BIFs);代碼、啓動、命名服務;對網絡和分佈式的支持;裝載器、鏈接器、記錄器;操做系統和文件系統接口。

◆Mnemosyne

可選的用於Mnesia的查詢語言。

◆Mnesia Session

以IDL定義的與Mnesia接口的外部語言,它們經過IIOP和erl_interface協議對Mnesia進行訪問。

◆OS monitor (OS_MON)

監控CPU、硬盤、內存使用狀況,包括SNMPv1/v2 MIBs。而且提供了與Solaris syslogd、Windows NT事件日誌的接口。

◆Parse tools

用於Erlang的LALR-1解析生成器(yecc),它和yacc相似。Yecc使用BMF語法定義做爲輸入,生成Erlang代碼做爲解析輸出。Yecc被用於生成Erlang解析器。

◆PMan

跟蹤、查看Erlang進程狀態(在本地或者遠程節點上)的工具。

◆SASL

進程、錯誤、崩潰報告處理、報告瀏覽、釋放處理、重載管理。

◆Stdlib

標準代碼庫:輸入、輸出;基於內存、磁盤的表存儲(ETS和DETS);圖表、字典、列表、字符串、集合、隊列;正則表達式;數學公式。Erlang解釋器、tokenizer、解析器、lint和格式化打印。用於容錯服務器的通用框架、事件處理器、狀態機和線程監管等等。

◆Table visualizer

查看ETS和Mnesia表格的工具。

◆Toolbar

簡化了對Erlang工具的訪問。

◆Tools

覆蓋分析器、優化器、基於文字的跟蹤器、Emacs模式、Emacs TAGS文件生成器、make工具、調用圖形化工具。

 

啓動Erlang

若是你使用unix系統的話,請輸入「erl」;而若是你使用Window系統的話,請點擊Erlang的開始圖標來啓動Erlang。你應該看到以下界面:

os prompt > erlErlang (JAM) emulator version 4.7.3.3 Eshell V4.7.3.3  (abort with ^G)1>

「>」提示表示了系統正在等待輸入。

將Erlang用做計算器

1> 2131836812671*12937192739173917823.275799837339909288133199991352332>

記住每一個表達式都是以句點和空格爲結束符的!

編輯從前的表達式

咱們使用簡單的emacs行編輯命令編輯從前的表達式,最經常使用的命令以下:

◆^P 獲取上一行。
◆^N 獲取下一行。
◆^A 將輸入焦點移動到當前行首。
◆^E 將輸入焦點移動到當前行尾首。
◆^D 刪除當前光標所在的字符。
◆^F 向前移動一個字符。
◆^B 向後移動一個字符。
◆回車 執行當前命令。

請注意: ^X 表示Control + X 。嘗試按下Control+P,看看什麼會發生?

編譯你的第一個程序

在你所喜歡的文本編輯器中輸入如下內容,並將其保存到文件中:

 

-module(test).-export([fac/1]).fac(0) -> 1;fac(N) -> N * fac(N-1).

 

保存文件名爲test.erl,請注意文件名必須和模塊名相同。

經過輸入c(test)編譯程序,而後運行它:

 

3> c(test).{ok,test}30> test:fac(20).24329020081766400004> test:fac(40).
81591528324789773434561126959611589427200000000032>

 

Ok,如今你也能夠嘗試編寫一些有趣的程序了。

更多:

http://www.ibm.com/developerworks/cn/opensource/os-erlang1/

相關文章
相關標籤/搜索