[转]Python和Erlang的对比

名称PythonErlang
主要范型面向对象函数式、面向并发
开发者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 函数重新载入一个模块。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值