メッセージ。 - 静的型付けか動的型付けか
# 静的型付けか動的型付けか
自分は、プログラミング言語の中ではSchemeが好きです。で、Schemeというのは動的型付けの言語なわけですけど。
でも、Schemeというのは、決して型をおろそかにするような言語ではありません。むしろぼくの場合は、Schemeでプログラムを組むようになってからのほうが、C言語でプログラムを組んでいたときより型を意識するようになりました。
型というのは、うまく使うことでプログラムを組む助けになるものです。プログラムというのは、同じような処理をまとめてブロックにしていくことが重要ですが、そのための助けとして型の役割は大きいからです。(どんな言語を使っていたとしても型の役割は大きいといえます)
Schemeは、関数型の言語ということもあって、関数(処理のまとまりのブロック)の、入力と出力がなんであるかが、非常に重要視します。「なんであるか」を表現する指標が、型なわけです。一方でC言語などは、同じように処理をまとめるブロックである「関数」という概念が、関数型言語よりもずっと自由です。
たとえばC言語の関数は、返り値としてintを返すと宣言している場合でも、必ずしもintを返さなければいけないわけではありません(大域ジャンプが可能なので、「その関数を終了しない」ということさえ許されています)。また、C言語ではポインタに値をセットすることで実質的になんらかのメッセージを、プログラムの別の個所などに伝えることが標準的に行われています。
しかし、メッセージを伝えるならば、そのメッセージが何を表現するものなのか、致命的なエラーが発生したときは何を伝えるべきなのか、そういったプロトコルのようなもの(つまり型)を、ブロック間で明確に定義したほうが良いです。そしてC言語には、そういったプロトコルのようなものを定義するよい方法がありません(マクロや構造体を使えばそれは可能ですが、すぐ使える状態ではなく、非常にプリミティブな部品だけがある状態です)。
動的型付けの言語であっても、(静的型付けの言語と同じぐらい)型を重視するプログラムはあります。逆に、C言語のように、いちいち型を明示しなければいけない言語でも、型変換を暗黙に行ってしまうような言語は、型というものを使いこなすのが困難になります(実際には、現代のC言語のコンパイラは暗黙の型変換をあまり行いませんが、出自としてのC言語は、つまりC言語は本質的には、そのあたりがかなり大らかです)。
だからどうとか、なにかが悪でなにかが善というわけではありませんが、なんとなく思ったことを書いてみました。いまどきC言語を引き合いにだすのはダメダメかもしれませんが、ぼくがC言語しか分からないダメダメ人間なのでご容赦ください。
でも、Schemeというのは、決して型をおろそかにするような言語ではありません。むしろぼくの場合は、Schemeでプログラムを組むようになってからのほうが、C言語でプログラムを組んでいたときより型を意識するようになりました。
型というのは、うまく使うことでプログラムを組む助けになるものです。プログラムというのは、同じような処理をまとめてブロックにしていくことが重要ですが、そのための助けとして型の役割は大きいからです。(どんな言語を使っていたとしても型の役割は大きいといえます)
Schemeは、関数型の言語ということもあって、関数(処理のまとまりのブロック)の、入力と出力がなんであるかが、非常に重要視します。「なんであるか」を表現する指標が、型なわけです。一方でC言語などは、同じように処理をまとめるブロックである「関数」という概念が、関数型言語よりもずっと自由です。
たとえばC言語の関数は、返り値としてintを返すと宣言している場合でも、必ずしもintを返さなければいけないわけではありません(大域ジャンプが可能なので、「その関数を終了しない」ということさえ許されています)。また、C言語ではポインタに値をセットすることで実質的になんらかのメッセージを、プログラムの別の個所などに伝えることが標準的に行われています。
しかし、メッセージを伝えるならば、そのメッセージが何を表現するものなのか、致命的なエラーが発生したときは何を伝えるべきなのか、そういったプロトコルのようなもの(つまり型)を、ブロック間で明確に定義したほうが良いです。そしてC言語には、そういったプロトコルのようなものを定義するよい方法がありません(マクロや構造体を使えばそれは可能ですが、すぐ使える状態ではなく、非常にプリミティブな部品だけがある状態です)。
動的型付けの言語であっても、(静的型付けの言語と同じぐらい)型を重視するプログラムはあります。逆に、C言語のように、いちいち型を明示しなければいけない言語でも、型変換を暗黙に行ってしまうような言語は、型というものを使いこなすのが困難になります(実際には、現代のC言語のコンパイラは暗黙の型変換をあまり行いませんが、出自としてのC言語は、つまりC言語は本質的には、そのあたりがかなり大らかです)。
だからどうとか、なにかが悪でなにかが善というわけではありませんが、なんとなく思ったことを書いてみました。いまどきC言語を引き合いにだすのはダメダメかもしれませんが、ぼくがC言語しか分からないダメダメ人間なのでご容赦ください。
Comment
Trackback