安敦誌


つまらない話など
by antonin
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
検索
最新の記事
仲介したことはあまりないが
at 2017-04-29 03:36
サンセット・セレナード
at 2017-04-12 23:17
水分子と日本人は似ている
at 2016-06-04 01:49
ほげ
at 2015-06-05 03:46
フリーランチハンター
at 2015-04-17 01:48
アメリカのプロテスタント的な部分
at 2015-04-08 02:23
卯月惚け
at 2015-04-01 02:22
光は本当に量子なのか
at 2015-03-17 23:48
自分のアタマで考えざるを得な..
at 2015-03-06 03:57
折り合い
at 2015-03-01 00:19
記事ランキング
タグ
(295)
(146)
(120)
(95)
(76)
(65)
(59)
(54)
(45)
(40)
(40)
(39)
(32)
(31)
(28)
(27)
(25)
(24)
(22)
(15)
最新のコメント
>>通りすがり ソ..
by Appleは超絶ブラック企業 at 01:30
>デスクトップ級スマート..
by 通りすがり at 03:27
7年前に書いた駄文が、今..
by antonin at 02:20
助かりました。古典文学の..
by サボり気味の学生さん at 19:45
Appleから金でも貰っ..
by デスクトップ級スマートフォン at 22:10
以前の記事

C++とC#

製造業からソフトウェア業界に移ってから、ずっと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というツールがあって、スタイルで迷わなくていいのも助かる。スタイルというものは一貫性さえあれば、あとはなんとか慣れるものだ。

新しい言語を使うのは楽しいもんですな。

[PR]
by antonin | 2015-02-07 02:10 | Trackback | Comments(0)
トラックバックURL : http://antonin.exblog.jp/tb/24104330
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
<< 折り合い 浮世離れ補正 >>


フォロー中のブログ
外部リンク
外部リンク
ライフログ
ブログパーツ
Notesを使いこなす
ブログジャンル