[轉]Python和Erlang的對比

名稱 Python Erlang
主要範型 面向對象 函數式、面向併發
開發者 Python 基金會 商業公司 愛立信
文件編碼 在 Python 2 中默認爲 ASCII,Python 3 中默認爲 UTF-8,但都可以制定任意編碼。 默認爲 Latin-1,不允許指定文件編碼。不過事實上編譯器並不會在意文件中是否存在“不正確”的字符。
變量 幾乎什麼都是變量,變量都可以不斷變化,無論是值還是類型。甚至你可以改變 True 和 False,讓他們顛倒。(當然,也有例外,如 None,我至今沒找到改變他的方法) 且不說原子是顯然不可變的,任何一個變量被賦值之後,他的值也是不可變的,這是所謂變量綁定。(單次賦值)
字符串 擁有完善的字符串支持,在 Python 3 中這更是發揮到了極致。 根本不存在字符串類型,一切字符串都是字符列表,因此就更沒有什麼強大的字符串處理函數了。
列表 可以根據下標索引快速獲取列表任意位置的內容。 考慮效率的話,只能從列表的頭部摘取內容。
模塊 依據文件系統的文件分佈構建層級式的模塊體系,使用模塊前必須聲明將模塊引入當前名字空間。 所有模塊是平行的,在同一層中,模塊名稱強制與文件名相同。使用模塊時模塊必須已經被編譯,Erlang 將會自動尋找模塊並讀取。
並行 通過 GIL 這一全局鎖將所有多線程操作退化爲單線程操作,不存在任何併發性。(不過 Python 正在嘗試加入新的模塊來改變這一問題) 天生就是面向併發的……用他僅做順序編程是一種莫大的浪費……
C 接口 使用 Python.h 編寫接口,編譯爲動態鏈接庫,運行時調入 Python 內使用。 編寫外部程序,通過標準輸入輸出與 Erlang 主進程交換數據,在 Erlang 進程空間外單獨運行。(也有一種在進程空間內運行的接口,不過不推薦使用)
函數重載 不支持任何形式的函數重載,但支持可選參數。 支持參數數量不同的同名函數,但不支持可選參數。而且基於模式匹配,支持同一函數的不同分支的定義。
數據庫 內置了通用的 SQLite 數據庫支持,可以通過 SQL 語句進行數據庫操作,儲存的信息限制在文本、數字等幾種。 內置了專用的 Mnesia,可以與 Erlang 無縫銜接地儲存任何內容,通過 Erlang 的 qlc 模塊不使用 SQL 語句進行數據庫操作。(NoSQL)
代碼熱替換 支持使用 reload 函數重新載入一個模塊。

模塊的新版本被編譯後任何調用即採用新的代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章