JavaはLLなんだよ。
ΩΩ Ω<な、なんだってー!
まぁそう言わず聞いてくれよ。そもそもLLは何かって話なんだけどさ。
Lightweight Languageとは - みねこあ
- Lightweight Language は「脳力」をより少なく消費する言語である
- 「脳力」はプログラミング活動中に消費される仮想的なパワーである
- 消費「脳力」の総和が少ないことももちろん重要だが、瞬間最大「脳力」が大きすぎるのもよろしくない
ということらしいんだわ。ようするに楽にプログラミングできるんならLLなんだよ。
まぁまて。Javaみたいな静的な強い型付け言語は型を考えるのが面倒なんじゃー!って言いたいんだろ。ちょっと落ち着いて考えてみてくれ。
データ構造
プログラムってのはアルゴリズムとデータ構造というぐらいのことはあって、データってのは重要なわけよ。まぁアルゴリズムと比べるとどうも地味でデータ構造ってのは軽視されがちだけどよ。データ構造がちゃんと設計できているとアルゴリズムも自然なかたちになるのよ。逆にミスマッチだと変なアルゴリズムをたくさん書かにゃいかんくなって大変なんだわ。
んで、データ構造というとOOPとかの話になるわけよ。ま、OOPと一口に行ってもバリエーションが多いんだけども、ここではJavaとかのOOPを前提に話をするよ。いいな?
データってのは「どういう内容か」ってのが常に付きまとうんだ。当たり前だけど。型付けの弱い言語ってのはどのデータがなんだったかってのを自分で管理しないといけないわけ。しっかり管理しとかないと、あれこのデータってどういう構造になってんだったっけ?どういう操作できるんだっけ?とかいうことになるわけ。
アサーションを言語がやってくれる
最悪なのは、データのコンタミ。まぁようするに場違いなところに場違いなデータが紛れ込むようなバグだわな。これがデバッグがやっかいなのよ。変なデータがあることは分かる。そこでエラーで落ちるんだから。でも、それがどこからやってきたのか、紛れ込ませた奴は誰なのかってのが分からないわけよ。
んで検問はるの。データの流通路にアサーションを沢山しかけてさ。網にかかるのをまったりするわけ。もう大変よ。ま、そこで静的型付けが強いんだけどさ。型ってものでデータの属性を管理するわけ。だから互換性がないデータが紛れ込む心配なんて一切なし。アサーションでやってたことを言語が勝手にやってくれるわけ。面倒なことを機械がやってくれるの。これ、産業革命ね。
結局よ、このデータってどういうもんだっけ?ってのを手抜きすると後で面倒なことになるんだわ。一見して面倒なようで最初に型ってもんを考えた方がトータル楽なわけよ。脳力を使わなくて済むわけ。
機械化の恩恵
静的型付けの便利なところはよ、機械がサポートしてくれるってことなんだ。さっきのアサーションのはなしもそうだよ。俺もエディタ使えとかよく言うわけなんだけどよ、機械が処理しやすいように人間がちょっと歩み寄るだけで機械処理の恩恵を物凄く受けられるわけ。機械に歩み寄ったりしねぇぜ!人間様に言語が歩み寄れよ!って言ってる奴らは機械の恩恵を受けれてないよ。もったいないと思うね、ほんとに。
リファクタリングとかそうだけどよ、構文解析を伴う高度なツールってのは今ん所、静的型付け言語のほうが相当に進んでるんだよ。もうすっごい便利。そういうツールを使わないなんてのは、このご時世にショベルカーなしで土木工事しようってなもんだよ。
JavaだとXXを書くのに何行もかかるけどこの言語なら1行で書ける!みたいに言うのは勝手だけどよ、そりゃライブラリが高級ってだけだろうよ。そのへんから高級なライブラリもってくればJavaでも1行で済むんだよ。
ΩΩ Ω<でもJavaがLLってのはないわー。