Strongly Typed VS Weakly Typed
弊社製品は、プログラミング言語を含んだ開発ツールですので、まず弊社のプログラム言語を学んでもらわなければなりません。
そこで、よく問題になるのが、表題の件です。
これは、ある意味宗教論争に近いものがあって、なかなか妥協点が見つかりません。
昨今一般的な言語といえば、Java、.NETの各言語となりますが、これらは、Strong Typingの言語です。
一方、InterSystemsが提供する言語は、Weak Typing(というよりは、タイプレスに近い)の言語です。
Javaあるいは.NETに馴れ親しんだ人からコンパイル時に型のチェックがないと、本来許されない処理が行われ、実行時にわけのわからないエラーが発生すると、非常に解析が難しいのではないかという指摘を受けます。
これは、ある意味正しい指摘ではあるのですが、実際には、それほど難しい局面に陥ることは、ありません。
いずれにしても、これは、長い論争の歴史があるようですので、少し調べてみた所、なかなか勉強になりました。
私は、Strong Typingの定義は、変数の定義時に型の宣言が必須で、違う型との間でのデータ交換には、明示的な指示(キャスト)が必要で、それらは、コンパイル時に静的にチェックされるものであると漫然と理解していましたが、厳密にいうとどうも違うようです。
Wikiの説明によれば、
世の中で漫然と語られているStrong Typingは、さらに、typeのチェックの厳密性、typeをチェックするタイミング、typeの安全性の3つの観点でとらえることができるとのことで、なるほどと納得しました。
そこで、先ほどのよく受ける指摘について再考してみると、それは、typeをチェックする時期のこと(静的チェック)を言っているようで、実は、真の問題点は、typeの安全性のことを言っているのではないかと思ったりします。
というのは、こういう指摘をする人は、実は昔、自由度の高いC言語(つまりtype safeではない)などで、プログラムを作って、ポインタの使い方を間違えてメモリ破壊を起こし、実行時にわけのわからないエラーを起こして苦労した経験が染み付いているのではないかと思うのです。
InterSystemsのCacheObjectScriptという言語は、確かに型チェックはゆるゆるですが、型の安全性は、守られているので、実行時にたとえエラーが発生しても大抵のことは、予測の範囲で対処可能です。
私は、この言語に長いこと馴れ親しんでいるので、Javaなどのコンパイル時に細かいことで文句言われる言語は、正直少し苦手です。
そして、多次元データエンジンという非常にユニークな仕組みは、Strongly Typedに固執することからは決して発想され得なかったものと思っていますので、宗旨替えは非常に難しく思います。
ただ、大規模開発(人海戦術開発ともいう)の場合には、Strongly Typedは、必須と考えている人が多いように感じます。
そういう場合には、均質な開発者を揃えるのが困難なので、性善説ではなく、性悪説を取らざるを得ないという意見にある程度納得をしながら、本当にそうかなと疑問をひそかに持っていたりします。