このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

指標モジュールの話を(いつか)したい

多相関数: 補遺」にて:

多相関数、パラメトリック性/アドホック性、型クラスの正確な定式化には、かなりの抽象化が必要です。曖昧で錯綜した印象は、抽象化が足りてないからでしょう。ここらの話題も気が向いたら書くかも知れません(誰も興味なさそうだが)。

ソフトウェア構造の抽象化(けっこうな抽象化)に興味を持つ人は少なそうですが、僕はそういうことにずっと興味を持ち続けてきました。知的好奇心から、というわけでもなくて、現実的な必要性がありました。なので、実際のソフトウェア・プロジェクトに関与していた時期が一番熱心に考え込んでいた時期だったりします。

ソフトウェア・プロジェクトが終わると、その期間に考えていた問題にも興味が失せてしまい、忘れてしまうことがあります。しかし、時を経て記憶と興味が蘇ったりもします。過去のことは、ロマンチックな思い出でも何でもないけど、ある種のノスタルジーが沸き起こります。

上に引用した文言を書いたことがキッカケとなって、今、ノスタルジックな気分になっているんですよね。で、ソフトウェア構造の抽象化の話を少しします。

ソフトウェア構造の抽象化にも色々ありますが、必要性が高かったのは総称プログラミング〈汎用プログラミング | ジェネリック・プログラミング〉とモジュール化〈modularization | モジュラー化〉です。総称プログラミングにより、少ない手間で適用範囲が広いコードを書くことができます。モジュール化すれば、コードの保守性・拡張性・再利用性が向上します。

総称プログラミングとモジュール化を一緒にすると、総称モジュール化(あるいはパラメータ付きモジュール化)とでも呼ぶべき概念になります。この概念・手法が使えれば、保守性・拡張性・再利用性が高く、少ない手間で適用範囲が広いコード(の集まり)が実現されます。まー、素敵。

もちろん簡単じゃないです。このテの問題を考えるとき、いつも助けてくれるのはインスティチューション理論です。インスティチューション理論をベースに考えるのが良さそうです。少なくとも僕にとっては、インスティチューション理論が一番頼りになる足場です。

インスティチューション理論の基礎概念に指標〈signature〉があります。指標をモジュールと考えることもできますが、規模が小さすぎるので、幾つかの指標をまとめたグループをモジュールと考えるのが良いでしょう。つまり、「モジュールとは何か?」に対しては「指標の集まりがモジュールだ」と答えることにします。「モジュール=指標の集まり」から出発して色々な構造を組み立てます。

ソフトウェア構造の定式化で、あまり言及されないけど重要な問題に「名前の問題」があります。ソフトウェアでは、色々な名前が大量に出てきます。定数名、関数名/メソッド名、型名、クラス名、インターフェイス名、モジュール名、パッケージ名、‥‥ こういった名前をどう使い、どう管理するか、これが大変。「名前の問題」を無視した定式化もできますが、現実では絶対に名前の問題が出てきます。ほっとくと名前がどんどん増加するのは困ったもんです。名前のコンフリクトはトラブルになります。名前のオーバーロードは別な問題を引き起こしたりします。

「名前の問題」以外にも、注意すべきこと/考慮すべきことはありますが、それらを注意/考慮しながら、モジュールを対象とした計算体系〈calculus〉を組み立てるのがひとつの目標になります。モジュールを対象とした計算を大局的プログラミング〈programmoing in the large〉と呼ぶことがあります*1。総称モジュール化は、大局的総称プログラミングの基礎となると言えるでしょう。

総称モジュール化/大局的総称プログラミングについて考えていた時期もあった*2ので、その話を書けたらな、とゆるく思っています。せめて、「指標モジュール=指標の集まりとしてのモジュール」の話くらいは(いつか)したい。

*1:programming in the large は、別な意味で使うこともあるので注意。

*2:自分用メモとして使っていた「メモ編」のアーカイブで「大局的総称プログラミング」を検索すると、2007年から2017年に渡って散発的に記事が存在します。→ https://m-hiyama-memo.hatenablog.jp/search?q=%E5%A4%A7%E5%B1%80%E7%9A%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0