2017年現在、Rustが最強のプログラミング言語である証明を以下に示します。
ICFP プログラミングコンテスト
ICFP プログラミングコンテストの説明については以下をご覧ください。
ICFP Programming Contest は「なんでもあり」が特徴の,他とは一線を画す特徴的なプログラミングコンテストです.ACM の関数型プログラミング言語の学会 ICFP (International Conference on Functional Programming) に伴って毎年開催されていまして (1) プログラミング言語自由 (2) 計算資源自由 (2) チーム人数制限なし (3) 72 時間勝負 (4) 問題の形式も毎年大きく変化,等の特徴があります.優勝者は「その年のプログラミング言語」を決めることとなっており「その年はその言語の文句は言えない」とか.
コンテスト優勝チームが使用した言語は「優秀なハッカーに選ばれたプログラミング言語」として正式に認定されます。 さらに優勝チームには「使用したプログラミング言語を一年間無制限に自慢してよい」という名誉ある権利が与えられます。
そのためICFPプログラミングコンテストは「最強のプログラミング言語を決める大会」という側面があります [1]。
最近は以下のような風潮もあるようなのですが:
それでも「自分の好きな言語に優勝させてやる!」という熱い思いをもった参加者が今年も大勢参加しました。
2017年、今年のコンテストを主催したのはオックスフォード大学です。
Rustで参加
私は昨年に引き続きRustで参加しました。8月4日から8月7日にかけての72時間です。
今年の問題
今年の問題を簡単にいうと「鉱山(λ)に道をつなげてより多くの都市(λから遠ければ遠いほど高得点)に到達しましょう。」という問題でした。 実際のルールはもっと複雑です。興味がある方は、実際の問題仕様を見てください。
「百聞は一見にしかず」、以下の実際に行われた戦いの様子をご覧ください。私はチーム hayatox です。
(Link, その他の大きなマップでの戦い: Map: junction, Map: nara)
結果
参加者から提出されたプログラムをもとにした、コンテストの1stラウンドの結果が今週発表されました。 それによると参加チームは146チーム。そのうち26チームは提出したプログラムが仕様を満たしていないことが判明し参加不可能。残りの120チームの間で戦いが行われました。
果たしてどの言語が今年は最強の名を手にするのでしょうか?
各チームの使用した言語は現在のところコンテストのサイトでは明らかになっていません。そのため以下の条件で各言語を代表するチームを「独断と偏見」で選びました。
- GitHubを"icfp 2017"で検索
- メインで使用した言語がほぼひとつであることをチェック(そうでなければスキップ)
- チーム名がREADME等に記載されている
- 1stラウンドの結果にチーム名が載っている
各プログラミング言語とそれを使用したチームとその人数、そしてチームの獲得ポイントです [2]。
- Rust十分強い。しかし最強という感じはまだ受けません。
- ほとんどのチームは複数人で参加していることがわかりました。ひとりで参加している「ぼっちチーム」はRust以外はCommon Lispだけです。さすがLisp。孤高の存在。
- 特にC++を用いたチームGennAIは8人中7(?)人がGoogleのソフトウェアエンジニアです。
- さらに特筆すべきはC#を用いたチームkontur.ru。なんと16人チーム!もはや数の暴力です。
正規化
数の暴力にはこちらも理不尽な理論で対抗するしかありません。「各チームの獲得ポイント」を「チームの人数」で割ってやりましょう [4]。 正規化した結果は以下のようになります。
以上によりRustが最強であることが示されました [5]。証明終わり。
おまけ
そういえばコンテストの翌日にオフィスで会った時そんなこといった気がします。:)
- コンパイラのちからを信じましょう。Compile-Driven-Development。
- 実際、私は大したことはしておらず、すべてはRustという素晴らしい言語を作成したコアチームと、create.io という素晴らしいパッケージ・エコシステムのおかげです。コンテスト中にはじめて使用したライブラリがいくつかありますが、苦労することなく使用することができました。私は巨人の肩に乗っかっただけです。
来年に向けて
- 「私の愛するJavaScriptがRustごときに負けるはずがない。」
- 「はっはっはっ。自称最強Ruby使いであるこの私が出場していない大会で良い成績をとることに何の意味があるというのか?かわいいやつらめ。」
- 「その証明には誤りがあります。なぜなら....」
もっともなご意見でございます。しかしながら、参加しない人に反論する権利はまったく与えられないのがこのICFPプログラミングコンテストです。
唯一の正しい反論の方法は「机上の空論を展開」することではなく、実際に「愛するXXX言語を勝たせてやる」ことです。 ぜひ来年のICFPプログラミングコンテスト2018に参加してみてください。
興味をもった方は雰囲気をつかむため過去の問題に挑戦してみるとよいかもしれません。 特に2006年カーネギーメロン大学が主催した「古代文明が作ったコンピュータの仕様とその上で動くプログラムを記した古文書」を巡るコンテストは「神回」として伝説になっています [6]。 ぜひ挑戦してみてくださいね。
footnotes:
- [1]: ICFP学会としては、コンテストを通じて「関数型プログラミングの優位性」を示したいという思いがあったはずなのですが、コンテストでは必ずしもHaskellのような「いわゆる関数型プログラミング言語」が優勝するとは限りません。主催者かわいそう。
- [2]: 1st Roundの結果のみを使用しています。最終結果はICFP(学会の方)当日、現地オックスフォードで発表されます。最終結果が発表される前のタイミングでないとこのような記事は書けません。:)
- [3]: 各チームの人数は、レポジトリのREADMEにメンバーが記載されている場合はそこから、記載されていない場合は実際にレポジトリに貢献した人数で判断しています。
- [4]: 参考にした理論: ウォーズマン理論
- [5]: Common Lispが2位ですが、Lispは神が作った神言語なので妥当な結果といえるでしょう。
- [6]: 2006年のICFPコンテストはその内容があまりに濃かったため、参加者の間で「これ、もう主催者側が優勝でいいんじゃね?」と言われていたそうです。