前回の続き.
当ブログのさまざまな企画の中で,この連載に限ってはどうにも敬体だと文章が書き辛いことに気が付きました.おそらく,これが唯一それほど自分が詳しくないものについて公式ドキュメントやウェブ上の文献を調査することによってのみ得られる知識を簡潔にまとめたに過ぎないものだからでしょう.というわけで,唐突ながら今回からこの連載については常体で記述していくことにします.過去のブログ記事を文体変更のみのために更新する予定はありません.
m4
- Macro processing language
- https://www.gnu.org/software/m4
m4 は汎用のテキストマクロプロセッサ.マクロ言語なので,基本的なアイデアとしては TeX 言語と似たようなものだと考えられる.実際,テキスト置換が主たる機能とされている.マクロを処理するプリプロセッサと聞くと C 言語のマクロを思い起こすが,m4 はちょうどそれを汎用にしたようなもので,プログラミング言語に対する前処理のみならず自然言語の定型文生成などの用途に用いられる場合もあるらしい.なお大方の予想に違わずチューリング完全とのこと.
現代においては中核的な利用先は autoconf のようで,具体的には Makefile を生成する実行ファイル configure
の生成元である configure.in
で m4 マクロが多用されているらしい.
mbedtls
- Cryptographic & SSL/TLS library
- https://tls.mbed.org/
Mbed TLS という名の示す通り,組み込みに適することを売りとする X.509 証明書,SSL/TLS,DTLS プロトコルの実装(C ライブラリ).昔は Polar SSL という名前だったらしい.
Homebrew フォーミュラの homepage 情報は更新されていないが,現在は開発元が移管されており,2022年3月現在公式ウェブサイトは以下に移動している.
組み込み用ということで GitHub リポジトリの概要欄でも「オープンソースで,ポータブルで,利用が簡単で,可読性が高く,柔軟な SSL ライブラリ」と謳われている.また対応するプラットフォームが多く,Linux, Windows, macOS はもちろん Android や iOS もサポート対象となっている.
md4c
- C Markdown parser. Fast. SAX-like interface
- https://github.com/mity/md4c
高速な C 言語 Markdown パーサ.よく知られているように Markdown にはさまざまな方言があるが,このパーサは CommonMark に準拠しているらしい.SAX に似たインターフェースとのことだが,ここで SAX とは Simple API for XML のことだろうか.
Poppler に採用されている.また md4c をベースに WebAssembly に移植されている markdown-wasm というプロジェクトも存在する.これはかなり高速と評判のようだ.
mecab
- Yet another part-of-speech and morphological analyzer
- https://taku910.github.io/mecab/
デファクト・スタンダードな日本語の形態素解析器.標準的な辞書(IPA 辞書)だけでなく,用途や好みに合わせてさまざまな辞書と組み合わせて利用できるのが特徴.またその C++ 実装は高速化のためにさまざまな工夫が凝らされているらしく,とにかく動作が高速.代替の形態素解析器は色々あるが,速度だけを理由としても MeCab を選択することになりがちである.
mecab-ipadic
- IPA dictionary compiled for MeCab
- https://taku910.github.io/mecab/
MeCab で読み込み可能な形式に変換された IPA 辞書.古い IPA コーパスから作られたので「IPA 辞書」と呼ばれているらしい.品詞ラベルが学校文法の体系にかなり近いため利用しやすいとされている.一方で,IPA 辞書を用いて分かち書きを行うと,特定の事例で単語分割が妙なことになる問題が知られている.
mpdecimal
- Library for decimal floating point arithmetic
- https://www.bytereef.org/mpdecimal/
十進多倍長演算をサポートする C/C++ ライブラリ.Python の decimal
モジュールに採用されている.
mpfr
- C library for multiple-precision floating-point computations
- https://www.mpfr.org/
GNU MPFR は多倍長浮動小数点計算用のCライブラリ.「丸め」に重きを置いたプロジェクトで,サポートされている複数の丸めモードを選択できるらしい.GCC に採用されているほか,Julia・MATLAB・Maple 等の科学計算関連で特に有名なプロジェクトでも利用されている.
myman
- Text-mode videogame inspired by Namco’s Pac-Man
- https://myman.sourceforge.io/
コンソールで遊べるパックマン風のミニゲーム.
ncurses
- Text-based UI library
- https://invisible-island.net/ncurses/announce.html
ターミナル非依存的にテキストベース UI を構築するためのライブラリ.GNU プロジェクトの一環として開発されているが,ライセンスは MIT に近いものが採用されている模様.htop, vim, zsh などが利用している.
nettle
- Low-level cryptographic library
- https://www.lysator.liu.se/~nisse/nettle/
汎用的な低レベル暗号ライブラリ.GnuTLS に採用されている.
ninvaders
- Space Invaders in the terminal
- https://ninvaders.sourceforge.io/
超有名アーケードゲーム『スペースインベーダー』のターミナル版クローン.ncurses を利用した TUI で遊ぶことができる.ライセンスは GPLv2.
ちなみにスペースインベーダーはかなり難易度の高いゲームだが,名古屋撃ちなどとして知られる攻略法を用いるとゲームオーバーにならずに長時間遊ぶことができるらしい.私が学部時代にお世話になった大学教授なども若い頃はこれの攻略にはまっていたと聞いたことがある.
nkf
- Network Kanji code conversion Filter (NKF)
- https://osdn.net/projects/nkf/
種々の文字コードや改行コードを相互変換する.入力の文字コード等は(ヒューリスティクスにより?)自動判別される.Network Kanji Filter という名称からもわかるように,少なくとも起源としては日本ローカルなツール.初版は富士通の名で1987年に公開されており,歴史が長い.
node
- Platform built on V8 to build network applications
- https://nodejs.org/
Node.js は V8 エンジン上に構築されたサーバサイド Javascript 実行環境.そのパッケージマネージャが npm.
npth
- New GNU portable threads library
- https://gnupg.org/
GnuPG で用いられている非プリエンプティブなスレッドライブラリ.GNU Pth の後継.メーリングリストに投稿されている経緯説明によると,GNU Pth が Windows に対応できないことから開発が始まったらしい.ライブラリとして GnuPG とは独立して存在しているが,少なくとも Homebrew-core に登録のあるフォーミュラの範囲では他では使用されていないようだ.
nspr
- Platform-neutral API for system-level and libc-like functions
- https://hg.mozilla.org/projects/nspr
Netscape Portable Runtime (NSPR) は Mozilla が開発するプラットフォーム非依存の libc 風ライブラリ.上記のフォーミュラに Homepage として登録のある URL はソースコードリポジトリのもので,ドキュメントは以下のアドレスにある:
もともと Java を種々の環境に移植するため,OS などの環境の違いを吸収するために開発が始まったものらしい.スレッド・I/O・時間管理・メモリ管理・共有ライブラリのリンクなどの機能を備える.Firefox をはじめとする Mozilla 製品だけでなく Poppler などでも利用されている.
nss
- Libraries for security-enabled client and server applications
- https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
Network Security Services (NSS) も Mozilla 発のライブラリで,セキュア通信を必要とするアプリケーション用の機能を提供する.最新のドキュメントは以下で閲覧可:
先述の nspr に依存している.Firefox はもちろん,一部プラットフォームでは Google Chrome でも利用されているらしい.
numpy
- Package for scientific computing with Python
- https://www.numpy.org/
言わずと知れた Python の数値計算ライブラリ.普通は pip でインストールするので Homebrew の出番はないが,Python 製コマンドラインツールなどをインストールする際に依存関係として入ってきている.
ocaml
- General purpose programming language in the ML family
- https://ocaml.org/
特定の界隈では大人気の強く型付けされた(静的型の)関数型プログラミング言語.この言語で書かれた有名プロダクトとしては定理証明支援システム Coq や次世代組版システム SATySFi が挙げられる.
入門書としては五十嵐淳『プログラミング in OCaml』を薦められ,私はこれを読んで勉強した.私の興味範囲においてはあまり有益な利用場面がなく,残念ながら実用したことはない.
ocaml-zarith
- OCaml library for arbitrary-precision arithmetic
- https://github.com/ocaml/Zarith
OCaml の算術・論理演算ライブラリ.Coq が依存している.実装は GMP ベースで高速らしい.
oniguruma
- Regular expressions library
- https://github.com/kkos/oniguruma/
鬼車 (Oniguruma) は正規表現ライブラリ.正規表現オブジェクトごとに異なる文字コードを指定できることを特徴とする.
かつて Ruby で採用されていた.現在の Ruby はフォークプロジェクトの鬼雲 (Onigmo) が利用されている.Ruby 以外にも PHP や Atom,Tera Term,jq などでの採用実績がある.
opam
- OCaml package manager
- https://opam.ocaml.org
OCaml のパッケージマネージャ.もちろん実装も OCaml.
openblas
- Optimized BLAS library
- https://www.openblas.net/
BLAS (Basic Linear Algebra Subprograms) というのは線形演算の API 仕様群らしい.Level 1(スカラ・ベクトル演算),Level 2(ベクトル・行列演算),Level 3(行列・行列演算)に分かれている.OpenBLAS はオープンソースの最適化された BLAS 実装の1つ.GotoBLAS から派生したものらしい.NumPy など数多くのプロジェクトで採用されている.
opencore-amr
- Audio codecs extracted from Android open source project
- https://opencore-amr.sourceforge.io/
Adaptive Multi-Rate (AMR) という音声コーデックを扱うライブラリ.Android のマルチメディア対応は初期の頃から PacketVideo 社の OpenCORE フレームワークというものが使われていたようで,このライブラリはその一部.ffmpeg が利用しているらしい.
openexr
- High dynamic-range image file format
- https://www.openexr.com/
OpenEXR はプロ向けのラスタイメージ形式で,CG 業界などで広く使われているものらしい.その仕様は Open という語が表すように上記ウェブサイトで詳細に公開されている.このフォーミュラが提供するのはその標準実装ライブラリで,C++ 製である.ImageMagick や OpenCV に利用されている.
openjpeg
- Library for JPEG-2000 image manipulation
- https://www.openjpeg.org/
JPEG 2000 形式のエンコード・デコードを扱うオープンソースライブラリ.別の実装として JasPer などがあるが,こちらの方が JPEG 2000 仕様に忠実らしい.ImageMagick ではかつて JasPer が使われていたが,現在はこのライブラリが利用されている.実装は C 言語.
次回もそのうち.