私は研究に使用する大規模なC++ライブラリのソロ開発者です(私は博士課程の学生です)。ライブラリにクールなアルゴリズムを実装するクラスがたくさんあるとしましょう:、、Algorithm1
などAlgorithm2
。次に、ライブラリを使用して最近追加された機能をテストするか、実行するスタンドアロンの「スクリプト」であるCスタイルの関数を作成します。プロットを生成するシミュレーション。これを、すばらしい(私は否定している)ジャーナルの出版物に含めます。ライブラリの設計は(私の知識と能力の限りでは)優れたソフトウェアエンジニアリングの原則に従いますが、ライブラリをリンクする「スクリプト」は、「main.cpp
仕事を成し遂げる」以外の原則には従いません。
現在、1つのファイルに300を超えるそのような「スクリプト」があります(20,000行以上のコード)。私はそれで問題はありません、私は非常に生産的であり続けます、そしてそれは本当に究極の目標です。しかし、このアプローチには、私が一緒に暮らすことを学んだばかりの大きな弱点があるのではないかと思います。
// File: main.cpp
#include <cool_library/algorithm1.h>
#include <cool_library/algorithm2.h>
...
#include <cool_library/algorithmn.h>
void script1() {
// do stuff that uses some of the cool library's algorithms and data structures
// but none of the other scriptX() functions
}
void script2() {
// do stuff that uses some of the included algorithms and data structures
}
...
// Main function where I comment in the *one* script I want to run.
int main() {
// script1();
// script2();
// script3();
...
script271();
return 0;
}
編集1:このプロセスにはいくつかの目標があります。
- 新しいスクリプト関数の開始にかかる時間を最小限に抑えます。
- すべての古いスクリプト関数を指先で検索できるようにします。したがって、これらのスクリプトの一部をコピーして新しいスクリプトに貼り付けることができます。これは、他の人が使用するための優れた設計ではないことを忘れないでください。
- スクリプトファイルのコンパイル時間は、20,000行のコードであるため、1秒未満でコンパイルされるため、気にしません。
ちなみに、私はEmacsを「IDE」として使用しています。Linuxでは、Autoconf / Automake/Libtoolプロセスを使用してライブラリとスクリプトを構築しています。
編集2:提案に基づいて、このシナリオで生産性を向上させる方法の一部は、コードを再構築することではなく、IDE(私の場合はEmacs)の機能をカスタマイズ/拡張することであるかどうか疑問に思い始めています。