名稱 | 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 函數重新載入一個模塊。 |
模塊的新版本被編譯後任何調用即採用新的代碼。 |
[轉]Python和Erlang的對比
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.