外部記憶

他人に取って価値がないが、自分が忘れることに忍びないため残したい記憶・記録を記す外部記憶装置

揺れる古樹とその木を植えた人。また増える力強い若木

Python, Ruby, Scalaがそれぞれ揺れている。 これらは10年ほど前の時代、PHPでとりあえずWebサーバを作ったけれどもいろいろ問題が多いのでなんとかしたいとなったときの第一候補だった。 それぞれの成立年代や大きく盛り上がった時代はずれているかも知れないが、僕にとってはだいたい同世代の言語のイメージがある。 これらの言語が今揺れている。

Python

Pythonは3つの中では最も成功している。 最近流行りのAI・機械学習分野での第一言語であるだけではなく、英語圏では大学機関で使う言語としても採用されることが多いようだ(ソース忘れた)。 ほとんどのLinuxではPythonがデフォルトでバンドルされることからもその地位の硬さが伺える。

Pythonの生みの親・Guido van Rossum氏、Pythonの仕様策定から離れる | スラド デベロッパー 一方で、言語の生みの親が開発サイクルから離れるということもあった。 またPythonは開発環境の構築方法が定まっていなかったり、言語の進化が遅いと批判されていたりもする。 広く使われているがゆえに2.xから3.xのジャンプに様々な痛みを伴うことも問題になった。 実際に使ってみるとwebサーバアプリケーションやテストフレームワークの弱さなど驚く点もある。

しかし、それでもなおPythonの地位は安泰だ。 もはやAlt-Perl, Alt-PHPたる手軽なスクリプト言語の第一席は固めたも同然に見える。

Ruby

RubyRuby on Railsで爆発的に普及した。 Webフレームワークの進化はRoRが大きな貢献を果たしている。 またテスト文化や環境構築など先進的なアイデアをいくつも発明して他の言語の指標になるような言語だ。 生みの親が日本人であることもあって日本でのコミュニティが大きいことも日本人にとっては大きなメリットだった。 数年前まではPythonと第一スクリプト言語の覇を争っていた言語だった。

特に外国勢との温度差を感じるようになったのはいつ頃からだろうか。 AWS Labmdaのようなサービスでnodejsやpythonは真っ先にサポートされるがRubyは一向にサポートされないということがだんだん増えてきた。 また生みの親のmatz氏の動きもよくわからず、mrubyを作っていると聞いたがその間Rubyの変化は止まっているようにも感じた。 またChef, VagrantのようなRuby発のプロダクトの衰退や同じ開発元がgolangのような別言語に乗り換える事例が増えてきた。 そしてRoR以降Rubyキラーアプリケーションを持つことができていない。これはAI・機械学習で強力なライブラリを持つPythonとは逆の状態である。 ただ、分野の流行り廃りが一過性であるのに対してPythonは教育など基礎レベルで知っている人間が増えている。Rubyはそういった動きはほとんどない。

今、Rubyの存在意義は確実にPythonに奪われている。 また静的型付け言語へ回帰する流れからもRubyは忌避されやすい。 Rubyの未来は不透明だ。

Scala

Scalaは個人的にはあらゆる言語に手を出す、手を出すことができるプログラムオタクが最後にたどり着く地点の一つである。 強力かつ素晴らしい静的型付け言語であるJavaを下地にして、関数型のエッセンスをミックスしつつOOとしてもJavaよりよい記述性を実現している。 Java本体の停滞もあって、Alt-Java、静的型付け言語の最右翼は数年前まではScalaだった。 Scalaの明るい未来は約束されたように感じた。

しかし、その地位は急速に怪しくなっている。 一つは後発言語で、Kotlinやgolangといった言語がScalaの重要な要素であるAlt-Java, 静的型付け言語の点で襲おうとしている。また巨人たるJava言語もその動きを再び活発化させ、言語の進化スピードが上がり始めた。 一方でScala言語はコンパイルが遅い、言語仕様がわかりづらい、書き方に幅があるため上級者の書いた言語が初心者にはまったく読めないなど多くの内患も抱えている。 最近特に懸念されるのは次のメジャーリリースとなるScala3で、生みの親のOdersky氏が作っているプロトタイプDottyからスムーズにScala3へ行けるのか。互換性の問題は?そもそもScalaも半年ごとのリリースサイクルなどにしないのか、など懸案事項は多い。 そしてScalaにはキラーアプリケーションがないという致命的な弱点がある。 依然であればplay frameworkがその一つとして上げられることもあったが今日ウェブフレームワークはどの言語でも存在するようになった。 akkaもキラーアプリケーションの一つとして目されることもあるが、正直なところこいつでないと駄目なケースというのを明確に説明した文章を見たことがない。

Scalaの、特にエンタープライズ分野での活用は急速に絞られつつある印象だ。 言語の複雑性から初心者には忌避され、言語オタクですら言語の基本を習得してからの型クラス、covariant, invariantなど多くのハードルがある。ScalaHaskellFortranのような、特定分野では有用だが汎用目的ではない言語とみなされつつある。

若木

上のどの言語の趨勢も、新しい言語とは無関係ではない。 Ruby, Python, Scalaののち、次のような言語があとを襲った。

明らかな特徴として一つ言えるのは、静的型付け言語が流行っていることだ。 コンパイル時間やコンパイルという過程そのものの複雑さなどが忌避されて動的型付け言語が一時流行したものの、テストの重要性とそのテストを一部肩代わりしてくれるという特性から静的型付け言語への揺り戻しが起こっているように見える。 またコンパイルを前提とするスマートフォンアプリの重要性が急速に増大したことも関係しているだろう。

また、企業後援の言語も増えた。FaceBookが開発したHackは普及しなかったものの、C#は特にUnityと組んでゲーム分野では第一言語となっているし、TypeScriptはAlt-JSの地位を今日完全に固めたと言っていいだろう。 Golang, DartGoogleの後援の元、多数のリソースが割かれている。 この点ではRuby, Python, Scalaは厳しい。言語の成長に注げるリソースが基本的にボランティアや大学機関の有志などに限られるからだ。 正直言語仕様が微妙に感じるC#Golang, Dartなどにそれでも採用事例が減らないのはそういった言語仕様自体よりもその環境や開発体制、将来のサポート、未来の安定性などを重要視しているからかもしれない。

結論

この記事に特に結論などない。