Что такое «проблема выражения»? - PullRequest
42 голосов
/ 30 августа 2010

У меня есть приблизительное представление о том, что это такое, но если у кого-то есть объяснение «проблемы выражения», которое, по их мнению, является кратким и интуитивным, я бы с удовольствием это услышал.

Ответы [ 3 ]

41 голосов
/ 23 сентября 2010

Смотреть эта лекция .

Идея состоит в том, что ваша программа представляет собой комбинацию типа данных и операций над ним.Проблема требует реализации, которая позволяет добавлять новые случаи типа и новые операции без необходимости перекомпиляции старых модулей и сохранения статической безопасности типов (без приведения и проверки типов во время выполнения).

обратите внимание, что в функциональных языках программирования легко добавлять новые операции, но сложно добавлять случаи в тип данных.В то время как на языке ОО это наоборот.Это одно из больших концептуальных различий между двумя парадигмами программирования.

17 голосов
/ 04 марта 2014

Суть проблемы заключается в том, что текст является одномерным. Даже если у вас есть строки и столбцы, вы обычно читаете их, слово за словом, строка за строкой. Как и компилятор.

И вы пытаетесь представить в нем некие 2-х или более-мерные данные. Например, таблица в порядке мэров строк выглядит следующим образом:

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

В этом представлении довольно просто добавить новую строку в конце, не касаясь остальных:

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

Но добавление столбцов немного проблематично, вам нужно прикоснуться к нему в 4 разных местах:

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

Обычно вы сталкиваетесь с этой проблемой на практике, когда имеете дело с абстрактными классами: довольно просто добавить новый подтип в качестве нового модуля, но когда вы добавляете новый абстрактный метод, вам нужно дотронуться до всех модулей и добавь это; Вы должны сделать то же самое во многих местах. Обычно вы делаете абстракции для защиты от этих повторяющихся вещей.

Нет решения этой проблемы, если вы используете одномерное представление.

Решением этой проблемы будет редактор, который позволяет вам редактировать эти таблицы как вещи, подобные реальной таблице, а не как текст (в виде, подобном Excel, где вы можете удобно добавлять новые столбцы и строки).

2 голосов
/ 21 февраля 2014

Существует также эта статья о решении проблемы с Clojure , однако проблема представлена ​​в Java, поэтому она должна иметь смысл, даже если вы не знаете Clojure, особенно с помощью маленьких диаграмм.

...