勝者は、昔ながらの動的言語のようです。
Lispは明らかな反例であり、非常に冗長な単純な古い動的言語です。一方、APL / J / Kはおそらく他のどの言語よりもはるかに簡潔であり、動的です。またMathematica...
HaskellとCommonLispは、主張されているJavaよりも簡潔に見えません。
データは、パフォーマンスが最適化された小さなプログラム用であり、測定値は、特定の設定でGZIPアルゴリズムを使用して圧縮した後のコードサイズです。したがって、それらだけから一般的な結論を引き出すことはできません。おそらく、より有効な結論は、パフォーマンスの最適化から生じる肥大化を観察しているため、データから最も簡潔な言語は、基本的に非効率的であるために最適化できない言語(Python、Ruby、Javascript、Perl、Lua、PHP)です。逆に、Haskellは、高速で冗長なプログラムを作成するのに十分な努力を払って最適化することができます。それは本当にHaskell対Pythonの欠点ですか?もう1つの同様に有効な結論は、Python、Ruby、Perl、Lua、およびPHPは、その設定でGZIPアルゴリズムを使用すると圧縮率が高くなるということです。おそらく、ランレングスエンコーディング、算術コーディング、またはLZ77 / 8を使用して、おそらくBWTの前処理、または別のアルゴリズムを使用して実験を繰り返すと、まったく異なる結果が得られますか?
また、そのサイトのコードには、価値のない大量のくだらないものがあります。OCamlのインストールが2世代古い場合にのみ必要なOCamlコードのこのスニペットを見てください。
(* This module is a workaround for a bug in the Str library from the Ocaml
* distribution used in the Computer Language Benchmarks Game. It can be removed
* altogether when using OCaml 3.11 *)
module Str =
struct
include Str
let substitute_first expr repl_fun text =
try
let pos = Str.search_forward expr text 0 in
String.concat "" [Str.string_before text pos;
repl_fun text;
Str.string_after text (Str.match_end())]
with Not_found ->
text
let opt_search_forward re s pos =
try Some(Str.search_forward re s pos) with Not_found -> None
let global_substitute expr repl_fun text =
let rec replace accu start last_was_empty =
let startpos = if last_was_empty then start + 1 else start in
if startpos > String.length text then
Str.string_after text start :: accu
else
match opt_search_forward expr text startpos with
| None ->
Str.string_after text start :: accu
| Some pos ->
let end_pos = Str.match_end() in
let repl_text = repl_fun text in
replace (repl_text :: String.sub text start (pos-start) :: accu)
end_pos (end_pos = pos)
in
String.concat "" (List.rev (replace [] 0 false))
let global_replace expr repl text =
global_substitute expr (Str.replace_matched repl) text
and replace_first expr repl text =
substitute_first expr (Str.replace_matched repl) text
end
シングルコアバージョンには、並列処理のための多くのコードが含まれていることがよくあります。たとえば、OCamlのregex-dnaです。OCamlでfastaである怪物を見てください:プログラム全体が2回複製され、ワードサイズがオンになります!私はここのディスクに古いOCamlバージョンのfastaを持っていますが、それはそのサイズの5分の1未満です...
最後に、私はこのサイトにコードを提供したが、それが良すぎたために拒否されたことに注意する必要があります。政治はさておき、OCamlのバイナリツリーには「IsaacGouyによって最適化されていない」というステートメントが含まれていました(コメントは削除されましたが、最適化されていないため、OCamlコードは長くなり、遅くなります)。結果は、バイアスを導入するために特に主観的に調整されています。
基本的に、このような質の悪いデータでは、洞察に満ちた結論を引き出すことは期待できません。言語間で移植されたより重要なプログラムを見つけようとする方がはるかに良いでしょうが、それでも、結果はドメイン固有になります。シュートアウトを完全に忘れることをお勧めします...