Sigo escuchando acerca de cómo uno debe aprender la teoría de categorías para comprender realmente la teoría del lenguaje de programación. Hasta ahora, he aprendido una gran cantidad de PL sin siquiera entrar en el ámbito de las categorías. Sin embargo, pensé que era hora de dar el salto para ver lo que me había estado perdiendo.
Desafortunadamente, ninguna de las fuentes que puedo encontrar parece hacer conexiones para escribir sistemas o programar. Ellos dicen que es una introducción a la teoría de categorías para los informáticos, pero luego desviarse en sentido general abstracto (lo digo con amor) sin dar ejemplos prácticos o aplicaciones.
Supongo que mi pregunta es realmente doble:
- ¿Es esencial la teoría de categorías para comprender los "conceptos profundos" en PL?
- ¿Cuál es una fuente que explica la teoría de categorías desde el punto de vista de aplicaciones prácticas para escribir sistemas y programación?
Hasta ahora, lo más lejos que he llegado es a una vaga concepción de los functores (que, hasta donde puedo decir, no parecen estar relacionados con los functores). Temo la abstracción que necesitaré tener en mi cabeza para comprender las mónadas desde una perspectiva teórica de categoría.
fuente
Respuestas:
La teoría de categorías no es necesaria para comprender los lenguajes de programación, ni siquiera es necesario hacer una investigación avanzada sobre lenguajes de programación. La mayoría de las personas del lenguaje de programación no conocen (mucho) la teoría de categorías.
Los métodos teóricos de categorías han sido útiles principalmente en una pequeña parte de la investigación del lenguaje de programación, especialmente en el análisis de la programación funcional, particularmente, desde el gran descubrimiento de Moggi de que algunos efectos computacionales tienen una estructura monádica. En la década de 1990, tras el avance de Moggi, se realizó una gran investigación para extender los métodos categóricos a otras formas de lenguajes de programación. Sin embargo, a mi leal saber y entender, los métodos categóricos no se han encontrado tan útiles para OO, cómputo concurrente, paralelo y distribuido, cómputo temporizado o compiladores. Por esta razón, la gente ha abandonado principalmente la extensión de los métodos categóricos.
Los enfoques categóricos para la programación escrita funcionan bien en funciones puras. De hecho, algunos sistemas de mecanografía simples son categorías. Esto se describe, por ejemplo, en
Ahora hay mucho trabajo sobre tipos para procesos concurrentes (por ejemplo, tipos de sesión) y nada de eso es de naturaleza categórica a partir de septiembre de 2016.
Dicho esto, uno nunca puede saber demasiadas matemáticas, y conocer la teoría de categorías es útil. Entonces es una cuestión de costo / beneficio. Si te gustan las matemáticas, si tal vez tienes un poco de experiencia en álgebra (por ejemplo, cuál es el grupo libre en un set, anillo libre, etc.), entonces aprender teoría de categorías será fácil, y si planeas hacer un trabajo que esté (inspirado en) programación funcional, conocer categorías será útil.
Finalmente, la teoría de categorías es una matemática hermosa, y vale la pena estudiarla simplemente porque es muy clara.
Vea la contribución de Uday Reddy en esta discusión para una visión diferente.
fuente
La teoría de la categoría de aprendizaje es una gran inversión de tiempo, y la pregunta de si vale la pena es muy válida. Yo todavía lucha con esto también , y ya sé por qué tengo que aprenderlo. Escribí:
La idea aquí es usar categorías en lugar de conjuntos o "bits no especificados" como una semántica posible para una teoría de tipos o lenguaje de programación dado. ¿Por qué debería uno querer hacer esto? Considere la dualidad entre una acción y una observación. Las diferentes observaciones (o al menos su orden en el tiempo) no interfieren entre sí (fuera de la mecánica cuántica), pero esto no es necesariamente cierto para diferentes acciones. Los prejuicios arraigados sobre la lógica incrustada en la teoría de conjuntos hacen que sea difícil modelar acciones, en comparación con las observaciones de modelado.
No estoy convencido de que realmente haya una correspondencia perfecta entre la teoría de categorías y la teoría de tipos como se afirma aquí :
Es cierto que la teoría de categorías puede proporcionar semántica para la teoría de tipos (que puede ser realmente útil), pero dudo que la teoría de tipos realmente proporcione un lenguaje sintáctico formal suficientemente poderoso para expresar todos los cálculos realizados en la teoría de categorías.
En la práctica, la utilidad de la teoría de categorías puede surgir al sugerir preguntas y analogías útiles. Pero la teoría de categorías también puede sugerir actividades y preguntas que al final resultan ser solo una distracción (pérdida de tiempo) de los problemas realmente importantes. Y ciertamente puede aprender lógica y teoría de tipos sin preocuparse por la teoría de categorías.
fuente