Name | base94-rs JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | A package allows you to en/decode using base94. |
upload_time | 2025-02-09 16:45:24 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | GPLv3 |
keywords |
codec
rust
base
base94
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# base94 🚀
基于PyO3的高性能Base94编码/解码Rust实现,比原生Python版本快14-40倍。
## 特性
- ⚡ **极速处理**:使用Rust优化核心算法
- 🔄 **无缝兼容**:完美匹配原Python版本的输入输出
- 🛡️ **内存安全**:零拷贝操作与预分配缓冲区
- 📦 **简单API**:`b94encode`/`b94decode` 两个直观函数
## 安装
### 前置要求
- Rust工具链 (1.54+)
- Python 3.8+
- maturin (`pip install maturin`)
### 安装步骤
## pip 安装
```bash
# 安装稳定版本
pip install base94_rs
# 安装测试版本
pip install git+https://github.com/hibays/base94.git
```
## 从源码编译
```bash
# 克隆仓库
git clone https://github.com/hibays/base94.git
cd base94
# 编译安装
maturin develop --release
# 打包安装
pip install .
```
## 使用示例
```python
import base94
# 编码示例
data = b"Hello Base94!"
encoded = base94.b94encode(data)
print(f"Encoded: {encoded}") # b'4Tk7J#qZcjYw'
# 解码示例
decoded = base94.b94decode(encoded)
print(f"Decoded: {decoded}") # b'Hello Base94!'
```
## 性能对比
| 数据大小 | 实现版本 | 编码时间 (s) | 解码时间 (s) | 编码速度 | 解码速度 |
|----------|------------------|--------------|--------------|------------|------------|
| 10KB | Python Native | 0.0088 | 0.0067 | 1.11 MB/s | 1.45 MB/s |
| 10KB | Rust Accelerated | 0.0003 | 0.0001 | 31.75 MB/s | 70.26 MB/s |
| 100KB | Python Native | 0.0523 | 0.0704 | 1.87 MB/s | 1.39 MB/s |
| 100KB | Rust Accelerated | 0.0035 | 0.0014 | 28.13 MB/s | 72.17 MB/s |
| 1MB | Python Native | 0.5254 | 0.7434 | 1.90 MB/s | 1.35 MB/s |
| 1MB | Rust Accelerated | 0.0388 | 0.0220 | 25.79 MB/s | 45.54 MB/s |
| 10MB | Python Native | 5.5060 | 7.6613 | 1.82 MB/s | 1.31 MB/s |
| 10MB | Rust Accelerated | 0.3819 | 0.2030 | 26.19 MB/s | 49.27 MB/s |
> 测试环境:i7-13620H @ 2.4GHz, 32GB DDR5 RAM
## 技术细节
### 核心优化
- **查找表预计算**:使用`lazy_static`加速字符映射
- **SIMD内存布局**:对齐内存访问模式
- **块级并行**:9字节编码块的无锁处理
- **零堆分配**:完全栈内存操作
### 编码流程
```mermaid
graph TD
A[输入字节流] --> B{填充处理}
B -->|补零| C[分块处理 9bytes/chunk]
C --> D[转换为128位整数]
D --> E[基数94分解]
E --> F[查表编码]
F --> G[输出Base94字符串]
```
## 注意事项
1. 输入数据类型应为`bytes`或支持buffer协议的对象
2. 编码填充使用`\x00`,解码填充使用`~`字符
3. 非法字符解码会引发`ValueError`
4. 最大支持编码2^72个不同数据块
## 基准测试
```bash
# 运行性能测试
python benchmarks/performance_test.py
```
## 贡献指南
欢迎提交PR!建议流程:
1. Fork仓库
2. 创建特性分支 (`git checkout -b feature`)
3. 提交修改 (`git commit -am 'Add feature'`)
4. 推送到分支 (`git push origin feature`)
5. 创建Pull Request
## 许可证
[GPLv3](LICENSE)
Raw data
{
"_id": null,
"home_page": null,
"name": "base94-rs",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "Codec, Rust, Base, Base94",
"author": null,
"author_email": "hibays <hibays@github.com>",
"download_url": "https://files.pythonhosted.org/packages/be/44/10bece8acec30181dc72f4d175d4a0dc856056706a2ec44b72ed03897bf0/base94_rs-0.1.0.tar.gz",
"platform": null,
"description": "# base94 \ud83d\ude80\n\n\u57fa\u4e8ePyO3\u7684\u9ad8\u6027\u80fdBase94\u7f16\u7801/\u89e3\u7801Rust\u5b9e\u73b0\uff0c\u6bd4\u539f\u751fPython\u7248\u672c\u5feb14-40\u500d\u3002\n\n## \u7279\u6027\n\n- \u26a1 **\u6781\u901f\u5904\u7406**\uff1a\u4f7f\u7528Rust\u4f18\u5316\u6838\u5fc3\u7b97\u6cd5\n- \ud83d\udd04 **\u65e0\u7f1d\u517c\u5bb9**\uff1a\u5b8c\u7f8e\u5339\u914d\u539fPython\u7248\u672c\u7684\u8f93\u5165\u8f93\u51fa\n- \ud83d\udee1\ufe0f **\u5185\u5b58\u5b89\u5168**\uff1a\u96f6\u62f7\u8d1d\u64cd\u4f5c\u4e0e\u9884\u5206\u914d\u7f13\u51b2\u533a\n- \ud83d\udce6 **\u7b80\u5355API**\uff1a`b94encode`/`b94decode` \u4e24\u4e2a\u76f4\u89c2\u51fd\u6570\n\n## \u5b89\u88c5\n\n### \u524d\u7f6e\u8981\u6c42\n\n- Rust\u5de5\u5177\u94fe (1.54+)\n- Python 3.8+\n- maturin (`pip install maturin`)\n\n### \u5b89\u88c5\u6b65\u9aa4\n\n## pip \u5b89\u88c5\n\n```bash\n# \u5b89\u88c5\u7a33\u5b9a\u7248\u672c\npip install base94_rs\n\n# \u5b89\u88c5\u6d4b\u8bd5\u7248\u672c\npip install git+https://github.com/hibays/base94.git\n```\n\n## \u4ece\u6e90\u7801\u7f16\u8bd1\n\n```bash\n# \u514b\u9686\u4ed3\u5e93\ngit clone https://github.com/hibays/base94.git\ncd base94\n\n# \u7f16\u8bd1\u5b89\u88c5\nmaturin develop --release\n\n# \u6253\u5305\u5b89\u88c5\npip install .\n```\n\n## \u4f7f\u7528\u793a\u4f8b\n\n```python\nimport base94\n\n# \u7f16\u7801\u793a\u4f8b\ndata = b\"Hello Base94!\"\nencoded = base94.b94encode(data)\nprint(f\"Encoded: {encoded}\") # b'4Tk7J#qZcjYw'\n\n# \u89e3\u7801\u793a\u4f8b\ndecoded = base94.b94decode(encoded)\nprint(f\"Decoded: {decoded}\") # b'Hello Base94!'\n```\n\n## \u6027\u80fd\u5bf9\u6bd4\n\n| \u6570\u636e\u5927\u5c0f | \u5b9e\u73b0\u7248\u672c | \u7f16\u7801\u65f6\u95f4 (s) | \u89e3\u7801\u65f6\u95f4 (s) | \u7f16\u7801\u901f\u5ea6 | \u89e3\u7801\u901f\u5ea6 |\n|----------|------------------|--------------|--------------|------------|------------|\n| 10KB | Python Native | 0.0088 | 0.0067 | 1.11 MB/s | 1.45 MB/s |\n| 10KB | Rust Accelerated | 0.0003 | 0.0001 | 31.75 MB/s | 70.26 MB/s |\n| 100KB | Python Native | 0.0523 | 0.0704 | 1.87 MB/s | 1.39 MB/s |\n| 100KB | Rust Accelerated | 0.0035 | 0.0014 | 28.13 MB/s | 72.17 MB/s |\n| 1MB | Python Native | 0.5254 | 0.7434 | 1.90 MB/s | 1.35 MB/s |\n| 1MB | Rust Accelerated | 0.0388 | 0.0220 | 25.79 MB/s | 45.54 MB/s |\n| 10MB | Python Native | 5.5060 | 7.6613 | 1.82 MB/s | 1.31 MB/s |\n| 10MB | Rust Accelerated | 0.3819 | 0.2030 | 26.19 MB/s | 49.27 MB/s |\n\n> \u6d4b\u8bd5\u73af\u5883\uff1ai7-13620H @ 2.4GHz, 32GB DDR5 RAM\n\n## \u6280\u672f\u7ec6\u8282\n\n### \u6838\u5fc3\u4f18\u5316\n\n- **\u67e5\u627e\u8868\u9884\u8ba1\u7b97**\uff1a\u4f7f\u7528`lazy_static`\u52a0\u901f\u5b57\u7b26\u6620\u5c04\n- **SIMD\u5185\u5b58\u5e03\u5c40**\uff1a\u5bf9\u9f50\u5185\u5b58\u8bbf\u95ee\u6a21\u5f0f\n- **\u5757\u7ea7\u5e76\u884c**\uff1a9\u5b57\u8282\u7f16\u7801\u5757\u7684\u65e0\u9501\u5904\u7406\n- **\u96f6\u5806\u5206\u914d**\uff1a\u5b8c\u5168\u6808\u5185\u5b58\u64cd\u4f5c\n\n### \u7f16\u7801\u6d41\u7a0b\n\n```mermaid\ngraph TD\n A[\u8f93\u5165\u5b57\u8282\u6d41] --> B{\u586b\u5145\u5904\u7406}\n B -->|\u8865\u96f6| C[\u5206\u5757\u5904\u7406 9bytes/chunk]\n C --> D[\u8f6c\u6362\u4e3a128\u4f4d\u6574\u6570]\n D --> E[\u57fa\u657094\u5206\u89e3]\n E --> F[\u67e5\u8868\u7f16\u7801]\n F --> G[\u8f93\u51faBase94\u5b57\u7b26\u4e32]\n```\n\n## \u6ce8\u610f\u4e8b\u9879\n\n1. \u8f93\u5165\u6570\u636e\u7c7b\u578b\u5e94\u4e3a`bytes`\u6216\u652f\u6301buffer\u534f\u8bae\u7684\u5bf9\u8c61\n2. \u7f16\u7801\u586b\u5145\u4f7f\u7528`\\x00`\uff0c\u89e3\u7801\u586b\u5145\u4f7f\u7528`~`\u5b57\u7b26\n3. \u975e\u6cd5\u5b57\u7b26\u89e3\u7801\u4f1a\u5f15\u53d1`ValueError`\n4. \u6700\u5927\u652f\u6301\u7f16\u78012^72\u4e2a\u4e0d\u540c\u6570\u636e\u5757\n\n## \u57fa\u51c6\u6d4b\u8bd5\n\n```bash\n# \u8fd0\u884c\u6027\u80fd\u6d4b\u8bd5\npython benchmarks/performance_test.py\n```\n\n## \u8d21\u732e\u6307\u5357\n\n\u6b22\u8fce\u63d0\u4ea4PR\uff01\u5efa\u8bae\u6d41\u7a0b\uff1a\n\n1. Fork\u4ed3\u5e93\n2. \u521b\u5efa\u7279\u6027\u5206\u652f (`git checkout -b feature`)\n3. \u63d0\u4ea4\u4fee\u6539 (`git commit -am 'Add feature'`)\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature`)\n5. \u521b\u5efaPull Request\n\n## \u8bb8\u53ef\u8bc1\n\n[GPLv3](LICENSE)\n\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "A package allows you to en/decode using base94.",
"version": "0.1.0",
"project_urls": {
"repository": "https://github.com/hibays/base94.git"
},
"split_keywords": [
"codec",
" rust",
" base",
" base94"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "afaaa6a895a05ebd8009eb5575fc354a72db87e5583509e879fbf0ff98de54a8",
"md5": "8b033447902b2291bc6d962671029242",
"sha256": "a05d0128a5ff4f78d69725b733744bb1ada8d9795c813a3ae9d6ae84c91aee8b"
},
"downloads": -1,
"filename": "base94_rs-0.1.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "8b033447902b2291bc6d962671029242",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 206521,
"upload_time": "2025-02-09T16:45:22",
"upload_time_iso_8601": "2025-02-09T16:45:22.512284Z",
"url": "https://files.pythonhosted.org/packages/af/aa/a6a895a05ebd8009eb5575fc354a72db87e5583509e879fbf0ff98de54a8/base94_rs-0.1.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "be4410bece8acec30181dc72f4d175d4a0dc856056706a2ec44b72ed03897bf0",
"md5": "14bad926da45f0f25005e0ab7fb3656d",
"sha256": "23a113eb5432e3a07eefcd4d1287cdd55a03f765f2b9717fdad2191edbefd9e0"
},
"downloads": -1,
"filename": "base94_rs-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "14bad926da45f0f25005e0ab7fb3656d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 30787,
"upload_time": "2025-02-09T16:45:24",
"upload_time_iso_8601": "2025-02-09T16:45:24.038876Z",
"url": "https://files.pythonhosted.org/packages/be/44/10bece8acec30181dc72f4d175d4a0dc856056706a2ec44b72ed03897bf0/base94_rs-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-09 16:45:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hibays",
"github_project": "base94",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "base94-rs"
}