Является ли грамотное программирование в Haskell "грамотным программированием"? - программирование
Подтвердить что ты не робот

Является ли грамотное программирование в Haskell "грамотным программированием"?

Я новичок в концепции грамотного программирования. Я читал документ Дональда Кнута (PDF) по этому вопросу, и в самом начале во Введении он говорит:

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

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

Затем, прочитав далее:

Что касается программы, то это ее структурные отношения. Комплексная часть программного обеспечения состоит из простых частей и простые отношения между этими частями; программисты задача состоит в том, чтобы указать те части и те отношения, в любом порядке лучше всего подходит для понимания человеком - не в каком-то жестко определенном порядке, как сверху вниз или снизу вверх.

(...)

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

Таким образом, веб-язык позволяет человеку выражать программ в порядке "потока сознания" . TANGLE способен взламывать все в порядок что компилятор PASCAL требует . Эта особенность WEB, возможно, является ее самым большим достоянием;

Вышеприведенная выдержка заинтересует меня, поэтому я исследовал немного больше. Нетрудно видеть в результатах любой поисковой системы связь между Haskell и грамотным программированием, но я не вижу этого "лучшего для человеческого понимания". Скорее я вижу очень хорошо подготовленную документацию, сохраняя при этом порядок, требуемый компьютером для работы.

  • Можете ли вы использовать термин "грамотное программирование" для удаления этой проблемы?
  • Есть ли какое-либо другое определение грамотного программирования, которое не требует функции "потока сознания"?
  • Является ли Haskell действительно грамотным программированием (используя определение Knuths)?

Наконец, я должен сказать как личное мнение, что даже то, что делает Haskell (и, вероятно, многие другие языки), не является грамотным программированием Кнута, мне все еще нравится идея, когда речь заходит об исчерпывающих описаниях методов и алгоритмов. Когда комментарии значительно превышают этот код, он служит большой цели.


WEB и TANGLE являются частью системы, которую первоначально использовал Д. Кнут в своей первой реализации концепции грамотного программирования.

4b9b3361

Ответ 1

Haskell, по большей части, очень гибкий, когда дело доходит до заказа. Внутри модуля Haskell все декларации и определения могут возникать в любом порядке. Благодаря ссылочной прозрачности также очень легко извлечь подзадачи, чтобы реализовать их где-то еще.

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

Возможно, наиболее раздражающим ограничением является то, что объявления импорта должны быть в верхней части модуля. Это немного нарушает поток сознания, и многие грамотные программы, написанные в Haskell, начинаются с заявления типа "не против этих импортов, вы увидите, где они нам понадобятся позже". Это было бы более согласовано с определением Кнута грамотного программирования, чтобы иметь возможность называть импорт в более естественных точках во время текста, когда из контекста ясно, почему они необходимы.

В стороне, я думаю, Haskell хорошо работает для грамотного программирования. Это может не соответствовать определению Кнута, но я думаю, что он подходит достаточно близко.