プログラミング言語の性能についての考え
自分の考えをまとめたものです。
前提としてプログラミング言語間の性能ベンチマークは好きではありません。 この記事で書いてある自分の考えに基づくとあまり意味のないものだからです。
本題
プログラミング言語の性能については得られる性能とそのために必要なコストの曲線(コスパ曲線)を意識することが最も重要だと考えています。 (無限のコストを投入すればどの言語においても同じ性能に到達すると仮定しています)
コスパ曲線については以下のことを考えています。
ビジネスの場合は投入できるコストを一定としたときに最大の利益を得られるプログラミング言語を選ぶのがよい
コスパ曲線は人のスキルに依存する
- 学習なり採用なりで人にスキルに対してコストを払うことでコスパ曲線が変化する
コスパ曲線は対象の領域に依存する
例えば Rust がある程度かける人なのであればコンパイラの性能やランタイムにより低いコストで十分な性能を得られるなどです。
僕の場合だと Go では言語自体の習熟と testing.B, pprof, PGO のおかげで低いコストで十分な性能を得られています。 特に pprof のおかげでかかるコストが低くなっていることを感じています。 なので個人的に性能という観点では性能改善のサイクルが回しやすいこと(プロファイリングしやすいこと、ベンチマークが書きやすいこと)を重要視しています。
プログラミング言語の性能について話すときは自分はどの前提をおいているかを意識すると不毛な議論を避けることができるはずです。
そもそも性能以外にも考慮するべきことは多くあってそれだけでプログラミング言語を選ぶことはあまりありません。 ただビジネスの利益構造として性能が非常に重要なケースや規模、将来のことを考慮してより利益がでるものに乗り換えるケースは現実的にあると思います。 性能の話題がでたときこの記事で書いたことを考慮しても良いのではないでしょうか。