Подтвердить что ты не робот

Что такое "проблема выражения"?

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

4b9b3361

Ответ 1

Смотрите эту лекцию.

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

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

Ответ 2

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

И вы пытаетесь представить в нем какие-то 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))

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

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

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

Ответ 3

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

который говорит:

Филип Уодлер из Bell Labs ввел термин "проблема выражения" в неопубликованной статье, которую он распространил по электронной почте в 1998 году. По его словам, "проблема выражения - это новое название старой проблемы. Цель состоит в том, чтобы определить тип данных по случаям, когда можно добавить новые случаи к типу данных и новые функции над типом данных, без перекомпиляции существующего кода и при сохранении безопасности статического типа (например, без приведения). "