Dartの躍進
今年のDartの躍進には目覚ましいものがあります。
GitHubにおける2019最も急成長した言語
DartがGitHubのThe State of the Octoverse2019年版において最も成長が早い言語になりました。365日間のコントリビュータ数で一年前の同じ時期に比べて532%とは大躍進です。
Stack Overflowにおける躍進
Stack Overflowにおける2019年11月の質問数も、Swiftの4393、TypeScriptの3345、Kotlinの1670に対して、Dartの1246ではありますが、これまでを考えれば大躍進です。
RedMonk December 2019における躍進 (予定)
The RedMonk Programming Language Rankingsの横軸はGitHubのプロジェクト数、縦軸はStack Overflowの質問数なので、2019年12月版における躍進は約束されています。
Google Trendsにおける躍進
Google Trendsにおいても2018年初頭から3倍強、2019年に入ってからも約2倍に成長しています、すばらしい。
Dartの低迷
にもかかわらず、これは一体何でしょう。
Advent Calendar 2019でのDartのありさま
今年のQiita Advent CalendarにおけるDart唯一のCalendar、本投稿が大取りにして14番目とは寂しい限りです。去年はDart その1が全マス埋まり、Dart その2が5マス埋まっていたのに比べると、半減です。DartネタがFlutter Calenderに吸収されたという側面があるにせよ、残念な結果です。
Google Trendsにおける言語比較のありさま
先程Google TrendsでDartが躍進とは言いましたが、他の言語と比較したら寂しいものです。ほとんど地を這っていてよくわかりません。Kotlinの躍進は2017/5/18に発表されたAndroid公式言語採用がきっかけでしたが、DartはFlutter発表後もぱっとしません。
Dartの躍進 (斜め比較)
悔しいので(?)、斜めに比較してみます。
Google Trendsにおける斜め比較 (Flutter vs. Kotlin)
すばらしい、Flutter(Dart)がKotlinを超えているじゃないですか。
モバイルSDKとプログラミング言語の比較はねじれています。しかし、先述の通りKotlinの人気はAdroid SDKの文脈によるものが支配的ですので、二つのモバイルSDKの人気を最も良く表すキーワドの比較は妥当なはずです。よく見るとDartもFlutterの躍進と連動して成長していますので、受動的なDartの人気をFlutterが代弁してるとも言えます。
モバイルSDKの比較 (脱線)
ここで参考に、Androidアプリ開発に使えるモバイルSDK(+SwiftUI)を比較してみます。先述のKotlinの躍進に対してAndroid SDKはグダグダです。やはりFlutterの勢いがありますね。この開発言語がDartなんです。
Dartが注目されない理由
Dart使われているのに注目されない理由を考えてみます。
Don’t surprise the programmer
- Make common programming tasks easy
- Don’t surprise the programmer
- Be the stable, pragmatic solution for real apps
今では公式サイトで見つけることができませんが、Dartの設計原則の一つに「プログラマを驚かせない」というものがあります。Dartは当初からぱっとしないとか、つまらないとか、色々と言われていましたが、これは意図的なものです。プログラマとは主にC言語系のJavaとJavaScript利用者のことでしょう。
Javaに似ている
先述の通り、プログラマを驚かせないためにJavaに似せています。
今でこそ過去の負債になりつつあるJavaですが、当初Android SDKでJavaが選択された理由は、当時最も開発者が多い言語だったことにあると考えています。開発者に興味があった一つの証拠に、言語を拝借し、JVMを採用ませんでした。
前置型修飾
Kotlin、Swift、TypeScript等モダン言語の多くで型修飾は後置ですが、これに反してDartは前置です。前置型修飾は宣言で識別子が文頭に揃わなかったり、関数型の定義が難解だったり、あまり良いことはないのですが、数少ない利点の一つはCやJavaに似ていることです。
文末必須セミコロン
Kotlin、Swift、TypeScript等モダン言語の多くでは文末のセミコロンは省略できますが、これに反してDartでは必須です。これもCやJavaの系統を引き継いでいます。Dartで文末セミコロンを省略可能にするエンハンスは技術的に容易ですが、仕様書案まで作っておいて氷漬けしているのはサポートしないことを宣言する意図でしょう。
なお、文末セミコロン省略をしないもう一つの理由は将来の言語拡張のために文法の柔軟性を残すためだと思います。セミコロン省略ではありませんが同じくホワイトスペース関連で、Null安全の導入では文法に苦労していますので。
その他
- if文やwhile文、中括弧によるブロック等C譲りの制御構文
- クラスベース単一継承のオブジェクト指向
- 強い静的型付け
- プリミティブ(Dartには無い)以外は全て参照型
- GCによる自動メモリ管理
- ジェネリクス
- 等々
わざわざ学ばなくてもいい
Flutter vs. React NativeでDartは欠点?
Flutter vs. React Native系の記事の多で、Flutterの欠点としてDartを覚えなければいけない点を挙げていますが、違和感を感じます。先述の通りJavaを知っている人を驚かせないことを設計原則にしているので、少なくともJavaを知っている人は改めて敢えてDartを覚える必要は無いと言えるからです。実際、Flutterを覚える過程でDartを使い始め、わからないところを調べる、という学習スタイルが多いかと思います。
わざわざ学ばなくてもいいプログラミング言語
わざわざ学ばなくてもよいプログラミング言語 2018でDartがNo. 1だったのは正に正解です。そうです、わざわざ学ばなくてもよいのです。
わざわざ学ばなくてもよいプログラミング言語 2019で最も成長した言語No. 1とかいう掌返し、気持ち悪いので止めてくださいね。
結論: 注目されないのは本望だ! by Dart
つまりは、そういうことです。
Kotlin+Android SDKを凌ぐ勢いのFlutterで全面的に採用されながらも、他のメジャーなモダン言語の十分の一から数分の一しか注目されておらず、疑問はStack Overflowで解決しながら淡々と利用されている、そういう言語であり、それを目指しているのです。