パスワードを忘れた? アカウント作成
12054028 story
プログラミング

GitHubで最も「醜いハック」が使われているのはC言語 84

ストーリー by headless
正直 部門より
開発者の皆さんの中には、時間や知識が足りない場合や、ちょっと面倒だからといった理由で、間に合わせに自分でも最良とは思えない(が、目的は達せられる)コードを書いたことがある方もいるだろう。ITworldのPhil Johnson氏がGitHubのデータを調査したところ、このようなコードを書いている(少なくとも自らそれを認めている)開発者が最も多かったのはC言語の開発者だったそうだ(ITworldの記事本家/.)。

調査方法は、GitHubの検索機能を使って「ugly hack(醜いハック)」という文字列を含むコードファイルを検索するというもの。その結果、C言語では181,000ファイルがこの文字列を含んでいたという。これにPHP(79,000ファイル)、JavaScript(38,000ファイル)、C++(22,000ファイル)、Python(19,000ファイル)が続く。

さらに、Google BigQueryを用いてGitHub Archiveから2013年1月1日~2015年5月1日までに作成されたフォークされていないリポジトリの数を言語ごとに抽出。同期間で「ugly hack」を含むファイルを検索し、各言語でリポジトリ1件あたりの「ugly hack」出現回数を計算したところ、やはりC言語が圧倒的に多い0.4232回。2位のPHPの3倍以上、12位のJavaの50倍近い結果になったという。

ただし、修正された部分に「Fixed an ugly hack」といったコメントが付けられている場合や、1ファイルに複数の「ugly hack」が含まれている場合にも1回としてカウントされてしまう点が今回の調査方法の問題点だという。どちらにしても、C言語の開発者が最も多くugly hackを行っているか、C言語の開発者に正直者が多いかのどちらかだとしている。皆さんの場合はいかがだろうか。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • perl (スコア:5, おもしろおかしい)

    by apt (28270) on 2015年05月09日 17時45分 (#2811328) 日記
    本家/.のコメントでは、perlについて、「Perlで書かれたコードの各行がどうせugly hackなのは皆知ってるから、書く必要が無かったんだろう。」 [slashdot.org]なんてコメントされてますね。
    • by Anonymous Coward on 2015年05月09日 18時40分 (#2811358)

      「本家/.」とか言えるのも今日明日までと思うと感慨深いですね。

      親コメント
      • by Anonymous Coward on 2015年05月09日 20時46分 (#2811418)

        オフトピだが、本家からの転電ストーリーも無くなるのか興味深々。

        親コメント
        • Re:perl (スコア:3, 参考になる)

          by headless (41064) on 2015年05月10日 11時29分 (#2811600)
          本家/.記事をそのまま訳した「FOSSのUnix系OSで、Linuxが特に成功した理由は? [srad.jp]」のようなスタイルの記事はなくなります。ただし、現状の本家/.記事は大半が他サイトの記事のコピペなので、そのまま訳して出せる記事はあまりありませんでした。このタレこみの場合、私は本家/.記事を読まずにリンク先のITworldの記事だけを参照して書いています。サイト移行以降は本家/.記事も他と同じニュースソースの一つになるだけなので、この記事のような感じの記事がなくなることはないでしょう。
          親コメント
        • by Anonymous Coward

          今だってよそ様のサイトから勝手に引用している。本家のサイトから引用していたのが他所のサイトからの引用に変わるだけ。
          //だと思います

    • by Anonymous Coward

      だね。

      これって単に、「『醜いハック』が最も嫌われる(or 目立つ)言語はC」ってだけかと。

      • by Anonymous Coward

        言語的なサポートが少なくてハックしたくなるケースも多いんだろうけど、醜いハックに自覚的にならざるを得ない言語ですよね。
        変な使い方を無自覚にやると爆死するだけだし、無茶なパラダイムを導入するとわかりやすくスパゲッティ化してくれる。

        PHPだと…急場凌ぎとセキュリティホール対策で醜いハックが頻発するのかな。
        C++とかJavaは……オブジェクト指向に変に染まった結果、無自覚ないハックや無駄にまみれてるコードが多いから、多分件数以上に醜いハックが氾濫してると思う。
        もともと醜いハックであってもデザインパターンと呼べば許されかねない風潮があるしorz

        • by Anonymous Coward

          PHP は、ネット上に転がってる「ugly hack」って入っているコードスニペットを、そのままコピペしてるケースが多い予感。(偏見?)

          Javaは、使用ライブラリのバージョンとか依存関係をねじ伏せたり、ライブラリのバグ回避のために hack が必要になることが多いイメージ。
          後日バージョンが上がったとき、なんだっけ? てならないように、コメントしてる感じ?

          JavaScript で 「foo = bar|0 」とか、「foo = +bar」 とか、「foo = bar && bar.baz 」 みたいのは、ugly hack に入るのかな?

      • by Anonymous Coward

        というより、単純にC言語を使ってるプロジェクトがそれだけ多いってだけかも。

        • by Anonymous Coward

          「リポジトリあたりの回数」ってあたりも、プロジェクト規模が影響してそうですね。

    • by Anonymous Coward

      これって酷いハックでもOKって文化があったということかも?

      Cでも、ある程度歴史のある言語だと、今風の理路整然としたコードにしなければならないって意識は低いかも?
      特に環境が悪い(少ないメモリなど)で動かさなければならないとかで、わざと汚いコードになってしまうってこともあるから

      • by Anonymous Coward on 2015年05月10日 0時49分 (#2811496)

        最近の言語になるにつれて、ugly hackにならざるを得ない部分がライブラリや言語そのもので隠蔽されてきたということではないかと。
        コンパイラがアセンブリ言語レベルの泥臭い最適化を隠蔽してるように。

        親コメント
  • 二つの理由 (スコア:5, 興味深い)

    by SteppingWind (2654) on 2015年05月09日 18時00分 (#2811335)

    一つめは, 何らかの理由でugly hackが必要だからC言語を使っていることが多いから. 今日日, 性能やフットプリントを気にしない用途ではCを使うことは少ないですから. 他にもハードのバグ(っぽいもの)を隠蔽するためにugly hackすることもありますし.

    二つめは一つめと関連して, 書いている当人がugly hackであることを認識できているから, 注意書き的にコメントしておくんでしょう. これが初心者でよくある「おまじないをコピペ」では, それがugly hackであることも認識できずに感染拡大することになりますから.

    • by Anonymous Coward

      ハードやOSの不具合や制限に対応するためのコードを「ugly hack」と呼ぶことはありえますね。
      その場合、必要だから行っているのであってプログラム自体の品質の問題ではないので、割り引いて考える必要はありそうな気がします。

  • おまじない的に入れてるだけやコピペで意味を理解せずに持ってきてることもあるから書いてあるだけ良心的かもしれない

  • 「ハック」で思い出したけど、CSS にも「IE ハック」という
    やつがありました(プログラミングじゃないけど)。
    ブラウザ依存しないのが理想だけど、Internet Explorer(IE)
    だけはどうにもならないことがけっこうあり…
    早く IE には絶滅してほしいものです。

  • by Anonymous Coward on 2015年05月09日 17時34分 (#2811323)

    Makefileって、とりあえず動けばいいやって、適当に書くでしょ
    最初から改善する気がないので醜いとは思わない?

  • by Anonymous Coward on 2015年05月09日 17時43分 (#2811326)

    はい、クラス/構造体に入れるの面倒でグローバル転がしてテストしてそのまま
    なんてのはよくやっちゃいます。
    あとはデバッガで追いやすいようにローカルに使われるものを広域変数にしといてそのままとか、
    ゼロ割発生直前でチェックして済ますとか(元から絶たない)
    他になにかuglyな例はあるでしょうか。

  • by Anonymous Coward on 2015年05月09日 17時46分 (#2811329)

    問題点を認識しながらそのまま発表してしまうのはいかがなものか

    • by Anonymous Coward

      ここまで見事にネタにマジレス乙、があてはまるツッコミ、
      なかなかトーシロさんに出来るもんじゃないぜ?

  • by Anonymous Coward on 2015年05月09日 18時02分 (#2811336)

    だが、それが良い。

  • by Anonymous Coward on 2015年05月09日 18時10分 (#2811340)

    これって単純にCがよく使われていて、リソースも沢山ある言語だから、というだけの話ですよね?別に特段ストーリーにする必要性はないと思うのだけれども……まあ、ネタに困っているのかな。

    • by Anonymous Coward

      ファイル数が多いだけという可能性がありますよね。
      何処かに書いてあるのかな?

    • by Anonymous Coward

      これ [namaristats.com]によると、GitHubにC言語のリソースが多いという訳ではないです。

      ランクでvimLが3位にある事もそうですが、

      1) 言語機能が貧弱で手を抜きがちな要素が多い。
      2) それに気が咎める程度には判っている作者が多いこと。

      で上位に立っているような気がしますね。
      Cの場合は更に「性能の為に手を汚さざるを得ない」と言うこともありそうですが。

      • 別スレッドでも話題になってますが、大抵のuglyなコードは「クロスプラットフォームの流儀から外れる」「Cのコーディング作法を逸脱して書くよりない状況になってしまう」と言う話なんで。

        ハードウェアに依存するコードを書かないといけないとか、OSの(主にリアルタイム性に関する)制約で不本意なコードを書かないといけないとか、
        あとは仕様変更とか仕様の不備・果てはミドルウェア側の仕様の問題で「美しくない」コードでいくしかなくなったとか。

        なので、言語機能が貧弱かどうかはあんまし関係ないでしょう。

        他の高級言語ではミドルウェアがuglyなコードを書くのを代行してるだけで、本質的には余り変わらない気がします。

        --
        --暮らしの中に修行あり。
        新しいblogはじめました。 [hateblo.jp]
        親コメント
      • by Anonymous Coward

        手を抜きがち→泥臭い?
        ダック・タイピングとかクロージャとか手抜きっつーより泥臭い実装になっちゃう。

        • by Anonymous Coward

          えっと、

          例外処理がないので関数の成否をリターンステータスで返す -> 成功すると決めてかかる。
          mallocしたメモリを自分で解放しなきゃいけない -> プロセスが終了すれば解放されるからそのまま。
          データ型が貧弱 -> 配列で済ます。中間に挿入するときはmemcpyでずらす。

          #ごめんなさいごめんなさい。

      • by Anonymous Coward

        使い勝手の悪い言語は何をするにも醜いハックで敢えて明言する必要も無いレベルだったり、
        醜いハックであってもデザパタの名の元に常套手段としてしまいいちいち言及することもなかったり、
        醜いハックであってもそれを書くかどうかは別の問題ですよね。

        PHPやJavaScript(Node.js)とかのWeb系だと、セキュリティのための後付け要素で手を汚してる例も結構ありそう。

  • by Anonymous Coward on 2015年05月09日 18時19分 (#2811343)

    3番目の言語が読めないのですが…なんでしょうか。
    http://www.itworld.com/article/2918583/open-source-tools/c-leads-the-w... [itworld.com]

  • by Anonymous Coward on 2015年05月09日 18時25分 (#2811346)

    C言語を使う人は高い完成度を求めているということでは?

    • by Anonymous Coward

      もしくはレベルや意識が高いということも
      (特に日本の)PHPなんかじゃ酷いコードでも本人に全く自覚がないなんてことも

  • hack って低水準言語かそれに近い言語でよく使われるイメージがあるのだが。

    • by Anonymous Coward

      単にuglyで検索してもC言語がだんとつなんだよね

    • by Anonymous Coward

      想定してないんじゃね?ってことができるのがCで、なるべくできないようにして(安全にしてる)のが例示されてる他の言語だからの気がする

  • by Anonymous Coward on 2015年05月09日 19時50分 (#2811392)

    自分のコードの酷さを認識できるプログラマが他の言語でどれほどいるというんだってね

  • by Anonymous Coward on 2015年05月09日 20時20分 (#2811406)

    元の調査には書かれているのかもしれませんが。
    > リポジトリ1件あたりの「ugly hack」出現回数
    って事は単に、C言語が1リポジトリ当りのファイル数や行数が多いと言うだけかもしれません。

  • by Anonymous Coward on 2015年05月09日 20時22分 (#2811407)

    アグリィイラプションしても、冥界の蝶々のようなきれいなバイナリになればいいじゃん。

typodupeerror

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...