Konwencje nazewnictwa modułów Haskell

Jak nazwać moje Moduły Haskell dla programu, a nie Biblioteki i uporządkować je w hierarchii?

[11]} tworzę Ray tracer o nazwie Luminosity. Najpierw miałem te moduły:
Vector Colour Intersect Trace Render Parse Export

Każdy moduł był w porządku, ale czułem, że brakuje organizacji.

Najpierw umieściłem każdy moduł pod Luminosity, więc na przykład Vector był teraz Luminosity.Vector (zakładam, że jest to standard dla programu haskell?).

Wtedy pomyślałem: Wektor i Kolory są niezależne i mogą być ponownie użyte, więc należy je rozdzielić. Ale są za małe, żeby zamienić je w biblioteki.

Gdzie powinni pójść? Jest już (na hackage) Data.Vector i Data.Colour, więc mam je tam umieścić? A może spowoduje to zamieszanie (nawet jeśli importuję je pogrupowane z innymi importami lokalnymi)? Jeśli nie ma, to powinno być Luminosity.Data.Vector czy Data.Luminosity.Vector? Jestem prawie pewien, że widziałem oba używane, chociaż może po prostu zdarzyło mi się spojrzeć na projekt za pomocą niekonwencjonalnego struktura.

Mam również prosty Eksporter obrazu TGA (Export), który może być niezależny od jasności. Wydaje się, że właściwą lokalizacją byłoby Codec.Image.TGA, ale ponownie, czy Luminosity powinno być gdzieś tam, a jeśli tak, to gdzie?

Byłoby miło, gdyby struktura projektu Haskell lub jakaś inna wiki to wyjaśniła.

Author: mk12, 2012-07-21

2 answers

Po pierwsze umieszczam każdy moduł pod Luminosity

Myślę, że to był dobry ruch. Wyjaśnia każdemu, kto czyta Kod, że te moduły zostały wykonane specjalnie dla projektu Luminosity.

Jeśli piszesz moduł z zamiarem symulowania lub ulepszania istniejącej biblioteki lub wypełnienia luki, w której uważasz, że brakuje konkretnej biblioteki generycznej, to w tym rzadkim przypadku porzuć prefiks i nazwij go ogólnikowo. Na przykład, zobacz jak pakiet pipes eksportuje Control.Monad.Trans.Free, ponieważ autor z jakiegokolwiek powodu nie był zadowolony z istniejących implementacji wolnych monad.

Wtedy pomyślałem, że wektor i kolor są prawie niezależne i mogą być ponownie użyte, więc powinny być rozdzielone. Ale są zbyt małe, aby oddzielić się od biblioteki (odpowiednio 125 i 42 linie). Gdzie powinni pójść?

Jeśli nie tworzysz osobnej biblioteki, prawdopodobnie pozostaw je w Luminosity.Vector i Luminosity.Colour. Jeśli zrób oddzielne biblioteki, a następnie spróbuj wysłać e-mail do grupy docelowej tych bibliotek i zobacz, jak inni ludzie myślą, że biblioteki powinny być nazwane i skategoryzowane. To, czy podzielisz je na oddzielne biblioteki, zależy wyłącznie od Ciebie i jak wiele korzyści, jak myślisz, te oddzielne biblioteki mogą zapewnić innym osobom.

 10
Author: Dan Burton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-22 03:02:19

Jeśli twój program nie jest Naprawdę duży, nie organizuj modułów w hierarchii.Dlaczego nie? Bo chociaż komputery są dobre w hierarchii, ludzie nie są. Jeśli wybierzesz dobre nazwy, możesz z łatwością obsłużyć 150 modułów w płaskiej przestrzeni nazw.

Czułem się jak [płaska przestrzeń nazw] brakuje organizacji.

Organizacja hierarchiczna nie jest celem samym w sobie. Aby uzasadnić podział modułów na hierarchię, należy potrzebujesz powodu . Dobre powody mają zwykle związek z ukrywaniem lub ponownym wykorzystaniem informacji. Kiedy wprowadzasz ukrywanie informacji, jesteś w połowie drogi do projektu biblioteki, a kiedy mówisz o ponownym użyciu, skutecznie budujesz bibliotekę. Przekształcanie dużego programu w "mniejszy program plus Biblioteka" jest dobrą strategią dla software evolution, ale wygląda na to, że dopiero zaczynasz, a twój program nie jest jeszcze wystarczająco duży, aby ewoluować w ten sposób.

Te kwestie są w dużej mierze niezależnie od używanego języka programowania. Polecam lekturę niektórych prac Davida Parnasa na temat linii produktowych i rodzin programowych, a także niedocenianą pracę Matthiasa Blumemodułowość hierarchiczna. Te prace dadzą ci kilka bardziej konkretnych pomysłów na temat tego, kiedy hierarchia zaczyna służyć celowi.

 18
Author: Norman Ramsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-21 20:35:58