Po nauce języka Haskell i innych niezbyt czystych języków FP postanowiłem przeczytać o teorii kategorii. Po dobrym zrozumieniu teorii kategorii zacząłem myśleć o tym, jak pojęcia teorii kategorii można wykorzystać do projektowania programów, ale bez względu na to, jak bardzo się starałem, nie jest to dobra droga.
Po wielu nieudanych próbach powiązania teorii kategorii z projektowaniem programów doszedłem do wniosku, że:
- Teoria kategorii jest przydatna przy projektowaniu języka programowania .
- Teoria kategorii nie jest czymś, czego używasz podczas projektowania programów (nawet jeśli używasz języka, który został zaprojektowany w oparciu o zasady kategorii). Na przykład: Podczas programowania w Haskell będziesz używać typów, konstruktorów typów, funkcji, funkcji wyższego rzędu itp. Do projektowania programu, a nie pojęć teorii kategorii.
Podsumowując, mamy system warstwowy (kolejność od niskiej do wysokiej):
Teoria kategorii -> Język programowania -> Program
Na konkretnej warstwie korzystasz z koncepcji bezpośredniej warstwy podstawowej .
Czy to zrozumienie jest prawidłowe? Jeśli nie, a uważasz, że przy projektowaniu programów możemy bezpośrednio korzystać z koncepcji teorii kategorii, zapoznaj się z niektórymi artykułami lub postami na blogu, gdzie są one demonstrowane.
UWAGA: Projektując programy, mam na myśli projektowanie programów opartych na różnych koncepcjach, takich jak współbieżność, równoległość, reaktywność, przekazywanie wiadomości itp.
Odpowiedzi:
Cóż, to oczywiście zależy od tego, jaki program próbujesz zaprojektować.
Jeśli projektujesz program księgowy dla sklepu z czekoladą twojej ciotki, bardzo wątpię, czy teoria kategorii będzie bardzo przydatna.
Ale są oczywiście sytuacje, w których teoria kategorii jest niezwykle przydatna w projektowaniu programów (przez które rozumiem również struktury danych, biblioteki itp.). Takie sytuacje występują najczęściej, gdy zaangażowane programy mają charakter matematyczny.
Jeśli chcesz pisać programy, które obliczają dokładne liczby rzeczywiste i inne struktury występujące w analizie matematycznej, pierwszym pytaniem, na które musisz odpowiedzieć, jest to, co oznacza poprawne wdrożenie skomplikowanego obiektu matematycznego (takiego jak funkcja różniczkowalna, rozmaitość itp. ). Tutaj bardzo pomaga znajomość teorii i logiki kategorii, ponieważ zapewniają one systematyczny sposób tłumaczenia definicji struktur matematycznych na specyfikacje i implementacje odpowiednich struktur danych. Modne hasło, którego powinieneś szukać, to teoria wykonalności . Ale to tylko jeden przykład.
Najlepszym sposobem na sprawdzenie, w jaki sposób teoria kategorii się przydaje, jest przyjrzenie się programom napisanym przez ludzi znających wiele teorii kategorii (i ogólnie matematyki). Oczywistym tego przykładem jest Martín Escardó i jego niemożliwe funkcje, na przykład:
Możesz narzekać, że to nie tylko teoria kategorii, ale także logika i topologia. Takie skargi byłyby bardzo mylne. Najlepsza teoria kategorii jest zawsze mieszana z innymi rzeczami.
Na koniec odradzałbym wyciąganie wielkich wniosków na temat natury rzeczy na podstawie odrobiny samodzielnego czytania.
źródło
Ludzie używali CT do opisywania typów danych.
Nie jestem do końca pewien, czy ktokolwiek zwraca na to uwagę. Sądzę, że to i zawarte tam linki wyjaśniłyby to bardziej szczegółowo.
źródło