アカウント名:
パスワード:
どうやら、コミットログから不具合修正らしきものの割合を算出して、「不具合の作り込みやすさ」を比較する手法のようです。
言語のカテゴリごとの結果(数値が小さいほうが不具合が少ない、カッコ内は標準誤差):
Category Coef. Std. Err.Functional-Static-Strong-Managed −0.25 (0.04) ∗∗∗Functional-Dynamic-Strong-Managed −0.17 (0.04) ∗∗∗Proc-Static-Strong-Managed − 0.06 (0.03) ∗Script-Dynamic-Strong-Managed 0.001 (0.03)Script-Dynamic-Weak-Managed 0.04 (0.02) ∗Proc-Static-Weak-Unmanaged 0.14 (0.02) ∗∗∗
カテゴリはそれぞれ、関数型・手続型・スクリプト言語の区別(Functional/Proc/Script)、コンパイル時の型チェック有無(Static/Dynamic)、型付けの強弱(String/Weak)、メモリ管理(Managed/Unmanaged)の意味のようです。
各カテゴリに属する言語は以下のとおりです。
Functional-Static-Strong-Managed: Haskell、ScalaFunctional-Dynamic-Strong-Managed: Clojure、ErlangProc-Static-Strong-Managed: C#、Java、GoScript-Dynamic-Strong-Managed: Python、RubyScript-Dynamic-Weak-Managed: Perl、PHP、JavaScriptProc-Static-Weak-Unmanaged:C、C++、Objective-C
「コンパイル時の型チェック」と「型付けの強弱」が分けられているのが曲者で、C/C++はコンパイルの時の型チェックはStaticだが、弱い型付け(Weak)とされています。一方、RubyやPythonはコンパイル時の型チェックはDynamicだが、強い型付け(Strong)になっています。JavaScriptやPerl、PHPはDynamicかつWeakに分類されています。
結果から言えそうなのは、(1) 関数型言語はバグが少ない、(2) C/C++/Objective-Cはバグが多い、(3) それ以外の言語はあまり変わらない。といったところでしょうか。議論されることの多い、Proc-Static-Strong(JavaやGo)とScript-Dynamic-Strong(RubyやPython)の相違については、品質の差はあまり大きくなさそうです。
さらに言語ごとの結果です(読み方は上と同じ):
C 0.15 (0.04) ∗∗∗C++ 0.23 (0.04) ∗∗∗C# 0.03 (0.05)Objective-C 0.18 (0.05) ∗∗∗Go −0.08 (0.06)Java −0.01 (0.04)CoffeeScript 0.07 (0.05)JavaScript 0.06 (0.02) ∗∗TypeScript −0.43 (0.06) ∗∗∗Ruby −0.15 (0.04) ∗Php 0.15 (0.05) ∗∗∗Python 0.10 (0.03) ∗∗Perl −0.15 (0.08)Clojure −0.29 (0.05) ∗∗∗Erlang −0.00 (0.05)Haskell −0.23 (0.06) ∗∗∗Scala −0.28 (0.05) ∗∗∗
同じカテゴリの言語でも、Perl(-0.15)とPhp(0.15)、Clojure(-0.29)とErlang(-0.00)のように、けっこうばらけていて、カテゴリ分けの妥当性に若干疑問が生じますが、総じて関数型言語が優秀なのは確かなようです。上の方のコメントでRubyがディスられていましたが、Rubyは関数型言語に次いで優秀という結果になっています。
JavaScriptに比べてTypeScriptが最強すぎなんですけど…。
言語そのものの特徴以外に、コードかいてる人間が、好き好んでその言語を選んだのか、仕方なくその言語で書いているか、でも違ってきそうな気がする。
その言語が好きなら、仕様とか設計思想とかまで知りたくなるから、そういうことを理解した上でコードを書く。結果バグが減る。
C、C++、Obj-C、Java、PHPあたりは、もうその言語で書かれ始めちゃってる、とか、その言語しかサポートされてない、って理由で仕方なく選択されている可能性が高い。なので、その言語に愛着はないけどコーディングしているって人も多いはず。そうなると、言語仕様に対する探究心も薄くなるし、言語設計者の意図に沿わないようなコーディングも多くなる。結果バグの発生率が上昇する。
なので、TypeScriptみたいにマイナーな言語の方がコードの品質が高いのは、「敢えて好き好んでその言語を使っている」って人が多いってのも影響してそう。
JSの場合、型どーとかよりも。。。src=なんちゃらの奴が運悪く取得失敗とか、コンテンツ全体で最終的に何が入ってくるのか分からない部分がなんとも。。※同一ページに埋め込む処理を複数チームが作ってて関数名ぶつかってたとか。。
別ACですがそういう配慮をプログラマーが気を付けないといけない言語ということでやはり好きになれないですねー。どんな言語にもそういった部分はあるし、駄目プログラマーはどんな言語を使っても駄目ですが、JavaScriptはその時の被害が大きすぎるので少なくとも生では使いたくないです。
むしろ、「バグを直せる人がいない」からバグったままなのではないかと。
バグの発見には言語知識が必要なかったとしても、特定と修正には必須ですし。
言語が好きすぎて言語設計者の意図に沿わないようなコーディングまでしちゃうってのもCやC++だとある気もする。
評価が高いがねなんはもっと高いのだ
ソースの複雑性とかも入れないとわかんないと思うけどなあ。hello worldならどの言語でもバグが入らないだろうし、OSレベルに複雑ならどの言語でもバグは入るだろうし。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
元論文を読んでみました。 (スコア:5, 参考になる)
どうやら、コミットログから不具合修正らしきものの割合を算出して、「不具合の作り込みやすさ」を比較する手法のようです。
言語のカテゴリごとの結果(数値が小さいほうが不具合が少ない、カッコ内は標準誤差):
Category Coef. Std. Err.
Functional-Static-Strong-Managed −0.25 (0.04) ∗∗∗
Functional-Dynamic-Strong-Managed −0.17 (0.04) ∗∗∗
Proc-Static-Strong-Managed − 0.06 (0.03) ∗
Script-Dynamic-Strong-Managed 0.001 (0.03)
Script-Dynamic-Weak-Managed 0.04 (0.02) ∗
Proc-Static-Weak-Unmanaged 0.14 (0.02) ∗∗∗
カテゴリはそれぞれ、関数型・手続型・スクリプト言語の区別(Functional/Proc/Script)、コンパイル時の型チェック有無(Static/Dynamic)、型付けの強弱(String/Weak)、メモリ管理(Managed/Unmanaged)の意味のようです。
各カテゴリに属する言語は以下のとおりです。
Functional-Static-Strong-Managed: Haskell、Scala
Functional-Dynamic-Strong-Managed: Clojure、Erlang
Proc-Static-Strong-Managed: C#、Java、Go
Script-Dynamic-Strong-Managed: Python、Ruby
Script-Dynamic-Weak-Managed: Perl、PHP、JavaScript
Proc-Static-Weak-Unmanaged:C、C++、Objective-C
「コンパイル時の型チェック」と「型付けの強弱」が分けられているのが曲者で、C/C++はコンパイルの時の型チェックはStaticだが、弱い型付け(Weak)とされています。一方、RubyやPythonはコンパイル時の型チェックはDynamicだが、強い型付け(Strong)になっています。JavaScriptやPerl、PHPはDynamicかつWeakに分類されています。
結果から言えそうなのは、(1) 関数型言語はバグが少ない、(2) C/C++/Objective-Cはバグが多い、(3) それ以外の言語はあまり変わらない。といったところでしょうか。議論されることの多い、Proc-Static-Strong(JavaやGo)とScript-Dynamic-Strong(RubyやPython)の相違については、品質の差はあまり大きくなさそうです。
さらに言語ごとの結果です(読み方は上と同じ):
C 0.15 (0.04) ∗∗∗
C++ 0.23 (0.04) ∗∗∗
C# 0.03 (0.05)
Objective-C 0.18 (0.05) ∗∗∗
Go −0.08 (0.06)
Java −0.01 (0.04)
CoffeeScript 0.07 (0.05)
JavaScript 0.06 (0.02) ∗∗
TypeScript −0.43 (0.06) ∗∗∗
Ruby −0.15 (0.04) ∗
Php 0.15 (0.05) ∗∗∗
Python 0.10 (0.03) ∗∗
Perl −0.15 (0.08)
Clojure −0.29 (0.05) ∗∗∗
Erlang −0.00 (0.05)
Haskell −0.23 (0.06) ∗∗∗
Scala −0.28 (0.05) ∗∗∗
同じカテゴリの言語でも、Perl(-0.15)とPhp(0.15)、Clojure(-0.29)とErlang(-0.00)のように、けっこうばらけていて、カテゴリ分けの妥当性に若干疑問が生じますが、総じて関数型言語が優秀なのは確かなようです。上の方のコメントでRubyがディスられていましたが、Rubyは関数型言語に次いで優秀という結果になっています。
Re:元論文を読んでみました。 (スコア:1)
JavaScriptに比べてTypeScriptが最強すぎなんですけど…。
言語そのものの特徴以外に、コードかいてる人間が、好き好んでその言語を選んだのか、仕方なくその言語で書いているか、でも違ってきそうな気がする。
その言語が好きなら、仕様とか設計思想とかまで知りたくなるから、そういうことを理解した上でコードを書く。結果バグが減る。
C、C++、Obj-C、Java、PHPあたりは、もうその言語で書かれ始めちゃってる、とか、その言語しかサポートされてない、って理由で仕方なく選択されている可能性が高い。なので、その言語に愛着はないけどコーディングしているって人も多いはず。
そうなると、言語仕様に対する探究心も薄くなるし、言語設計者の意図に沿わないようなコーディングも多くなる。結果バグの発生率が上昇する。
なので、TypeScriptみたいにマイナーな言語の方がコードの品質が高いのは、「敢えて好き好んでその言語を使っている」って人が多いってのも影響してそう。
Re: (スコア:0)
JSの場合、型どーとかよりも。。。
src=なんちゃらの奴が運悪く取得失敗とか、コンテンツ全体で最終的に何が入ってくるのか分からない部分がなんとも。。
※同一ページに埋め込む処理を複数チームが作ってて関数名ぶつかってたとか。。
Re: (スコア:0)
別ACですがそういう配慮をプログラマーが気を付けないといけない言語ということでやはり好きになれないですねー。
どんな言語にもそういった部分はあるし、駄目プログラマーはどんな言語を使っても駄目ですが、JavaScriptはその時の被害が大きすぎるので少なくとも生では使いたくないです。
Re: (スコア:0)
むしろ、「バグを直せる人がいない」からバグったままなのではないかと。
バグの発見には言語知識が必要なかったとしても、特定と修正には必須ですし。
Re: (スコア:0)
言語が好きすぎて言語設計者の意図に沿わないようなコーディングまでしちゃうってのもCやC++だとある気もする。
Re: (スコア:0)
テンプレートメタプログラミングライブラリなんかはどれ程ヤバそうに見えても、少し追ってみると恐ろしく慎重に書かれていて意外と問題ないかなと
この言語は malloc new 関係と例外処理にヤバサが凝縮されていると思う
もっとも、逆にそれがなければ言語の存在意義そのものに関わるのですが・・・
Re: (スコア:0)
Haskell > C# > Java > Python > JavaScript > C > C++ だったな・・・
あまり当てにならない印象
Rubyもおさわり程度に使った事が有るけど、強靭とは思えなかった
Scala評価高いな、次はこれ勉強してみよう
Re: (スコア:0)
評価が高いがねなんはもっと高いのだ
Re: (スコア:0)
ソースの複雑性とかも入れないとわかんないと思うけどなあ。
hello worldならどの言語でもバグが入らないだろうし、OSレベルに複雑ならどの言語でもバグは入るだろうし。
Re: (スコア:0)
人間がしでかすミスをミスと認識できない文法は、あんまり良くない