Грамотное программирование в Haskell очень "грамотное Программирование"?

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

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

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

потом, читая дальше:

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

(...)

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

таким образом, веб-язык позволяет человеку выразить программы в порядке "потока сознания". ЗАПУТЫВАТЬ в состоянии скремблировать все вверх в расположение что компилятор PASCAL требует. Эта особенность веб является самым актив;

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

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

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


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

1 ответов


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

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

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

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