base94-rs


Namebase94-rs JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryA package allows you to en/decode using base94.
upload_time2025-02-09 16:45:24
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseGPLv3
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"
}
        
Elapsed time: 0.42021s