WebAssembly 不仅仅是Web
虽然WebAssembly名字里包含了Web,但实际上它并不仅仅局限于Web。
很多程序员知道WebAssembly是运行于浏览器中执行非JS代码的一种技术。这是事实,但实际上还有更多的内容。
为了将WebAssembly嵌入到不同的环境中,其规范是被拆分到独立的文档中并区分了层级:
- 核心层。定义WebAssembly模块及其指令集的语义。
- API层。定义应用程序接口。目前指定了两个API:JavaScript API、Web API。
由此看出,WebAssembly其本身是独立于Web的,Web只是其应用的特定环境。事实上,WebAssembly也被应用于很多除了Web之外的领域:
- 桌面图形化程序
- 区块链智能合约,比如Parity的以太坊VM
- 编写操作系统微内核,比如Nebulet
等等,请发挥你的想象力。
Rust vs Go
本文作者以自身的经验对Rust和Go做了评价,比较了以下几点:
- 内存管理: 很难为谁打call。因为这两门语言都是内存安全的。(那Rust没有GC,是不是算赢了呢?逃)
- 学习和使用的难易度。很难为谁打call。因为虽然Go语法简单容易上手,但是作者更想把精力和时间花在编写经得起时间考验的代码上,而非排查各种Bug。(我很赞同)
- 泛型。这个自然是Rust赢了,因为Go不支持泛型。
- 代码健壮性。显然是Rust赢了。列举一下Rust有但Go不支持的可增强代码健壮性的特性: - 断言。断言很重要,但是Go不支持。Go将所有问题都归结为「错误」,相比之下,Rust就给你安排明白了,不该是错误的就不是错误。 - 类型标注。Rust有更严格的类型标注,可以精准传达程序员的意图。 - 文档注释。Rust的文档注释可以支持markdown。但是Go的比较简陋。 - 错误检查。Rust有更高级的类型系统来处理返回的错误。
- 分析工具。Go内置了分析工具,比较好用。
- 构建速度。Go赢了。
- 构建工具。Rust有优秀的包管理工具Cargo,赢。
- 单元测试。 作者对go的测试不满意,但是因为有testify的存在,所以这里勉强和Rust打个平手吧。
这份比较报告,不是为了要挑起语言之争。每种语言都有其优缺点和适用领域,作为程序员,应该对每种语言的特性有所了解,这样有益于为项目选择最佳的工具。 作者还强烈建议广大程序员,应该学学Rust,即使你不用Rust,你也能在这个学习过程中学到更多其他语言里学不到的东西。
讨论: Rust正在帮助我重新理解编程
我也有同感,你呢?
两个新项目
GitHub趋势榜今日上榜项目:
- rust-lang-nursery/mdBook, Rust实现,可以像gitbook那样生成在线的电子书。
- alexcrichton/tokio-signal,tokio的信号处理库
- alexcrichton/ctest,自动为Rust的FFI C绑定生成测试
- brendanzab/cgmath,Rust实现用于计算机图形学的线性代数和数学库
- softprops/atty,Rust写的一个用于判断是否为tty的工具
1
共 0 条评论, 1 页
评论区
写评论还没有评论