what science programming paradigm languages language functional example computer books programming-languages functional-programming computer-science

programming-languages - science - programming paradigms



¿Cuál es el "problema de expresión"? (3)

La idea detrás del problema es que el texto es de 1 dimensión. Incluso si tiene líneas y columnas, generalmente las lee, palabra por palabra, línea por línea. Lo mismo ocurre con el compilador.

Y trata de representar algún tipo de 2 o más datos dimensionales en él. Por ejemplo, una tabla en orden de alcalde de fila se ve así:

((A, B, C), (D, E, F), (G, H, I))

En esta representación, es bastante fácil agregar una nueva fila al final, sin tocar el resto:

((A, B, C), (D, E, F), (G, H, I), (J, K, L))

Pero agregar columnas es problemático un poco, debes tocarlo en 4 lugares diferentes:

((A, B, C, M), (D, E, F, N), (G, H, I, O), (J, K, L, P))

Generalmente se encuentra con este problema en la práctica cuando se trata de clases abstractas: es bastante fácil agregar un nuevo subtipo como un nuevo módulo, pero cuando agrega un nuevo método abstracto, deberá tocar todos los módulos y agregarlo; necesitas hacer lo mismo en muchos lugares. Normalmente haces abstracciones para protegerte contra estas cosas repetitivas.

No hay solución a este problema siempre que use la representación 1D.

La solución a este problema sería un editor que le permita editar estas tablas como cosas como una tabla real y no como el texto (en una vista similar a Excel, donde puede agregar convenientemente nuevas columnas y filas).

Tengo una idea aproximada de lo que es esto, pero si alguien tiene una explicación del "problema de expresión" que creen que es sucinta e intuitiva, me encantaría escucharla.


Mire esta conferencia .

La idea es que su programa sea una combinación de un tipo de datos y operaciones sobre él. El problema requiere una implementación que permita agregar nuevos casos del tipo y nuevas operaciones sin la necesidad de recompilar los módulos antiguos y mantener la seguridad del tipo estático (sin conversiones ni comprobaciones del tipo de tiempo de ejecución).

Es interesante observar que en los lenguajes de programación funcionales es fácil agregar nuevas operaciones, pero es difícil agregar casos al tipo de datos. Mientras que en un idioma OO es al revés. Esta es una de las grandes diferencias conceptuales entre los dos paradigmas de programación.