2020年12月27日日曜日

コメントの文脈

正しいコメント文とは何かを考えていた。 正直に言うと、コメント文をコードから追い出して別レイヤーに配置する方法を考えていた。 それにはまず正しいコメント文のあり方を把握しなければならない。 コメント文は色々と文句を言われるが、結局実行に影響を与えないので、捨て置かれているのだと思う。 文句はたとえば、多すぎる、少なすぎる、コードの実態と合わなくなる、何に対するコメントか不明確、などだ。

最後の文句の解消を考えよう。 まともなコメントであれば、それは何らかの対象に関するもののはずだ。 たとえば変数の値に対する、特定の値しか使わないとか、単位は何だとか、といった注釈。 たとえば関数の引数や型に関する説明、処理内容や、アルゴリズムの選択について。 たとえばコードブロックの役割や、不変量の説明。 したがって、コメントはその説明される対象と同じスコープを持つと思って良い。 スコープを持つものだとすれば、オブジェクトであればよいだろう。 ただ、コメントされる対象と一緒に初期化されるだけのオブジェクトでは、 コードブロック特にコメントされる対象が単に意味的なまとまりとしか言えない数行のコードブロックの場合に、不明確である。 従って、逆にコメントがスコープを作り出すほどの力を持っていた方が適切とも言える。

ここから話は Python に限定される細道に入る。 他の言語では変数スコープの規則が違って、やりにくいかもしれない。 という注意を先にしておこう。 Python ではコンテキストマネージャーという仕組を使うことで、with 文により好き勝手にスコープを切れる。 このとき、変数のスコープはあくまで関数単位(関数の外にあるものはモジュール単位)になるので、このスコープはあくまでコンテキストマネージャーによって提供されるコンテキストの話である。 コメントをコンテキストマネージャーにすることで、コメントの影響範囲は明確化できる。 たとえば、

# A をする
a = A()
# B をする
if a に関する条件:
    B(a, 追加の引数)
else:
    B(a, 違う引数)

のようなコードが、

with Comment("A をする"):
    a = A()
with Comment("B をする"):
    if a に関する条件:
        B(a, 追加の引数)
    else:
        B(a, 違う引数)

のように書けたら良いのではないだろうか。

ということで Python のパッケージを作った。

comment-object

まあ、実際に使ったらインデントが深すぎて死にそうだけど。

2020年12月16日水曜日

ピュタゴラス学派の再興

ピュタゴラス学派に帰依しよう。 「万物は数である」

(注意)この文章は、いつにも増してラフなできあがりとなっております。

21世紀的解釈

私は「万物は数である」なる標語を次のように解釈する。 「ビットから構成される世界だけが認識できる」

ビットは物理的存在である。 持続する対比可能な状態は何でもビットたり得る。 持続時間はそれをビットとして利用する存在にとって利用可能とみなすことができれば良い。 生身の人間には CPU 内部の電気信号は小さすぎるし変化が速すぎてビットとして利用可能でないが、 CPU にとってはビットとして当然利用可能だし、コンピュータというシステムを介せば人間にとってもビットとして利用可能と言って良い。 これを抽象概念と片付けてはいけない。 たとえば思考を経由せずに生物は DNA に記録されたビットを操作できるのだから。

自然数はビット列の一つの、一番自然な、解釈である。 当然ながら古代ギリシアにはビットの概念は見つかっておらず、代わりに数を取り上げたピュタゴラスの卓見には敬服するしかない。 ビットが物理的存在であると同様に自然数も物理的存在だと言って良い。 ただし、数学者のように自然数が無限に存在する、と言うためには理想化された世界モデルが必要になってくる。

言語もビットの上に構築されるシステムである。 音素や文字などの持続する対比可能な状態から組み立てられている。

人間が「認識できる」ものが言語化されず、数値化もされないことがあろうか。

学問分野間の関係

ビットの科学と言えば計算機科学だろう。 数学から20世紀に派生した、と考えられるが、そこに現れる大きな特徴は全てが離散的(ビットに基づいていると言って良い)で、なおかつ計算はビットの操作の積み重ねであることを明確にした点にある。 特に、計算量の理論は重要である。

数学を算術と幾何に分ける古い分類に従って考えてみると、算術は正にビットの理論だったと言って良い。 一方の幾何はピュタゴラスの昔からビットとの相性が悪い。 幾何をビットで表そうとすると一般に無限の操作が要求される。 たとえば実数は「直線上の地点をどれだけでも正確に指定し分けることができる」ということを実現するためのシステムと言って良いと思うのだが、一つの地点を指定するのに無限の労力(計算量)が要求される。 これはビットの科学とは矛盾してしまうのだが、それを矛盾と見なさないために現在の数学が採用する論理は計算量を無視できることが要請されているのだ。 (したがって計算機科学のバックグラウンドを持っていると気持ち悪い議論に見える。)

再三「ビットは物理的存在」と言ってきたが、量子力学から矛盾なくビットを導けるかはよく分からない。 古典力学とは矛盾しない話なので、あとの調整は物理学者に任せよう。

一方、「ビットは物理的存在」という言葉は計算機科学が物理学に吸収されることを意味しない。 原子という概念を足場に化学が物理学から独立しているように、ビットを足場に計算機科学は物理学から独立して進むだろう。 また数学も無限の力を借りて計算機科学から独立に進むだろう。

結語

だいぶ話が発散した。 ビットは現実世界に基盤を有している。 ピュタゴラスに倣ってビット列で世界を語ろう。 ビットの現実から外れる数学のチートに自覚的になろう。