#unsigned-integer #numeric #int

kago

A crate for custom-width signed and unsigned integers

2 releases

Uses new Rust 2024

new 0.2.2 Mar 28, 2025
0.2.1 Mar 28, 2025
0.2.0 Mar 28, 2025
0.1.0 Mar 27, 2025

#674 in Math

Download history

77 downloads per month

MIT/Apache

30KB
428 lines

Kago(籠)

「不確定なことを恐れて動けなくなる。だったら自らコントロールすればいいんだ」(旅人より村人へ)

Kago は、Rust において任意ビット幅の整数型(1〜128ビット)を柔軟に扱うためのクレート。

プリミティブな整数型(例:u8, i32, u128)をラップし、任意のビット幅を持つ符号付き・符号なし整数型を定義で。 たとえば 9 ビットや 17 ビットといった非標準のサイズの整数を、安全かつ明示的に表現・操作することが可能。

このクレートは手続きマクロによって定義を自動生成しており、詳細は kago-macros クレートを参照。

特徴

  • 任意ビット幅対応:1〜128ビットの範囲でビット幅を自由に指定可能
  • 符号の有無を選択可能:符号付き(IN)および符号なし(UN)をサポート
  • num-traits との互換性PrimInt トレイトを実装しており、汎用的な数値処理に対応

注意点

内部的には、指定されたビット幅をプリミティブ型にラップして実現しており、上位ビットを使用する設計となっている。 そのため、たとえば 9 ビットの整数型であっても、u16 などより大きなメモリ領域を消費する可能性がある。 ビット単位での高密度な圧縮や最小メモリ使用を重視する用途には適さない。

名前の由来

「Kago(籠)」は、データをちょうどよく包み込む“入れ物”としての性質に由来している。

想定される用途

形式検証、DSL(ドメイン固有言語)の実装、シリアライザ/デシリアライザの構築など、 メモリ効率よりも、ビット幅に意味的な厳密さが求められる場面での利用を想定している。

変更履歴

0.1.0(2025-03-27) deprecated

  • 1~128ビットの整数型(符号なし・符号付き)を実装

0.2.0(2025-03-28) deprecated

  • README を追加
  • Binary/Octal/LowerHex/UpperHex を実装

0.2.1(2025-03-28)

  • シフト演算を修正

Dependencies

~290–780KB
~17K SLoC