For Development HEAD DRAFTSearch (procedure/syntax/module):

12.56 rfc.uuid - UUID

Module: rfc.uuid

RFC9562で定義されたUUIDを実装しています。

UUIDバージョン1、4、6、7を生成する機能、及びUUIDの文字列表記をパーズしたり バイナリから文字列表記を生成する機能が提供されます。

Class: <uuid>

{rfc.uuid} UUIDクラスです。UUIDインスタンスは変更不可なオブジェクトです。

uuid共通の操作

Function: uuid-value uuid

{rfc.uuid} UUID uuidの「生の」値を、16要素のu8vectorとして返します。 返されたベクタを変更してはいけません。

Function: uuid-version uuid

{rfc.uuid} uuidのバージョン番号を返します。

Variable: uuid-comparator

{rfc.uuid} UUID同士を比較したりハッシュ値を取れる比較器です。 比較器については基本的な比較器参照。

註: 二つのUUIDが等しいかどうかはequal?で検査できます。

UUIDの読み書き

Function: parse-uuid string :key if-invalid

{rfc.uuid} UUIDの文字列表現をパーズし、UUIDインスタンスにして返します。 文字列が有効なUUID表現でない場合、if-invalidキーワード引数が 省略されるか:errorであればエラーが投げられ、 if-invalid#fであれば#fが返されます。

典型的なXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXという形式に加え、 urn:uuid:プレフィクスがついた形、前後がカーリーブレイスで囲まれた形、 そしてハイフンを持たない形が認識されます。

Function: write-uuid uuid :optional port

{rfc.uuid} uuidの文字列表現をXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX形式で portに書き出します。portが省略された場合は現在の出力ポートが使われます。

Function: uuid->string uuid

{rfc.uuid} uuidの文字列表現をXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX形式で 返します。

UUIDジェネレータ作成

Parameter: uuid-random-source

{rfc.uuid} UUIDを生成するのに乱数発生器を使います。 デフォルトでは、内部的に乱数源を作って乱数化したものを使いますが、 このパラメータをparameterizeすることで独自の乱数源を使うことができます。 パラメータの値はSRFI-27の規定する乱数源でなければなりません (srfi.27 - ランダムビットのソース参照)。

このパラメータの値は、make-uuid*-generatorでUUIDのジェネレータが 作られる時に参照され、その乱数源がジェネレータの中に保持されます。 このパラメータの値の変更は、既に作られたジェネレータには影響を与えません。

Function: make-uuid1-generator :optional node-id
Function: make-uuid6-generator :optional node-id

{rfc.uuid} それぞれ、バージョン1およびバージョン6アルゴリズム(タイムスタンプとノードID)による UUIDのジェネレータを生成して返します。二つのバージョンの違いは、 バージョン1ではタイムスタンプをいくつかに分けたうちの下位ビットから順に格納する のに対し、バージョン6では上位ビットから格納することです。 これにより、近い時間に作られたv6 uuidはソートした時に固まることになり、 データベースのインデックスとして使う場合にv1より有利になります。 (但し、完全に時間的に整列可能なuuidが必要な場合はv7 uuidを使ってください)。

省略可能なnode-id引数はノードIDを指定する48ビットの正確な整数でなければ なりません (IEEE802 MACアドレスが通常使われます)。 省略された場合は、プロセス内でひとつのランダムノードIDを生成して使います (この場合、生成されるノードIDはマルチキャストビットが立てられるので、 現実に存在するMACアドレスとかぶることはありません)。

これらの手続きで作られるジェネレータはスレッドセーフです。

Function: make-uuid4-generator

{rfc.uuid} バージョン4アルゴリズム(乱数)によるUUIDを生成するジェネレータを作って返します。

この手続きで作られるジェネレータはスレッドセーフです。

Function: make-uuid7-generator :optional increment-bits

{rfc.uuid} バージョン7アルゴリズム(時間順列可能)でuuidを作るジェネレータを作って返します。 uuidは、タイムスタンプ部分と、時間的に単調増加するランダムビット部分からなります。 全体として、uuidをソートすると生成順になります。

ランダムビット部分はUUID RFCの仕様では12ビットのrand_aフィールドと 62bitのrand_bフィールドに分かれています。 RFCではどのようにそれらを埋めるかは具体的に指定されていません。 Gaucheの実装では、それを74ビットの非負整数とみなし、 次の戦略を取ります。

  • プロセスごとに、ランダムの整数を初期値とします。
  • v7 uuidを生成する度に、ランダムな2^increment-bits未満の 非負整数をフィールドに加算します。 フィールドがオーバーフローしなければそれをそのまま使います。
  • フィールドがオーバーフローした場合、前回の生成からタイムスタンプが進んでいれば、 ラップアラウンドした値を使います。
  • そうでなければ、タイムスタンプが進むまで待って、 ラップアラウンドした値を使います。

省略可能なincrement-bits引数は正確な正の整数でなければなりません。 デフォルトの値は64です。極めて短い時間内に大量のUUIDを作りたい場合は、 小さな数を指定するのが良いでしょう。

この手続きで作られるジェネレータはスレッドセーフです。

Function: uuid-random-source-set! random-source

{rfc.uuid} Deprecated. UUID生成に使われる乱数源をカスタマイズするには uuid-random-sourceパラメータを使ってください。

あらかじめ作られているUUIDジェネレータ

Function: uuid1 :optional node-id
Function: uuid4
Function: uuid6 :optional node-id
Function: uuid7

{rfc.uuid} 簡便のために、あらかじめ作られているUUIDのジェネレータです。 これらのジェネレータはライブラリのロード時に 対応するmake-uuid*-generatorで作られるので、 デフォルトの乱数源を使います。

これらのジェネレータはスレッドセーフです。

Function: nil-uuid

{rfc.uuid} 全てのビットが0であるnil UUIDを返します。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT