この記事は、早稲田大学 Advent Calendar 2016の一部として作成されました。
ここでいう「言語」とは,コンピューター言語のことです. 決してエスペラント語を喋り始めるわけではないので安心してください.
みなさんが最初に習得したプログラミング言語は何ですか? ちなみに私はC言語ですが,まあ人それぞれ「第一言語」は違うでしょう.
ところで,プログラミング言語って,この世界に一体何種類ほど存在するのでしょうか? Wikipediaには,プログラミング言語一覧というページがあります.ここを見てみると,数え切れないほどたくさんの言語が列挙されていますね.
きっとこれらの言語をすべて使ったことのある方はいらっしゃらないでしょう.いたとしたら,その方はかなりの言語マニアか,それともよっぽど暇があったに違いありません…
ではなぜ,こんなにもたくさんのプログラミング言語が生まれたのでしょうか?
まず最初に知らなければいけないことは,プログラミング言語は人間が作ったものだ,ということです.
ほとんどのみなさんは,「プログラミング言語」というものを,すでにそこにあるもの・自分ではとうてい作ることのできない,巨大な構造物であると考えているでしょう.しかし,どんなプログラミング言語であっても,それを設計した人々や,実際に処理系(コンパイラやインタプリタなど)を開発した人々が裏にいるのです.
ではなぜ,人々は言語を作ろうとするのか.それは,自分ができるかぎり楽をするためという面が大きいでしょう.
(もちろん「面白いから」という理由で言語をつくる人々もいます.たとえその開発動機がどんなものであっても,それがコンピューターに解釈され,なんらかの結果を生み出すならば,それは言語といえるはずです.)
コンピューターの世界は,楽をしたいという人間の思いで成長してきました.
たとえばアセンブリ言語は,機械語という数値を羅列するのがめんどうでわかりにくいからできたものと考えられます. そしてアセンブリ言語も,限られたレジスタをやりくりしたり,メモリ上のコード配置の状況を気にしなければいけないという点が面倒になってきて,FORTRANやC言語,LISPなどの「高水準言語」が,だんだん人気を博してきました. その後は,様々なプログラミングスタイルに沿ったプログラミング言語が開発され,論理プログラミング言語のPrologや,オブジェクト指向言語のSmalltalk,配列をかんたんに扱えるAPL(その後継としてのJ言語)などが生まれてきました.
ここで重要なのは,「みんなにとってうれしいプログラミング言語」を開発することは,非常に困難であるという点です.
あなたは,どんな機能をプログラミング言語に求めますか?
ある人は,「変数宣言は面倒だからしたくない」といい,ある人は「変数に型があるのは煩わしいのでなくしてほしい」といいます.でも,全くその逆のことを願う人だっているわけです.こういった主義主張は,たびたび戦争を引き起こします.まあ,普通の戦争と違って,もう少し穏やかなものですが.
どうですか?みなさんは今,自分がよく使っているプログラミング言語に不満はありませんか?セミコロン忘れたくらいで文句言うなよ,とか思ったことはありませんか?括弧が多すぎて対応関係がわからないとか悩んでいませんか?なんでこんなかんたんな処理にたくさん書かなきゃいけないんだ,とか思いませんか? いいんですよ,そう思うことは自然なんです.みんな欲しいものは違うのですから.不満はあって当然です.
不満がない方がいらっしゃるとしたら,それは羨ましいことです.よかったですね,自分と合う言語に出会えて.
でも,もし不満があるなら,いったいどうすればいいのでしょうか.
普通の「何かを作る」という作業には,たいてい材料が必要です.料理には食材が必要だし,建物を建てるには木材やコンクリートが必要です.
でも,ここに,ほとんど何も使わずに何かを作れる分野があります.
そう,コンピューターです.
いいですか,みなさん.今もし,コンピューター関連の分野で,「これは嫌だ」とか,「これは不便だ」と思っていることがあるならば,じっとしていてはいけません.
だって,すぐに解決できるかもしれないのですから.
…まあ,すぐに解決できない問題もたくさんありますが(笑).
そういうわけで,私は言語をつくれと言いたいわけです. 文句を言う前に,好きなように変えてしまえ,と.(もちろん文句を言いながらでも可.手を動かさないよりマシ.)
もっと書きたかったんですけどね…今日が終わらないうちに一度投稿します.ごめんなさい.
きっとそのうち追記されるでしょう.
でも,こんな軽いノリでいいんですよ,あなたがプログラミング言語を開発するのだって.