kzrnm / ac-library-csharp

42 stars 5 forks source link

ディレクトリ構成について #39

Closed kzrnm closed 2 years ago

kzrnm commented 4 years ago

ディレクトリ構成について提案です。

種別ごとに分類する

https://atcoder.github.io/ac-library/document_ja/

C++ 版ドキュメントの分類と合わせて

とわける。

Internal ディレクトリをそれぞれのディレクトリに作る

Internal ディレクトリもそれぞれのディレクトリ以下に作る。

internal_bit.hpp のような複数のファイルから呼ばれるようなファイルはプロジェクト直下の Internal ディレクトリに作る。

FloorSum, InvMod などはpartialにせず、単一の Math.cs に記載する。

単一の関数で済むので一つのファイルでも良いのではないでしょうか。

String.cs も同様。

現状

.
├── Algebra
│   └── NumOperator.cs
├── AtCoderLibrary.csproj
├── DSU.cs
├── Internal
│   ├── InternalSCCGraph.cs
│   └── Math.cs
│       ├── Barrett.cs
│       ├── InvGCD.cs
│       └── SafeMod.cs
├── Math
│   ├── CRT.cs
│   ├── FloorSum.cs
│   ├── InvMod.cs
│   └── PowMod.cs
├── SCCGraph.cs
├── String
│   ├── LCPArray.cs
│   ├── SuffixArray.cs
│   └── ZAlgorithm.cs
└── TwoSat.cs

提案

.
├── AtCoderLibrary.csproj
├── Algebra
│   └── NumOperator.cs
├── DataStructure
│   ├── FenwickTree.cs
│   ├── LazySegtree.cs
│   ├── Segtree.cs
│   └── String.cs
├── Internal
     └── InteranalBit.cs
├── Math
│   ├── Math.cs
│   └── Internal
│       └── InternalMath.cs
└── Graph
     ├── DSU.cs
     ├── SCCGraph.cs
     ├── TwoSat.cs
     └── Internal
         └── InternalSCCGraph.cs
key-moon commented 4 years ago

FloorSum, InvMod などはpartialにせず、単一の Math.cs に記載する。

C++ 版とはファイルの切り方が異なりますが、C++ のファイル分けは include の関係があるため参考にはあまりならないと考えています。 StringMath の1ファイルが長くなるのは可読性に欠ける上、一つのアルゴリズムで一つのファイルを使用するのは理に適っているので、わざわざ纏める意味はないのではないでしょうか?

種別ごとに分類する

最初は corefx での実装に倣い、名前空間でディレクトリを切るべきと考えていたのでこのような構造になっています。しかし、競技プログラミングにおいて使用するという制約からこのような名前空間の切り分けになっていることを考慮に入れると切り分けた方が良いと思います。(現に Algebra は切り分けていますし、少なくともどちらかに統一するべきではありますね。) 同様に、Internal ディレクトリをそれぞれのディレクトリに作ることについても賛成です。競技プログラミングにおいて、内部で使っている実装を外部から参照したいというニーズがある影響で internal アクセシビリティが使用できていないため、このような設計になっていると考えると、それぞれの直下に internal を作るのは理に適っていると感じます。

また、Bit については

└── Bit
    └── Internal

と切った方が統一されて良いと感じます。

kzrnm commented 4 years ago

ディレクトリの分類については賛成いただけたのでプルリク出しますね。

Math.csなどをまとめるかは考え方の問題なので、自分はどちらでも良いと思ってます。

kzrnm commented 2 years ago

もはや何もかも違うので close