| Up | 抽象化と溯行 | 作成: 2026-09-05 更新: 2026-09-06 |
抽象化は,<見る・知る・考える>を少なくすること。 そしてこの抽象化をする方法が,言語。 言語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(機械語) ────── デバイス |