前回、
99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その2】関数型プログラミングのイミュータブルな世界観とイミュータブルな実世界を完全に統合
の最後で、
で、実際この、
すべてのタイムスタンプにデータを保持するのではなくて、
「差分」が発生した瞬間のデータのみを保持する。というアイデアは、結構使えるんですね。
というか、とっくに広く使われています。
GitHubです。Gitのようなバージョン管理システムは、データの差分のみを記録していきます。
さて、これはどういう意味か?
- 物質世界とは、「時間」変数をもって表現できるイミュータブルな関数の返り値である。
関数型プログラミングのイミュータブルな世界観と、イミュータブルな実世界を完全に統合
時間
t
における世界を、時間関数f
をもって、の返り値を実装する方針において、
データベースを、関数型プログラミングでイミュータブルに実装する手段をすでに我々は持っている、ということです。あらゆる、膨大なデータベースを、差分バージョン管理システムを適用することによって、
任意の時間t
におけるデータベースを、イミュータブルに、参照透過に参照できる、ってことです。そもそも、Gitのようなバージョン管理システムという仕組み自体が、
時間を実世界のデータのバージョンインデックスとして取り回すパラダイムなんですが、
もういろいろこのように、道具立ては揃っているわけです。道具立てだけは揃っていて、そのパラダイム、世界観、設計思想、考え方に追随できていないのが世のプログラマです。
関数型プログラミングのイミュータブルな世界観と、イミュータブルな実世界を完全に統合
するにあたって、このパラダイムが、実世界の時間変化を計算機内の時間変化と同一視した
モデルオブジェクトの状態の時間変化を, 計算機内では, モデルオブジェクトの局所変数への代入で実装した.@SICP
という、オブジェクト指向のパラダイムと対立するのは、当たり前のことであって、
「時間」と世界観と、当然の哲学の話を語れば、宗教の勧誘、人智を超えた形而上学的な幻想世界、オカルト扱いされる現状は、ダサい、劣ってるなあ、と思うわけです。
と総括したところ、拙書の読者の方々より、いろいろ質問のメールをいただきました。
今回、そのことについてさらに具体的事例をもって説明したいと思います。
普段からいろいろ新しい技術について勉強している人、探しまわっている人は少し前にこんな興味深い記事を目にしたことがあるかもしれません。
以下部分的に引用させていただきます。
Clojureの作者が作ったデータベースDatomicが凄い
プログラミング言語Clojureの作者Rich Hickey氏率いるClojure HackerのチームがDatomic(デートミックと発音するらしい)というデータベースをリリースしました。これが何やらとてつもないです。10年先を行ってる技術じゃないでしょうか。 まだ本番サービスは始まっていませんが開発環境用のライブラリが配布されています。 Datomicは斬新なアーキテクチャなので一言で説明するのはとても難しいです。 私が理解できたことを簡単に説明します。
変更不可なAppend-onlyデータベース
従来のデータベースで、あるレコードを変更するというのはそのレコードに対応した場所があり、そこのデータを書き換えるということを意味していました。
Datomicでは書き換え可能な場所はなく、過去の事実を時刻と共に全て記録します。 例えば、大統領がブッシュからオバマに変わっても、過去にブッシュが大統領だったという事実は消えません。 ある時刻で大統領がブッシュだったという事実とは別に、単にある時刻で大統領がオバマになったという事実が記録されるのです。 現時点で誰が大統領なのかは時刻が新しい方を見れば分かります。
全ての新たな事実の追加(ライト)は後述するTransactorによって完全に順序付けされています。 つまり、任意の時点のデータベースとは、その時点までの事実の単なる集合に過ぎないのです。 過去の任意の時点が完全な状態で記録されているため、任意の時点に対してクエリーを投げることができます。
ここまで聞くと同じように append-only なデータベースReThinkDBなどを思い浮かべるかもしれません。 Datomicは変更不可性の強みを更にレバレッジするユニークな特徴を持っています。事実の Atomic な最小単位 Datom
Datomic は事実を RDB のレコードや Mongodb のドキュメントのような形で保持していません。 代わりにDatomという事実のAtomicな最小単位に分解して保持しています。
Datomはエンティティ、属性、値、時刻から構成されています。
こうすることによりどんなDatomのセットも決まったデータ構造に埋め込むことなくクエリーから発見できていいそうです。
よく理解できてませんが、RDBやMongodbだとレコード(ドキュメント)の中身はどんなクエリーでも毎回同じ組み合わせだけど、それがクエリー次第で色んな組み合わせになるってことかな。感想
Hacker Newsでもかなりの人が一体なんなんだこれはと戸惑ってる感じでした。 The Joy of Clojure の著者 fogus さんは「Datomicはエイリアンの高度なテクノロジーで満たされたUFOだ」と言っていましたが、全く同じように感じました。 Richが作らなければ、何年待ってもこんなのできなかったんじゃないかと思います。
私は気に入ったなんてレベルじゃないので、これからどんどん使っていきたいです。
これが、前回、私が説明した可能性に溢れた、そうあるべき未来的DBの実装の一例です。
もちろん、それを読んでその世界観を理解していただいた賢明な読者は、
変更不可なAppend-onlyデータベース
Datomicでは書き換え可能な場所はなく、過去の事実を時刻と共に全て記録します。
という記述で、「ああイミュータブルな関数型プログラミングの世界観だ」「FRPだ!」とすべてを理解されることでしょう。
Datomic
The fully transactional, cloud-ready, distributed database.
http://www.datomic.com/
Why Datomic? なぜDatmoicなのか?
Immutable data means strong consistency combined with horizontal read scalability, plus built-in caching.
イミュータブルなデータは、強い整合性・・・ (あと略、書いている通り)
大事なのは、このDatomの細かい仕様ではありません。
それがWhat「何」であるかよりも、
大事なのは、このClojureの作者Rich Hickey氏率いるClojure Hackerのチームが、いったいどういう設計思想、思想的背景、世界観をもってこういうDBを開発実装したのか?というその根っこの部分です。
そこさえしっかり踏まえておればあとは枝葉にすぎないし、場合によってはこういう実装のほうがより良いのではないか?と自分でより良いイノベーションを思いつくことも可能です。
開発者自身によるYoutube動画
What is Datomic?
には、
A sound model of information of time
と、SICPでも拙書でも嫌というほど強調している(同時に、巷の関数型プログラミング解説ではまったくと言って触れられることがない)、計算機科学においては、「時間が本質的」である知見が具現化されています。
背景にある世界観をまるで理解しないまま、10年進んでいる!という評価で追いつこうとしてドキュメントをさらっても、なんだかわかったようなわからなかったようなモヤモヤ感とともに、わかったつもりになる、という事になります。
ここまで聞くと同じように append-only なデータベースReThinkDBなどを思い浮かべるかもしれません。
というのも、もちろん同じ関数型、FRPのリーグに属する次世代DBです。
そして、よくよく理解していないと、これがイミュータブルな関数型、FRPのパラダイムに属する斬新なアーキテクチャーによって構成される次世代DBであることは、気づきにくいですね。
関数型プログラミングは、オブジェクト指向技術と「直行」するとか、パラダイムも世界観も何も考えることもない、関数型プログラミングとは何?ということばかり語っても、教えられてもどうしようもないです。
もちろんOCamlの「多相ヴァリアント」なんて瑣末な知識が役立つわけもないでしょう。そんな知識があったところで、世界観の転換、パラダイムシフトには「歯が立たない」わけです。
実際、上記のDBには、明示的に関数型パラダイムである、ミュータブルな物質世界観ではない、時間軸をイミュータブルな集合として扱う世界観である、というのは、あんまり丁寧に説明もされていません。
じゃあ、どこで説明されているのか?
ひとつは、このシリーズの#1で上げたSICPです。しかし、実際SICPは一般に読み解くのは難解ですから、手軽なのは、このブログ記事の概略であり、さらに、基本まったく同じことを掘り下げて書いた、私の本です。
関数型プログラミングの「パラダイム」「世界観」「時間が本質」であることを、一貫して解説しました。そのことを理解できたオープンマインドで柔軟な知性を有する次世代プログラマ、はむしろ少数派であったようですが。
この「世界観」の部分に自身の考え方が追随できて、さらなるイノベーションを起こせるか起せないか?が今後のプログラマに求められるシビアなスキルなのだと私は考えています。
「今後」のプログラマです。現世代の我が国のプログラマはいろいろいろ問題が多い、残念な現状であるのは、このブログ記事で論じている通りです。ぜひ反面教師にして乗り越えていってください。
私は次世代プログラマの方々に期待してこのブログ記事を書いています。応援しています。
0 コメント:
コメントを投稿