Today アクセスカウンター Yesterday アクセスカウンター

担当教員と話したことメモ

卒論の三本柱がだいたい決まってきました.

(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 の,圧倒的な宣言度の高さの例は,本当に衝撃的.繰り返し処理などのプリミティブな処理は勿論,探索処理でさえ完璧に隠蔽されていて,もうほとんど問題(仕様) ≒ プログラム ! 素晴しい.完璧です.感動 !

コメント

Secret

プロフィール
  • Author:あろは (alohakun)
  • 京都のデバッガベンダーに勤めるアラサー会社員。

    本ブログの内容は,あくまでも個人的な感想や意見であり,会社の意見を代表するものでは一切ありません.

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map
FC2カウンター
ブロとも申請フォーム

この人とブロともになる

最近のコメント
リンク
最近のトラックバック
人生の残り日数
日本人男性の平均寿命は 28700日.
RSSフィード
カテゴリー
  1. RSSリーダー