Up 抽象化と溯行 作成: 2026-09-05
更新: 2026-09-06

4足歩行ロボット > 自律型> コンピュータ > ソフトウェア > 言語 > 抽象化と溯行

    データ流通の Python プログラムは,データ流通のハードウェアの抽象化である。

    抽象化は,<見る・知る・考える>を少なくすること。
    そしてこの抽象化をする方法が,言語。

    言語Lがつくる抽象世界を,
       W(L)
    で表す。
    実際は<話者>に依存するわけだが,ここは細かくは考えない。


    W(L) に対しては,これを抽象化する言語が新たに起こる。
    こうして,言語の進化のベクトルのうちには,
      抽象化を進める (考えることを少なくする)
    というのがある。

    プログラム言語は,機械語に溯行する。
    プログラムはコンピュータのメモリに納め,そしてメモリに入るのはビットなので,プログラムは機械語から始まるのである。

    言語の抽象化は,この機械語から始まる。
    そして,いまの 「高級言語」 (抽象度の高いプログラミング言語) があるというわけ。


    抽象化の 「<見る・知る・考える>を少なくすく」 は,これまでの抽象世界の隠蔽と通じる。
    機械語から高級言語への進化は,機械語が見ていた世界──ハードウェア──の隠蔽である。
    高級言語を使うことは,ハードウェアを見なくなることであり,見ることができなくなることである。

    進化は,「退化も進化」 であって, 「進歩」 とは違う。
    言語の進化もこれであり,ひとの 「都合」 の変化が言語を変えていく。

    高級言語で書くときのプログラムの短さは,コンパイルで機械語にしたときの 「水膨れ」 と表裏である。
    コンピュータの資源をけちる必要が無くなったことが,高級言語化への道を開いた。


    抽象化 (考えることを少なくする) の中身は,記述のマクロ化である。
    言語L を抽象化する言語は,L の 「マクロ言語である。
    Lに対し,マクロの占める範囲がまだ部分的であるとき,そのマクロは 「ライブラリ」 と呼ばれる。
    そして,マクロが L をすっぽり覆うことを以て,Lのマクロ言語の成立となる。

    「マクロ化」 は,言語の変化の形の1つである。
    言語の変化の形には,他に
      ことば・記述対象の追加
      語彙・言い回しの変更
      別の言語への乗り換える
    などがある。


    一般に,言語Lが変化して L' になることを,
       L | L'
    で表す。

    言語の進化は,
      L | L' → L' | L" → ‥‥
      (系統分かれ・合流を含む)
    である。

    変化 L | L' には,大小がある。
    また,本質的なものとそうでないものがある。


    抽象化は,その都度 「翻訳規則」 をつくり,溯行ができるようにする。
    L | L' には,L に溯行できるようにする翻訳規則の作成が含まれる。

    こうして,例えば Python でデバイスを扱うことができる。
    Python はデバイスを直接叩かないが,抽象化の溯行によって,デバイスを叩くのである。


    このとき,
      「データ流通のプログラミング」の場合の
      機械語から Python までの<抽象化の階梯>
    が,つぎのように書ける (厳密なものではない):
     ( & は,追加を表す)

     W(Python&ROS2&OS)
        ↑← rclpy
        │  as Python|(Python&ROS2)
     W(Python&OS)

     W(汎用言語&ROS2&OS)
        ↑← rcl
        │  as (C++&ROS2)|(汎用言語&ROS2)
     W(C++&ROS2&OS)
        ↑← rmw
        │  as (C&DDS) | (C++&ROS2)
     W(C&DDS&OS)
        ↑← DDS
        │  as C|(C&DDS)
      W(C&OS)
        ↑← OS (UNIX)
        │  as C|(C&OS)
       W(C)
        ↑← C
        │  as 機械語|C
      W(機械語)
     ──────
      デバイス