Nim 標準ライブラリ

作成者: アンドレアス・ルンプフ
バージョン: 1.2.0

Nim のライブラリは純血ライブラリ混血ライブラリ、およびラッパーに分類されます。

純血ライブラリに依存性はなく、混血ライブラリには外部 *.dll または lib*.so バイナリへの依存性はあります。ラッパーは C ライブラリへの超低水準インタフェースから成る混血ライブラリです。

このドキュメントには API デザインに関する手短な概要があります。

Nimble

Nim の標準ライブラリは基本機能のみ網羅しています。サードパーティ製パッケージのリストは https://nimble.directory/ をご確認ください。

純血ライブラリ

自動インポート

  • system すべてのプログラムで必要とされる基本的なプロシージャと演算子です。また、テキストとバイナリファイルの読み書きに関する IO 機能も実装してあります。コンパイラにより暗黙的にインポートされます。明示的にインポートしないでください。この処理はコンパイラ・マジックに依存します。
  • threads Nim の基本的なスレッド機能です。備考: これは system モジュールの一部です。明示的にインポートしないでください。--threads:on で有効になります。
  • channels スレッドにおける Nim のメッセージ・パッシング機能です。備考: これは system モジュールの一部です。明示的にインポートしないでください。--threads:on で有効になります。

コア

  • bitops ビット操作で使う低水準メソッド集の実装です。
  • cpuinfo このモジュールは CPU / コア数を判定するプロシージャの実装です。
  • endians このモジュールは異種バイトオーダーの処理に用いる補助機能の実装です。
  • lenientops 整数と浮動小数を併用する式で便利な二項演算子の機能です。
  • locks Nim におけるロックと状態変数です。
  • macros マクロの記述に関する Nim の抽象構文木 (AST) API とドキュメンテーションがあります。
  • rlocks Nim における再入可能ロック (Reentrant lock) のサポートです。
  • typeinfo Nim の実行時型情報への (安全でない) アクセス機構です。
  • typetraits このモジュールは型機能によるコンパイル時リフレクション処理用のプロシージャ定義です。
  • volatile このモジュールは組み込み機器とシステム・プログラミングで便利な volatile のロードと格納処理を生成するコードがあります。

アルゴリズム

  • algorithm にはソートやバイナリサーチなど一般的に良く使われるアルゴリズムを実装してあります。
  • sequtils このモジュールは関数型プログラミング言語から着想を得た組み込み seq 型に関する処理の実装です。

コレクション

  • critbits このモジュールは文字列集合のソート、または文字列写像のソートで効率的なコンテナである crit ビットツリーの実装です。
  • deques デキュー (両頭待ち行列) の実装です。基本的な実装は seq を使います。
  • heapqueue 優先順位付きキューとして使えるヒープによるデータ構造の実装です。
  • intsets 疎ビット集合による整数集合の効率的な実装です。
  • lists Nim における連結リストのサポートです。単方向・双方向連結リストと循環リスト ("rings") が使えます。
  • options オプション型はオプション値をカプセル化します。
  • sets Nim におけるハッシュとビット集合のサポートです。
  • sharedlist Nim における共有連結リストのサポートです。共有単方向リストも使えます。
  • sharedtables Nim における共有ハッシュテーブルのサポートです。共有テーブルも使えます。
  • tables Nim におけるハッシュテーブルのサポートです。テーブル、テーブルの整列、テーブル数のカウントも使えます。

文字列処理

  • cstrutils cstring 処理用ユーティリティ。
  • std/editdistance このモジュールは二区間にある Unicode 文字列の編集距離を求めるためのアルゴリズムを収録しています。
  • encodings 異種文字エンコーディング間での変換を行います。このモジュールは UNIX では iconv ライブラリを、Windows では Windows API を使います。
  • parseutils このモジュールには数値、識別子、トークンなどを解析するための補助機能があります。
  • pegs このモジュールには PEGs 処理用のプロシージャと演算子があります。
  • punycode ASCII 文字の部分集合に限定した Unicode 形式の実装です。
  • ropes このモジュールは rope (ロープ) データ型のサポート機能です。ロープ型は長大文字列を効率的に表せます。特筆すべき点は連結処理時間が O(n) ではなく O(1) で済むことです。
  • strformat マクロベースによる標準的な文字列の挿入・整形処理です。Python の f 文字列に着想を得ています。
  • strmisc このモジュールには strutils で多用される操作として適切ではなく一般的ではない文字列処理操作を実装しています。
  • strscans このモジュールは箱庭言語 (mini language) の解析で便利な scanf マクロを収録しています。
  • strtabs strtabs モジュールは文字列同士のマッピングで効率的なハッシュテーブルの実装です。大小文字区別、大小文字同一視、および種別同一視モードをサポートしています。
  • strutils このモジュールは英数大文字・小文字同士の相互変換、文字列における部分文字列への分割、部分文字列の検索と置換など一般的な文字列処理操作が使えます。
  • unicode このモジュールは Unicode UTF-8 エンコーディング処理機能の実装です。
  • unidecode Unicode から ASCII へ翻字を行うプロシージャです。Python の Unidecode モジュールをベースにしています。
  • std/wordwrap このモジュールは Unicode 文字列で使えるワードラップ・アルゴリズムの実装です。

時刻処理

  • std/monotimes The monotimes モジュールはモノトニック・タイムスタンプ (単調型ファイル時刻情報) の実装です。
  • times times モジュールには時間の処理に関する機能があります。

一般的なオペレーティング・システムのサービス

  • distros このモジュールは OS ディストリビューション ("ディストロ") の検出、および OS ネイティブのパッケージマネージャで使う基盤技術の実装です。主な用途は Nimble パッケージ出力などを生成することですが、一般に良く使われる Distribution (ディストリビューション) の列挙型もあります。これはプラットホーム依存コードの記述で有用です。OS パッケージを用いて Nim を配布するヒントについては packaging を参照してください。
  • dynlib このモジュールは共有ライブラリからシンボルへアクセスする機能の実装です。
  • marshal このモジュールは任意 Nim データ構造のシリアライゼーション (serialization)、およびデシリアライゼーション (deserialization) で使えるプロシージャです。
  • memfiles このモジュールは異種オペレーティング・システムにおけるメモリマップドファイル (POSIX の mmap) 機能のサポートです。
  • os 環境変数の取得、コマンドライン引数の読み取り、ディレクトリ管理、シェルコマンドの実行などの基本的なオペレーティング・システムの機能です。
  • osproc モジュールはos.execShellCmd を超越したプロセス通信処理をします。
  • streams このモジュールは二種類のストリーム・インターフェースに関する実装です: FileStreamStringStream は Nim におけるファイルオブジェクト ( File ) と文字列のストリーム・インターフェースの実装です。それ以外のモジュールでは標準ストリーム・インタフェースの実装を別途用意してあります。
  • terminal このモジュールにはターミナル (コンソールとも言います) 制御用のプロシージャがあります。ANSI エスケープシーケンスだけを用いた実装であり、ほかのモジュールへの依存性はありません。

算術ライブラリ

  • complex このモジュールは複素数関連の数値演算の実装です。
  • fenv 浮動小数点のシステム環境。浮動小数点の四捨五入と例外処理 (オーバーフロー、ゼロ除算など)。
  • math コサイン (余弦)、平根などの数値演算です。
  • mersenne メルセンヌ・ツイスター法による乱数生成器です。
  • random 速くて小さい乱数生成器です。
  • rationals このモジュールは有理数関連の数値演算の実装です。
  • stats 統計解析
  • std/sums 高速処理による総和関数です。

インターネットプロトコルとサポート

  • asyncdispatch このモジュールは I/O 処理で使う非同期ディスパッチャーの実装です。
  • asyncfile このモジュールは asyncdispatch を用いた非同期によるファイル読み書き機能の実装です。
  • asyncftpclient このモジュールは asyncnet モジュールを用いた非同期による FTP クライアントの実装です。
  • asynchttpserver このモジュールは asyncnet モジュールを用いた非同期による HTTP サーバの実装です。
  • asyncnet このモジュールは asyncdispatch モジュールをベースにした非同期によるソケットの実装です。
  • asyncstreams このモジュールは FutureStream の実装です ― キュー処理に特化した Future です。
  • cgi このモジュールは CGI アプリケーションに関する補助機能の実装です。
  • cookies このモジュールは Cookies の解析に用いる補助プロシージャの実装です。
  • httpclient このモジュールはウェブページの同期・非同期受信をサポートした HTTP クライアントの実装です。
  • mimetypes このモジュールは mimetypes データベースの実装です。
  • nativesockets このモジュールは低水準ソケット API の実装です。
  • net このモジュールは高水準ソケット API の実装です。これは sockets の後継モジュールです。
  • selectors このモジュールは各種 OS 専用のバックエンドによるセレクター API の実装です。現在のところ Linux では epoll を、それ以外のオペレーティングシステムでは select を使います。
  • smtp このモジュールはシンプルな SMTP クライアントの実装です。
  • uri このモジュールは URI の処理で使う関数の実装です。

スレッド

パーサー

  • htmlparser このモジュールは XML ドキュメントの構文解析と XML ツリー表現を作成します。
  • json 高性能 JSON パーサーです。
  • lexbase この低水準モジュールは超効率的なバッファリングの仕組みを用いて実装した字句解析器 (lexer) とパーサーです。これは各種パーサーモジュールで使われいます。
  • parsecfg parsecfg モジュールは高性能なコンフィギュレーション・ファイル用のパーサー実装です。コンフィギュレーション・ファイルのシンタックスは Windows .ini 形式と似ていますが、それよりも強力であり行指向のパーサーではありません。プログラミング言語 Nim の文字列リテラル、生文字列リテラルおよび三重クォート文字列リテラルなどもサポートしています。
  • parsecsv parsecsv モジュールはシンプルな高性能 CSV パーサーの実装です。
  • parseopt parseopt モジュールはシンプルな高性能コマンドライン引数パーサーの実装です。
  • parsesql parsesql モジュールはシンプルな高性能 SQL パーサーの実装です。
  • parsexml parsexml モジュールはシンプルな高性能 XML/HTML パーサーの実装です。これは UTF-8 エンコーディング専用です。パーサは多少のエラーがあっても訂正できるよう設計されているため、ウェブに存在する野良 "HTML" であっても解析可能です。

ドキュメンテーションのユーティリティ

  • packages/docutils/highlite プログラミング言語、またはマークアップ言語用のソースハイライターです。現在、数種類の言語をサポートしています。今後、サポート言語を増やしていく予定です。ある言語へ別の言語をネストすることもインターフェースでサポートしています。
  • packages/docutils/rst このモジュールは reStructuredText パーサーの実装です。大規模サブセットを実装してあります。markdown Wiki シンタックスの一部機能もサポートしています。
  • packages/docutils/rstast このモジュールは reStructuredText パーサーにおける抽象構文木 (AST) の実装です。
  • packages/docutils/rstgen このモジュールは reStructuredText から HTML/LaTeX へ変換するジェネレータの実装です。

XML の処理

  • xmltree シンプルな XML ツリーです。DOM よりも効率的でシンプルです。 XML/HTML コード生成で使えるマクロもあります。
  • xmlparser このモジュールは XML ドキュメントの構文解析と XML ツリー表現を作成します。

ジェネレータ

  • htmlgen このモジュールはシンプルな XML と HTML のコードジェネレータの実装です。一般的によく使われる HTML タグ と対応するマクロを使うことで HTML 表記の文字列を生成します。

ハッシュ

  • base64 このモジュールは Base64 エンコーダーとデコーダーの実装です。
  • hashes このモジュールは様々な Nim 型で使える効率的なハッシュ値の算出方法です。
  • md5 このモジュールは MD5 チェックサム・アルゴリズムの実装です。
  • oids オブジェクト ID (OID) はタイムスタンプ、固有カウンタ、乱数値から構成されるグローバル ID です。この組み合わせはグローバル型の分散固有 ID を生成するのに不足はありません。この実装は Mongodb インターフェースから抽出したものであるため Mongo オブジェクト ID とのバイナリ互換があります。
  • std/sha1 このモジュールは sha1 エンコーダーとデコーダーの実装です。

その他

  • browsers このモジュールはユーザのデフォルトブラウザで URL を開くプロシージャの実装です。
  • colors このモジュールは Nim で使えるカラー処理の実装です。
  • coro このモジュールは Nim におけるコルーチンの試験実装です。
  • logging このモジュールはシンプルなロガーの実装です。
  • segfaults アクセス違反 (access violations)、セグメンテーション違反 (segfaults) を NilAccessError 例外に差し替えます。
  • sugar このモジュールは Nim のマクロシステムをベースとした素晴らしいシンタックスシュガーの実装です。
  • unittest ユニットテストで使うドメイン特化言語 (DSL) の実装です。
  • std/varints SQLite と互換性のある可変長整数をデコードします。

JavaScript バックエンドのモジュール

  • asyncjs JavaScript の非同期プロシージャを記述するための型とマクロです。
  • dom JavaScript バックエンド で使えるドキュメント・オブジェクト・モデル (DOM: Document Object Model) の宣言です。
  • jsconsole console オブジェクトのラッパーです。
  • jscore コア JavaScript 関数のラッパーです。通常の用途では stdlib モジュールではなく math, json, および times をお使いください。
  • jsffi JavaScript との連携がしやすくなる型とマクロ。

混血ライブラリ

正規表現

  • re このモジュールには正規表現処理のプロシージャと演算子があります。現在の実装では PCRE を採用しています。

データベースサポート

  • db_postgres 高水準 PostgreSQL データベースのラッパーです。そのほかのデータベース実装でもインタフェースは共通化してあります。
  • db_mysql 高水準 MySQL データベースのラッパーです。そのほかのデータベース実装でもインタフェースは共通化してあります。
  • db_sqlite 高水準 SQLite データベースのラッパーです。そのほかのデータベース実装でもインタフェースは共通化してあります。

ラッパー

ラッパー用に生成された HTML ドキュメントは巨大なためディストリビューションには収録していません。ドキュメントはウェブサイトに掲載してあります。

Windows 専用

  • winlean Windows API の小規模ラッパーです。
  • registry Windows レジストリのサポートです。

UNIX 専用

  • posix POSIX 標準規格のラッパーです。
  • posix_utils POSIX 標準規格、または Linux と BSD 専用の補助機能です。

正規表現

  • pcre PCRE ライブラリのラッパーです。

GUI ライブラリ

  • iup GUI ライブラリである IUP のラッパーです。

データベースサポート

  • postgres PostgreSQL API のラッパーです。
  • mysql mySQL API のラッパーです。
  • sqlite3 SQLite 3 API のラッパーです。
  • odbcsql ODBC ドライバのインタフェースです。

ネットワークプログラミングとインタープロトコル

  • openssl OpenSSL のラッパーです。