by antonin
検索
最新の記事
記事ランキング
タグ
雑感(302)
雑談(151) 妄想(126) ニュース(96) 散財(77) web(65) おバカ(59) 検索(54) 親バカ(45) 日本語(41) PC(40) 季節(39) 昔話(35) 信仰(31) 政治経済(29) イベント(27) 言語(25) 音楽(24) 言い訳(22) ビール(15) 以前の記事
最新のコメント
ライフログ
ブログパーツ
ブログジャンル
|
製造業からソフトウェア業界に移ってから、ずっとC/C++でプログラムを書いてきた。それはそれで悪くないのだが、CにしてもC++にしても、統一された作法を守っていればどちらも美しい言語なのだけれども、C++という言語には長い歴史の重層というものがあって、C++が "Better C" と呼ばれて段階的に色々な技法を試行錯誤していたような時代のコードが現役で生きている。ソフトウェア予算の乏しい業界では「壊れていないものは直すな」という格言があって、テストで補強してリファクタリングをゴリゴリ進められるようになる以前の設計が、現役でバリバリと金を稼いでいたりする。 そういう厄介があって、C++11はおろかC++03標準すら完全に準拠していないような貧弱なコンパイラを使い、C++でありながらMISRA-Cに似た古臭いコーディングスタンダードに縛られながら、忍耐力を要求される仕事が続いてきた。定数はマクロにして、全てヘッダファイルに書くんだそうですよ。恐ろしい。C++はなまじCと互換性が高いせいで、ネットで拾ってきたような標準Cライブラリにべったり依存した処理だとか、生ポインタのnewとdeleteが飛び交う危険なコードが混入しやすい。古いコンパイラだとテンプレートはごく基本的なものしか仕様通りに動く保証がなくて、ある程度の構造はマクロを援用しないと怖くて書けなかったりする。 そして、C++の仕様は巨大化して、まともなコンパイラは地球上でGCCとclangだけになってしまった。Cの美点は、OSのようなハード寄りのソフトウェアを高級言語で書けたのももちろんだけれども、何よりコンパイラが小さくシンプルで、新しいハードにもコンパイラそのものを短期間で移植できるというところにあった。C++は、言語のシンプル化よりメタプログラミング可能なくらい強力な言語の道を選んでしまったので、正しく扱える人も減ってしまったということなのだろう。ある程度基礎的な計算機科学を知らない人が書いたC++のコードというのは恐ろしいものがある。下のリンクにあるような話を読んで、自分を勇気づけながらなんとか実務をやってきた。 The Noble Art of Maintenance Programming ところが、ちょっとした流れから、既存の小さなプロセスユニットを新しくC#で組み直すことになった。一応期間としては2か月。ほぼ一人仕事で、コード上のことに関しては、かなり制約なく自由にさせてもらえることになっている。カウボーイプログラミングという言葉もあるようで、野狐禅というか、そういう中途半端なものにならないように注意しないといけないのだが、まあ楽しい。これまでC++でもやっておきたかったような正常なカプセル化と例外運用は当然導入するとして、最近のC#5.0では非同期処理が非常にお手軽に書けるようになっており、このあたりも積極的に取り入れることにした。 ただまあ、お手軽とは言え新機能でもあり、水面下にはあの恐ろしい並列処理が潜んでいるので、あまり油断しているとあとで大変なことになるだろう。あとで大変なことになる、というのは、自分とは経験と意見の異なる人がコードをメンテナンスするときに、あまり繊細な構造にしておくとあっという間に壊れてしまうというあたりだ。そして、自分自身も来年には今とは相当経験と意見が変わっているはずで、そのあたりはしっかりベストプラクティスを調べておくべきなんだろう。 今回はテスト駆動も盛り込んでいるのだが、本体のコーディングよりテストの作成のほうが疲れる。本体のほうは比較的まばらに処理が動くゆるゆる設計なのだが、テストは数十本のテストがマルチスレッディングで一気に走る。実行が早くて結構なのだが、本体より一足先に高度な並列処理地獄に陥っている。それぞれのテストは小さく、また独立しているので、メモリ保護やテスト間の同期は気にしなくていいとはいえ、単独実行では一瞬で成功するテストが、一括実行だと遅延したり失敗したりする。まあ、このあたりで高密度な非同期処理の訓練をしておけるのはむしろいいことなのだろう。 テストが遅延する原因を調べたら、Task.Delayというものを知らなくて、非同期プログラミングのサンプルコードにあるThread.Sleepをテストコード側で多用してしまったために、同時実行によってワーカースレッドが枯渇したんじゃないかという疑いが出てきた。こういう失敗は早いうちにしておくべきだろうと思うので、テスト段階で並列地獄になるのはやはり良かったのだろう。 久しぶりに脳味噌フル回転でコーディングができて楽しい。C#も.Net Frameworkも、新しいVisual Studioもほぼ初体験で何かと不慣れなのだが、使ってみるといろいろと洗練されていて使いやすい。開発環境でいうと、識別子の宣言を書き換えるだけで参照箇所を全部直してくれるのが非常に便利。こういう機能はかなり前からあるのかもしれないが、これまで10年以上前の環境でチマチマとやっていたので、まさに隔世の感がある。StyleCopというツールがあって、スタイルで迷わなくていいのも助かる。スタイルというものは一貫性さえあれば、あとはなんとか慣れるものだ。 新しい言語を使うのは楽しいもんですな。
by antonin
| 2015-02-07 02:10
|
Trackback
|
Comments(0)
|
ファン申請 |
||