はじめに
Qiita読者のみなさま、プログラミング言語の分類に「アポステリオリ言語」と「アプリオリ言語」というのがあることはご存じでしたでしょうか?既にご存じの方にはより詳しく、これまで知らなかった方にはわかりやすく、これらのカテゴリについてご説明いたします。
「アポステリオリ言語」と「アプリオリ言語」
「アポステリオリ言語」と「アプリオリ言語」はプログラミング言語などの人工言語のカテゴライズに使われる分類用語です。その由来は「アポステリオリ」と「アプリオリ」の哲学用語です。
前者は既存の自然言語をベースにして設計された言語を、後者は既存の自然言語に依存せず完全に独自の構造や語彙を持つ言語を意味します。
哲学的な概念「アポステリオリ」と「アプリオリ」との関連性
ア・ポステリオリ (a posteriori) 「経験に基づく」という意味の哲学用語です。
人間の経験や観察、観測を通じて得られる情報など、経験を通じて真偽が判定できる知見を指します。例えば、「日本の6月7月は雨の日が多い」という一般常識は、観察を通じて得られるため、ア・ポステリオリな知識です。
プログラミングにおいて例えば、ある地域のお天気データベースの晴れの値を持つ日次レコードが100を超えた場合などの判定は、ア・ポステリオリと言えます。
ア・プリオリ (a priori) 「経験に先立つ」という意味の哲学用語です。
経験に依存せずに理性や論理によって得られる知見を指します。例えば、「三角形の内角和は180度である」(水平を180度、円の一周を360度とした場合)という数学的命題は、経験に依存せずに前提から論理的に導き出せるためア・プリオリな知識です。
プログラミングにおいて例えば、bool値のtrueとfalseはそれぞれおたがいを比較したら常に等しくないという真偽判定もア・プリオリです。
以下、「ア」の後の中点のぞいて「アポステリオリ」「アプリオリ」と表記します。
「アポステリオリ言語」
アポステリオリ (a posteriori) がプログラミング言語のような人工言語のカテゴライズにも使われた場合、アポステリオリ言語とは既存の自然言語の語彙や構文を少なからずベースにして設計された言語を指します。この観点からすると、少しでも自然言語の語彙が使われていると、記号表現がどれだけ多く採用されていてもこっちと判定されるようです。
「アプリオリ言語」
アプリオリ (a priori) が人工言語のカテゴライズに使われた場合、アポステリオリ言語とは逆に既存の自然言語に依存せず、完全に独自の構造や語彙を持つ言語を指します。コンピュータ言語としてマシン語は確実にこちらですが、アセンブリ言語は微妙でレジスタ操作ニーモニックはかなり英語由来なので、こっちとは判定されにくいようです。
主要言語分類表
人工語分類 | 水準分類 | 言語名 | 備考(由来言語) |
---|---|---|---|
アプリオリ言語 | 低水準 高水準 高水準 高水準 |
機械語 Whitespace Brainfuck Mystical |
0,1 空白,タブ,改行 8つの記号 魔法陣図形 |
アポステリオリ言語 | 低水準 高水準 高水準 高水準 高水準 高水準 高水準 高水準 高水準 |
アセンブリ言語 C/C++ C# Java Go COBOL Python Mind なでしこ |
英語 英語 英語 英語 英語 英語 英語 日本語 日本語 |
おわりに
いかがでしたでしょうか?なにかの役に立てれば幸いです。文系エンジニアの方になじみやすい単語かもしれませんね(哲学とかを受講されているような場合)。この分類は、プログラミング言語の設計思想や言語の成り立ちを考える上で興味深い視点を提供します。