0%

每个语言都有自己的依赖管理系统,就像 CargonpmComposerNugetPipMaven 等,Go 语言也不能例外,在 go mod 出来之前,有两种模式:

  • GOPATH 模式,这种模式把问题想象的太过于简单理想化,可以说是Go语言设计的败笔,因为不支持对依赖的版本管理,不同的项目依赖同一个第三方库的不同版本,GOPATH 就无法搞定,只能切来切去。

  • vendor 模式,这种模式将第三方依赖下载到项目的 vendor 目录下,实现了不同项目之间相互隔离,但是也不支持对依赖的版本管理,没有统一的地方进行声明,一更新就会升级到最新版本,不像很多语言中,将项目的依赖固化到一个 *_lock.json 版本中,这样在项目转移到其他地方进行编译,能确保得到一致的功能。当然,也有很多人喜欢将 vendor 目录上传到仓库,保持不同地方编译后二进制一致性,不过这样会导致仓库体积过大,有利有弊。

在这种背景下,诞生了很多第三方的依赖管理工具,如:govendorglidedep等,为了解决这种乱象,Go官方出品了 Go Modules,一统江山,其他第三方管理工具就都成为了历时。

阅读全文 »

Rust 中的每一个引用都有其生命周期(lifetime),也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。但有些时候,Rust 需要我们使用泛型生命周期参数来注明他们的关系,这样就能确保运行时实际使用的引用绝对是有效的。

阅读全文 »

Rust 是一门赋予每个人构建可靠且高效软件能力的语言。

Rust 相比其他语言,具有显著的特点,尤其是:

  1. 性能高;Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

  2. 高可靠;Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

  3. 极具生产力;Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

阅读全文 »