プログラミング言語と自然言語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/08 01:14 UTC 版)
「プログラミング言語」の記事における「プログラミング言語と自然言語」の解説
プログラミング言語は人間同士の会話と比較して、正確性と完全性の要求性が非常に高いという特徴がある。自然言語で人間同士が対話する場合、スペルミスや文法的なエラーがあっても相手は状況から適当に補正し、正確な内容を把握する。しかしコンピュータは指示が曖昧では動作せず、プログラマがコードに込めた意図を理解させることはできない。 プログラミングにおけるプログラミング言語の必要性を排除する方法として自然言語によるプログラムが構想されたり提案されることもあるが、その方向性は実用化には達しておらず、議論が続いている。エドガー・ダイクストラは形式言語の使用によって意味のない命令を防ぐという立場で、自然言語によるプログラミングを批判していた。アラン・パリスも同様の立場であった。 このあたりの歴史的に錯綜した議論は、結局のところ「コンピュータを活用するにはプログラミングが必要であり、プログラミングはプログラミング言語で行われる」というある種の教条(ドグマ)が、次の2つの事象に分解されることで無意味な議論になった。すなわち「コンピュータをほどほどに活用する程度のことならば、各種アプリケーションソフトウェアや自然言語認識や自然言語処理技術の活用など(スマートスピーカーなど)により、利用者が自分でプログラミングすることは必ずしも必要ではなくなった」ということと「コンピュータのより徹底した活用、具体的にはそういった自然言語認識や自然言語処理のシステムそのものを作るには、プログラミングが必要ということは全く相変わらずであり、プログラミング言語の重要性は増えこそすれ、減りはしない」ということである。 自然言語との違い プログラミング言語は、もともと人間がコンピュータに命令を伝えその実行方法を指示するために作られたものであり、コンピュータが曖昧さなく解析できるように設計されている。多くの場合構文上の間違いは許されず、人間はプログラミング言語の文法に厳密にしたがった文を入力しなければならない。 これに対して、一般に自然言語の文法規則はプログラミング言語にくらべてはるかに複雑であり、例外も多い。ただしこれは規則が一般にいいかげんであったり、曖昧であるということではない。一般に自然言語の規則は奥が深く、驚くほどの非合理性に裏打ちされていることもあれば、驚くほどの合理性に裏打ちされていることもある。驚くほどの非合理性でも合理性でもないものに裏打ちされていることもあれば、驚くほどの裏打ちの無さがあることもある。 また、自然言語の意味は、その文脈(コンテキスト)によって定まる部分も多い。これに対して、プログラミング言語は、コンピュータによって扱いやすいように、文脈によって意味が変わることができるだけないように設計されているが、その文脈によって定まる部分がある場合も無くはない。たいていの言語にいくつかはある。 自然言語は、誤用や流行などにより長い時間をかけ、たくさんの人間の利用により、意図せざる形で変化していく。しかし、プログラミング言語の規則は、言語設計者の意図と作業によってのみ、変更される。実際には言語設計者が「たくさんの人間」である場合もあり(仕様が簡単な言語であれば多くの実装者がいることも多く、そういう場合は個々の実装ごとのその仕様があるとも言える)、長い時間をかけ、自然言語と全く同様にたくさんの人間の利用により変化してきたプログラミング言語もある(Lispなど)。また、プログラミング言語にも同様に流行があり、もともとの言語仕様では規定が無かったような一種の「誤用」に、後から仕様が定められる、といったことも必ずしも珍しくはない。 人間がふだん使っている日本語などの自然言語を使ってコンピュータに指示することができるのが理想ではある、と空想する者もいる。しかし、自然言語はあまりにも複雑で曖昧で変則的なので、それを機械語にコンパイルできるようなプログラムを作成することはとても難しい(コンパイルできるできないの問題ではなく、そもそもその意味が「複雑で曖昧で変則的」であること自体が問題なのだが、それを理解できない者が冒頭のように空想するのである)。そのような研究も進められているが、未だに汎用で実用になるプログラムは作成されたことがない。 そこで、自然言語よりも制限が強く、単純で厳密で規則的な人工言語を作って代用する。これがプログラミング言語である。プログラミング言語は自然言語よりもいくらか人間には扱いづらいが、機械語よりは遥かに親しみやすく、人間の指示の手間を軽減している。ちなみにコンピュータ向けの形式性と人間向けの柔軟性を兼ね備えるロジバンなど、本来の開発目的が違えど潜在的に一つのプログラミング言語として機能しうるものもある。 大部分のプログラミング言語は、基本的には概ね文脈自由文法に沿っているが、プログラミング言語における文法的な制限は必ずしも全て文脈自由文法で表現できるとは限らず、文脈自由文法より制限されていることもあれば文脈自由文法より拡張されていることもあり、多くの場合は文脈自由文法には完全には沿っていない。 なおプログラミングへの応用も想定して設計されたロジバンのように、人間の言語とプログラミング言語の中間に位置するものがある。
※この「プログラミング言語と自然言語」の解説は、「プログラミング言語」の解説の一部です。
「プログラミング言語と自然言語」を含む「プログラミング言語」の記事については、「プログラミング言語」の概要を参照ください。
- プログラミング言語と自然言語のページへのリンク