はじめてのじぇねりっくぷろぐらみんぐ

あと2,3週間を目処にバイトをやめようということで、先生に話した結果ライブラリの拡張作業を行うことになった。
実はライブラリを作ったことがなかったりする。
それで見せられた基となるメインプログラムとライブラリが、C++のtemplateをふんだんに駆使したジェネリックプログラミングによるものだった。
実は以前LSHをやめる際、先生に参考として見せていただいたソースもジェネリックな内容だった。
僕はそのコードを追っかけるのにいっぱいいっぱいで、とても自分がこんなコードを書けるとは思っていなかった。templateなんか恐怖の対象でしかなかった。templateを実際に書くわけではないコンテナですら、エラーログが意味不明過ぎてわけがわからなかったのだ。コレに加えて自作のtemplate関数・クラスなど正気の沙汰とは思えない、というわけだ。

だがいつまでもそうも言っていられないわけで、ともかく取り組んでみることに。
今回は直前までのmultiprocessingと違って参考にすべきソースがあった。
これが何よりも一番の手助けとなった。わからない部分(主にoperatorとtemplate)は検索や書籍で補いつつ、コードをちょこちょこ書いては消しを繰り返した。
一番辛いのは今までのようにflymakeを使って連続的にコーディングできなかったこと。
仕方なかったのでGCCとclangの両コンパイラコンパイルしてエラーログを見比べつつ逐一修正する作業を行なっていた。
自分でも非常に効率が悪いような気がしてならない。
誰か改善案を教えて欲しい。やはりIDEを使うべきだろうか。

とりあえずtemplateには慣れてきたように思う。なんとなくだが、どうしてここでtemplateを使い、どうしてここでtypedefをするのかが見えてきた。しかしやはりなぜ静的言語でわざわざジェネリックプログラミングを? と思わずにはいられない部分もある。
もっと言語仕様と設計思想から理解しなければ見えてこない部分が多いんだろうと思っている。

今回は自分で一からコーディングしたわけではないのでソースを公開できそうにない。
いつかは自分もあんなパワフルなライブラリを作ってみたいと思う。

ところでC++のソースを何時間も眺めていてふと思ったのだけれど、実際の現場ではC++による開発はどのように行われているのだろう。
プロジェクトのチームで規約を守りながら使う言語とも、一人の優秀なプログラマーが爆速開発に使う言語とも違う気がする。
前者ならJavaとかもっと意思統一しやすい言語があるだろうし、後者ならLLの方がいいだろう。
C++はあまりにも自由に書けすぎて、しかし使うのには重すぎるように感じる。
C/C++と考えてパッと浮かぶのは他の言語の基盤だとかOS開発だとかだが、それはどちらもC言語であってC++ではないような気がする。となるとやはり組み込み系だろうか。リソースが限られた分野などに強そうだ。
メモリもそうだがきっとC++による非常に強力なデータ構造が高速化をもたらすのではないだろうか。
これからももっと書き続けてこの言語の長所を見極めたいと思う。