++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

命令的とか宣言的とか

leave a comment »

こないだ、言葉の持ってる意味を分からずに使うの気持ち悪いみたいな感じの話を書いたわけですが、今日は今日で、命令的とか宣言的とかって言葉が気持ち悪くなってきたんでその話を。

文字通りの意味で捉えるなら、

  • 命令型言語
    • CPU に対する命令を直接書く
    • 今現在のいわゆるノイマン型コンピューターがチューリング機械モデルで動くんだから、必然的にチューリング機械モデルに近い ≒ 命令的
  • 宣言型言語
    • プログラマーが書きたいことをそのまま書く
    • となると、「何を書きたいか」によって、何が宣言的か変わるんじゃなかろうかと
      • 文字通りの意味で宣言的たろうとすると、DSL(Domain Specific Language)になっちゃうのかなぁ
    • 「関数型だから宣言型」とか「参照透過性持ってる言語が宣言的」とか「ラムダ計算に基づく言語が宣言的」とか言われると少々違和感あり

となるかなと。で、そうすると、命令的と宣言的は厳密に対義語じゃないですよね。確かに、チューリング機械モデルに近いような低レベルのモデルで書きたいことそのまま書けるかというと厳しいんですけど、だからと言って、低レベルなモデルから離れさえすれば書きたいとおりにかけるかというと必ずしもそうじゃない。

模式的に描くと、以下のような感じ。

計算モデルあれこれ

  • プログラミング言語の基礎となってる計算モデルって大きく分けると「チューリング機械モデル」と「ラムダ計算モデル」がある
  • 実際のCPUの構造に近いのはチューリング機械モデルの方
  • チューリング機械モデルそのままじゃ使いにくいんで、その上にちょっとずつ人の直観に近いモデルを被せて使ってる
  • (2次元的に分類できるわけでもない(もっと多次元的)と思うけど、まあ、ここは説明のために簡単化)

で、命令的って言葉の度合を考える場合は、実際の CPU の構造からの距離で考える。

命令的度合

  • 大きい円の中心辺りが命令型言語って言われるもの
  • 関数型言語 = 非命令型 って考え方はいいと思う
  • オブジェクト指向言語だって立派な非命令型言語

一方で、宣言的ってのの方の度合は、プログラマーが書きたいことってのを中心としてそこからの距離で考える。何を書きたいかって文脈に依存。

宣言的度合

  • 大きい円の中心辺りが宣言型言語って言われるもの
  • GUI開発の文脈だと、関数型言語って宣言型度合高くないと思う
    • ↑むしろ、オブジェクト指向言語の方がよっぽど宣言的
  • 今、データ並列がホットな話題だから、その文脈で宣言型度合の高い関数型が注目浴びてるというだけで

こう考えると、関数型言語に対する熱狂度合が人によってばらついてて、自分にとっては関数型言語の良さがしっくりきてなかった理由も納得がいくかなぁと。自分がデータ並列の文脈にあんまりいなかったからなんだと。関数型の良さを伝えたいって人も、「参照透過性大切」とか「immutable大切」って言い方じゃなくて、Map-Reduce型のモデルとかの説明を先にしてから、参照透過性あるとこんなに問題が解消されるでしょと話した方がいいのかもなぁと思ったり。

広告

Written by ufcpp

2010年4月30日 @ 14:40

カテゴリー: 未分類

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。