`

[转]Python和Erlang的对比

阅读更多
名称 Python Erlang 主要范型 开发者 文件编码 变量 字符串 列表 模块 并行 C 接口 函数重载 数据库 代码热替换
面向对象 函数式、面向并发
Python 基金会 商业公司 爱立信
在 Python 2 中默认为 ASCII,Python 3 中默认为 UTF-8,但都可以制定任意编码。 默认为 Latin-1,不允许指定文件编码。不过事实上编译器并不会在意文件中是否存在“不正确”的字符。
几乎什么都是变量,变量都可以不断变化,无论是值还是类型。甚至你可以改变 True 和 False,让他们颠倒。(当然,也有例外,如 None,我至今没找到改变他的方法) 且不说原子是显然不可变的,任何一个变量被赋值之后,他的值也是不可变的,这是所谓变量绑定。(单次赋值)
拥有完善的字符串支持,在 Python 3 中这更是发挥到了极致。 根本不存在字符串类型,一切字符串都是字符列表,因此就更没有什么强大的字符串处理函数了。
可以根据下标索引快速获取列表任意位置的内容。 考虑效率的话,只能从列表的头部摘取内容。
依据文件系统的文件分布构建层级式的模块体系,使用模块前必须声明将模块引入当前名字空间。 所有模块是平行的,在同一层中,模块名称强制与文件名相同。使用模块时模块必须已经被编译,Erlang 将会自动寻找模块并读取。
通过 GIL 这一全局锁将所有多线程操作退化为单线程操作,不存在任何并发性。(不过 Python 正在尝试加入新的模块来改变这一问题) 天生就是面向并发的……用他仅做顺序编程是一种莫大的浪费……
使用 Python.h 编写接口,编译为动态链接库,运行时调入 Python 内使用。 编写外部程序,通过标准输入输出与 Erlang 主进程交换数据,在 Erlang 进程空间外单独运行。(也有一种在进程空间内运行的接口,不过不推荐使用)
不支持任何形式的函数重载,但支持可选参数。 支持参数数量不同的同名函数,但不支持可选参数。而且基于模式匹配,支持同一函数的不同分支的定义。
内置了通用的 SQLite 数据库支持,可以通过 SQL 语句进行数据库操作,储存的信息限制在文本、数字等几种。 内置了专用的 Mnesia,可以与 Erlang 无缝衔接地储存任何内容,通过 Erlang 的 qlc 模块不使用 SQL 语句进行数据库操作。(NoSQL)
支持使用 reload 函数重新载入一个模块。

模块的新版本被编译后任何调用即采用新的代码。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics