10个版本
0.1.0 | 2023年11月11日 |
---|---|
0.0.9 | 2023年11月10日 |
0.0.7 | 2023年10月22日 |
0.0.3 | 2023年9月30日 |
0.0.2 | 2023年7月15日 |
#438 in 算法
每月 98 次下载
3MB
29K SLoC
Rust中Go标准库的部分实现
这是将Go标准库的一些功能移植到Rust的尝试。
原因
- 可以使Go程序员更容易过渡到Rust
- 虽然Rust生态系统中有许多库覆盖了各种需求(见 https://crates.io/),但选择合适的库需要花费时间。如果能有一个类似于Go标准库的东西——简单、全面且经过良好测试那就太好了。
如果你考虑使用这个库,请注意以下事项
- 代码质量可能低于Go库
- 代码测试较少
- 缺少一些优化,因此性能可能低于预期
使用示例
你可以使用以下命令运行这些示例
cargo run --example flate
go run goexamples/flate/main.go
cargo run --example user
go run goexamples/user/main.go
请参阅examples文件夹中的所有Rust示例和相应的Go示例goexamples文件夹。
部分实现模块
- bufio
- builtin
- bytes
- compress
- compress::flate
- compress::gzip
- compress::zlib
- crypto
- crypto::aes
- crypto::cipher
- crypto::hmac
- crypto::md5
- crypto::rand
- crypto::sha1
- crypto::sha256
- crypto::subtle
- encoding
- encoding::base64
- encoding::binary
- encoding::hex
- errors
- hash
- hash::adler32
- hash::crc32
- image
- image::color
- image::color/palette
- image::draw
- image::png
- internal
- internal::bytealg
- internal::syscall
- internal::syscall/unix
- io
- math
- math::bits
- math::rand
- os
- os::user
- runtime
- strconv
- strings
- syscall
- time
- 限制
- 无时区支持
- 无持续时间支持
- 无格式化支持
- 无单调时间支持
- 限制
- unicode
- unicode::utf8
支持的最小Rust版本
1.70.0
开发过程
当需要某个功能时,适当的Go源代码从go1.20.11中复制并翻译成Rust。
从Go到Rust的转换过程中发生变化
- 结构和函数被重命名以符合Rust的命名约定
- Go的Reader和Writer接口的使用被Rust的
std::io::Read
和std::io::Write
接口所替代。这使得代码更加符合Rust的风格,并与Rust生态系统中的其他部分更加兼容。 - 创建对象的函数被关联函数所替代。例如,Go的
NewObject()
被改为Rust的Object::new()
。 - 返回Go接口的函数通常改为返回特定类型,因为在Go中,将接口转换为底层类型很容易,但在Rust中并不总是可能。
需要注意的问题
'<<'运算符的优先级不同
Go: 1 << 1 + 1 == 3
Rust: 1 << 1 + 1 == 4
发布清单
- 没有由
cargo doc
、cargo clippy
、cargo clippy --tests
生成的警告。
许可证
大部分代码与Go项目使用的许可证相同(BSD 3-Clause):见LICENSE。
有一小部分代码在MIT许可证下:src/winapi_.rs
、src/libc_.rs
。
如何将许可证应用于新文件
当新文件包含从Go代码库复制的内容时,在文件顶部添加以下内容
// Copyright 2023 The rust-ggstd authors.
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
当文件没有从Go代码库复制任何内容,且是examples
或goexamples
中的示例时,添加以下内容
// Copyright 2023 The rust-ggstd authors.
// SPDX-License-Identifier: 0BSD
当文件没有从Go代码库复制任何内容,且不是示例时
// Copyright 2023 The rust-ggstd authors.
// SPDX-License-Identifier: BSD-3-Clause