担当教員と話したことメモ
卒論の三本柱がだいたい決まってきました.
(1) プログラミング言語のゴールを明確にする
・ 「抽象度」「自由度」「表現力」「記述力」「部品化力」「低粒度」「宣言的」「再利用」「情報隠蔽」 etc... などの言葉は,いろいろな文脈で,いろいろな意味を含ませて,あいまいに使われている
・ これらを,できるだけ明確にしてゆき,理想のプログラミング言語のあるべき姿を明確に描き出す
・ 各概念はお互いにリンクしていることが多いため,バラバラではなく,包括的に扱って行く必要がありそうだ.
# SICP の表紙の eval/apply の陰陽マークのように.東洋的な思想ですなぁ :-)
・ とりあえず,各概念の様々な定義を洗い出してゆく必要がありそうだ.(1) は,このあとの重要な指針となる概念なので,しっかりやらないと.
やっぱり,全体がもつれあって,一つの概念を成している感じですね.どうまとめたら良いものやら… まだまだブラッシュアップがたくさんたくさん必要そうです.
# もつれた階層と言えば… GEB (ゲーデル・エッシャー・バッハ)ですなぁ.そういえば,あれも抽象化の話しでしたよね.やはり,究極の抽象度 = 人工知能なのか ? 不思議の輪の連鎖.
# そういえば,最近,タルスキの言語階層は制限がきつ過ぎるのではないか ? みたいな話を,「論理学をつくる」で読んだような気が… (?) やはり,ある程度の階層のもつれは必要なのかなぁ ? ある程度ってのがどの程度なのかが曲者ですが…
(2) 既存のプログラミング言語には,何が欠けているのかを示す
・ 以前は,プログラミング言語の発展の歴史を順番に述べて行き,その頂点に ET が来ることの必然性を示そうと試行錯誤していた
・ しかし,進歩は段階的でシーケンシャルなものとは限らず,パラレルに,様々な人が,様々な意図を持って新しい概念を生み出すことが多いため,これは非情に困難
(おまけに,各パラダイム間の融合も激しい)
・ 単純に,各パラダイムや,それのインスタンス言語には,何が欠けているかを示すのみとする (そのため,(1) が非情に重要になってくる)
・ 私は,卒論でアウトラインを示すだけ.専門的なところは,専門家にちゃんと埋めてもらう.そしてこれが,ET を紹介する書籍になる
(3) ET がそれに一番近いことを示す
・ 既存のプログラミング言語に欠けていたピースを,「正当性」の概念を用いてどのように埋めて行くのか,そのロードマップを示す.
# まだまだ発展途上なので,実用化のためには,理論・言語仕様・処理系・ドキュメント・ライブラリ・企業のバックアップ… etc..... etc.... 課題は山積みですが,可能性は潤沢であることを示します.
・ 理論だけでは机上の空論になってしまうので,できれば(例えばSICP の amb の例のような) 理論の圧倒的な優位性を示す,素晴しいプログラム例を載せたいところ
# この SICP の,非決定的計算の例 Variations on a Scheme--Nondeterministic Computing の,圧倒的な宣言度の高さの例は,本当に衝撃的.繰り返し処理などのプリミティブな処理は勿論,探索処理でさえ完璧に隠蔽されていて,もうほとんど問題(仕様) ≒ プログラム ! 素晴しい.完璧です.感動 !
(1) プログラミング言語のゴールを明確にする
・ 「抽象度」「自由度」「表現力」「記述力」「部品化力」「低粒度」「宣言的」「再利用」「情報隠蔽」 etc... などの言葉は,いろいろな文脈で,いろいろな意味を含ませて,あいまいに使われている
・ これらを,できるだけ明確にしてゆき,理想のプログラミング言語のあるべき姿を明確に描き出す
・ 各概念はお互いにリンクしていることが多いため,バラバラではなく,包括的に扱って行く必要がありそうだ.
# SICP の表紙の eval/apply の陰陽マークのように.東洋的な思想ですなぁ :-)
・ とりあえず,各概念の様々な定義を洗い出してゆく必要がありそうだ.(1) は,このあとの重要な指針となる概念なので,しっかりやらないと.
# 以下は,単なる思い付きの列挙です (^ o ^;) ぜんぜんまとまっていません.順番もバラバラです.
- 「抽象度」 --> どれくらい非本質的な記述が少なくてすむかの度合 --> 「一般性」「汎用性」「再利用性」「細部の隠蔽」「表現力」「記述力」の高さの度合
- 情報科学 = 「抽象度」の追求と言っても良いぐらい,本質的で重要な概念
- ハードウェア(機械語)自体の「高級化」 --> 「高級」言語--> いくつかの命令をまとめる --> コードの圧縮
- 人間の認識能力の限界 --> 非本質な細部はできるだけ隠蔽してほしい --> 抽象化
- 「抽象度」が低ければ低い程,背景(前提)知識が不用になる --> 機械的な自動化が容易 --> 人間にはきつい
- 数学基礎論(かなり低い) --> チューリングマシン --> コンピュータ,命令型言語
- ラムダ計算(基礎論よりは高い) --> 関数型言語
- 非本質の除去 --> 膨大な背景知識 --> 機械化・自動化が困難
- コンパイラ --> 機械による,自動的な非本質の補完 --> これの延長線上 --> プログラムの自動生成 --> 限りなく AI --> 高い「抽象度」の極限
- 構造化言語 --> goto の排除 --> 見通しのよさ,プログラム証明論からの流れ
- 例外 --> 本質と非本質の分離の試みの一つ
- オブジェクト指向 --> 設計手法を言語に組み込む試みの一つ --> ある程度は成功 --> 時に不自由(手続き型言語でやること,そもそも言語仕様に設計手法を組み込むこと自体に,本質的な無理があるのか ?)
- 自然言語が頂点 --> 究極の抽象度のプログラミング言語は AI (Artificial Intelligence ; 人工知能)そのもの --> 現時点ではほぼ不可能
- 次善の策 --> 意味が一意に定まる人工言語 --> プログラミング言語
- プログラミング言語 --> さまざまな「抽象度」 --> 結局ここにたどりつく
- 高い抽象度 --> コードサイズ減 --> デバッグが容易 --> 究極的には,プログラムの証明さえ現実的
- 証明 --> 機械的厳密さが要求される --> ならば機械による自動的な証明 --> デバッグが完全に不用になる可能性
- 高い抽象度 --> プログラムが自然言語に近付く --> 自然言語は曖昧性が高い --> 意味が一意ではなくなる ?
- 自然言語処理 --> 曖昧性との戦い --> 可能性の爆発 --> 困難な機械化・自動化
- コンパイラの極限 = 自然言語処理システム ?
- 人工言語 --> 意味が一意 --> 曖昧性がない --> 意味とは ? --> 意味の概念は重要
- 正当性 --> 等価変換計算モデル --> 意味という難題に正面から取り組んだ本物の抽象度
- プログラミングの正当性 = 仕様に対する正当性
- 仕様とは ? --> プログラムの意味を自然言語で表現したもの
- 仕様 = プログラムなら最高 --> どうする ? --> 2 つ方法がある
- (1) 仕様をできるだけ形式的にする --> 形式的仕様記述手法 --> 人間との相性が悪い(実用になるのか ?)
- (2) プログラミング言語を,できるだけ仕様(自然言語)に近付ける --> より望ましそう --> 宣言的パラダイム
- 宣言的パラダイム --> 宣言 (What is) と 手続き(How to) の分離 --> 手続きは隠蔽 --> 高い抽象度 --> 数学を目指す
- 宣言的パラダイム --> 関数・論理・制約....etc
- 究極的には,どうやって実際に構成するのか = アルゴリズムすら不用にしたい --> 人間的な試行錯誤,探索 --> 高い宣言度
- 数学 --> 無限を含む --> さまざまな試み
- 制約パラダイム,項書換え,絞りこみ
- 高い抽象度 --> 一般的に効率が悪い --> さまざまな試み
- 目的に応じた制約解消子,分散処理
- 抽象度の高さ --> 本質のみ --> 「記述力」「表現力」の高さ
- コードサイズの圧縮 --> 開発・コーディング・テスト・デバッグ・保守全てにおいて有利
- 本質的な記述 --> 不用な制約に縛られない --> 高い「汎用性」「再利用性」
- トリビアルな細部の隠蔽 --> 本質のみに集中できる --> 「情報隠蔽」
- 探索処理や,分散処理,非正則処理さえ,「トリビアルな細部」にしたい --> プログラマは何も意識する必要はない
- 「部品」の「粒度」が低ければ低い程,「自由度」が増す.
- 部品を組み合わせて,より大きな部品をつくることでシステムを構築 --> 不用な依存関係をできるだけ減らす必要がある --> 「部品化力」 --> 高い「抽象度」が必要 (最初に戻ってしまった(笑))
やっぱり,全体がもつれあって,一つの概念を成している感じですね.どうまとめたら良いものやら… まだまだブラッシュアップがたくさんたくさん必要そうです.
# もつれた階層と言えば… GEB (ゲーデル・エッシャー・バッハ)ですなぁ.そういえば,あれも抽象化の話しでしたよね.やはり,究極の抽象度 = 人工知能なのか ? 不思議の輪の連鎖.
# そういえば,最近,タルスキの言語階層は制限がきつ過ぎるのではないか ? みたいな話を,「論理学をつくる」で読んだような気が… (?) やはり,ある程度の階層のもつれは必要なのかなぁ ? ある程度ってのがどの程度なのかが曲者ですが…
(2) 既存のプログラミング言語には,何が欠けているのかを示す
・ 以前は,プログラミング言語の発展の歴史を順番に述べて行き,その頂点に ET が来ることの必然性を示そうと試行錯誤していた
・ しかし,進歩は段階的でシーケンシャルなものとは限らず,パラレルに,様々な人が,様々な意図を持って新しい概念を生み出すことが多いため,これは非情に困難
(おまけに,各パラダイム間の融合も激しい)
・ 単純に,各パラダイムや,それのインスタンス言語には,何が欠けているかを示すのみとする (そのため,(1) が非情に重要になってくる)
・ 私は,卒論でアウトラインを示すだけ.専門的なところは,専門家にちゃんと埋めてもらう.そしてこれが,ET を紹介する書籍になる
(3) ET がそれに一番近いことを示す
・ 既存のプログラミング言語に欠けていたピースを,「正当性」の概念を用いてどのように埋めて行くのか,そのロードマップを示す.
# まだまだ発展途上なので,実用化のためには,理論・言語仕様・処理系・ドキュメント・ライブラリ・企業のバックアップ… etc..... etc.... 課題は山積みですが,可能性は潤沢であることを示します.
・ 理論だけでは机上の空論になってしまうので,できれば(例えばSICP の amb の例のような) 理論の圧倒的な優位性を示す,素晴しいプログラム例を載せたいところ
# この SICP の,非決定的計算の例 Variations on a Scheme--Nondeterministic Computing の,圧倒的な宣言度の高さの例は,本当に衝撃的.繰り返し処理などのプリミティブな処理は勿論,探索処理でさえ完璧に隠蔽されていて,もうほとんど問題(仕様) ≒ プログラム ! 素晴しい.完璧です.感動 !
