Я продолжаю слышать о том, как нужно изучать теорию категорий, чтобы действительно понять теорию языка программирования. До сих пор я выучил много PL, даже не ступая в царство категорий. Тем не менее, я подумал, что пришло время сделать прыжок, чтобы увидеть, что я пропустил.
К сожалению, ни один из источников, которые я могу найти, кажется, не связан с системами типов или программированием. Они говорят, что это введение в теорию категорий для компьютерных ученых, но затем отклоняются от общей абстрактной чепухи (я говорю это с любовью), не приводя никаких практических примеров или приложений.
Я предполагаю, что мой вопрос на самом деле состоит из двух частей:
- Является ли теория категорий необходимой для понимания «глубоких концепций» в PL?
- Какой источник объясняет теорию категорий с точки зрения практического применения к системам типов и программированию?
До сих пор самое большее, что я получил, - это смутная концепция функторов (насколько я могу судить, они не имеют отношения к функторам в ML). Я боюсь абстракции, которую мне нужно держать в голове, чтобы понять монады с точки зрения теории категорий.
Ответы:
Теория категорий не обязательна для понимания языков программирования, даже нет необходимости проводить углубленные исследования языков программирования. Большинство людей на языке программирования не знают (много) теории категорий.
Теоретические методы категории были полезны главным образом в небольшой части исследования языка программирования, а именно при анализе функционального программирования, в частности, после великого открытия Могги, что некоторые вычислительные эффекты имеют монадическую структуру. В 1990-х годах, после прорыва Могги, было проведено много исследований, чтобы распространить категориальные методы на другие формы языков программирования. Однако, насколько мне известно, категориальные методы не были найдены такими полезными для ОО, параллельных, параллельных и распределенных вычислений, временных вычислений или компиляторов. По этой причине люди в основном отказались от расширения категориальных методов.
Категориальные подходы к типизированному программированию хорошо работают в чистых функциях. В самом деле, некоторые простые системы печати являются категориями. Это описано, например, в
В настоящее время ведется большая работа над типами для одновременных процессов (например, типы сеансов), и ни один из них не является категоричным по состоянию на сентябрь 2016 года.
Тем не менее, никто не может знать слишком много математики, и знание теории категорий полезно. Так что это вопрос стоимости / выгоды. Если вы любите математику, если, возможно, у вас есть некоторый опыт в алгебре (например, что такое свободная группа над множеством, свободное кольцо и т. Д.), То изучение теории категорий будет легко, и если вы планируете выполнять работу, которая (вдохновлена) функциональное программирование, знание категорий будет полезно.
Наконец, теория категорий - это красивая математика, и ее стоит изучать просто потому, что она такая аккуратная.
Посмотрите вклад Uday Reddy в этом обсуждении для другого взгляда.
источник
Теория изучения категории - это огромные затраты времени, и вопрос о том, стоит ли она того, очень актуален. Я все еще борюсь с этим , и я уже знаю, почему я должен изучить это. Я написал:
Идея здесь состоит в том, чтобы использовать категории вместо наборов или «неопределенных битов» в качестве возможной семантики для данной теории типов или языка программирования. Почему нужно это делать? Рассмотрим двойственность между действием и наблюдением. Различные наблюдения (или, по крайней мере, их порядок во времени) не мешают друг другу (вне квантовой механики), но это не обязательно верно для разных действий. Укоренившиеся предрассудки о логике, встроенной в теорию множеств, затрудняют моделирование действий по сравнению с моделированием наблюдений.
Я не уверен, что действительно существует идеальное соответствие между теорией категорий и теорией типов, как утверждается здесь :
Это правда, что теория категорий может обеспечить семантику для теории типов (что может быть действительно полезно), но я сомневаюсь, что теория типов действительно обеспечивает достаточно мощный формальный синтаксический язык для выражения всех вычислений, выполненных в теории категорий.
На практике полезность теории категорий может возникнуть, если предложить полезные вопросы и аналогии. Но теория категорий также может предлагать действия и вопросы, которые в конечном итоге оказываются отвлечением (пустой тратой времени) от действительно важных вопросов. И вы, конечно, можете изучать логику и теорию типов, не заботясь о теории категорий.
источник