謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

言語に欲しい機能@バグチェック周り

splintやgccの-Wextraをもっと言語に落とせないのかなぁ。警告は所詮警告だし。

  • 戻り値(もしくはout/ref)を使わないとエラーにする属性
  • 基本型の制約
  • unused varianbleのエラーとunsed属性(gcc -Wallではしてくれるし__attribute*1もある。他は知らない。)
  • deadcodeのエラー(smatchやdmd -wはしてくれる(dmd -wはreturn時のみ?)。他は知らない。__attribute*2のようなものもあるといい。)
  • deadlock/double unlock/double mutexのエラー(smatchはしてくれる? D言語はscope(exit)を使うことで簡単に防げる。lockやunlock属性があってもいいような)
  • malloc/freeのエラー(malloc属性とfree属性はgccの__attributeにあるが、チェックに使われてたっけ?)
  • 無限ループの検出とエラー

あんまりキチキチだと例外な時に使いにくくなるから難しい所だと思うけど。
あと、threadで崩壊するのも多いなぁ(malloc/free/lock系/無限ループ)。というよりthreadこそバグの巣窟な気ガス。
スレッドのバグも対処できないかなぁ。まずsynchronizedが遅いし付けるのが面倒なのが問題。thread_safe属性を作って、それのないものはsynchronized扱いして、スレッドから呼ばれるのは別パスにすれば良い気がするんだけど(マングルが3fooなら3fooTみたいに)。でもサイズ膨れるし、むしろthread_safe属性がなければ関数を呼ぶ側で同期処理をすれば良い気ガス。関数と一対一なグローバル変数使って。

*1:unsed

*2:noreturn