LINUX.ORG.RU

История изменений

Исправление ilammy, (текущая версия) :

Не, лол, я прекрасно понимаю, что

(define (add a b)
  (+ a b))
и
(define (add a b)
  (let ((t a))
    (let loop ()
      (if (= b 0) t
          (begin
            (set! t (+ t 1))
            (set! b (- b 1))
            (loop))))))
это чистые функции. И внешним сущностям по барабану, там есть побочные эффекты внутри или нет. Компьютеры, на которых реализуются функционально чистые хаскели, работают на побочных эффектах.

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

Программам легче запомнить кучу особенностей процессоров, так что они вероятно лучше знают, когда там что менять. И чистые функциональные языки это такой договор: «Я не буду мешать, окей? а ты оптимизируй хорошо. Пожалуйста. Ну пожалуйста! Я даже утыкаю код {-# СОТНЕЙ ДИРЕКТИВ -#} и начну объявлять типы в динамически типизированных языках!

Исходная версия ilammy, :

Не, лол, я прекрасно понимаю, что

(define (add a b)
  (+ a b))
и
(define (add a b)
  (let ((t a))
    (let loop ()
      (if (= b 0) t
          (begin
            (set! t (+ t 1))
            (set! b (- b 1))
            (loop))))))
это чистые функции. И внешним сущностям по барабану, там есть побочные эффекты внутри или нет. Компьютеры, на которых реализуются функционально чистые хаскели, работают на побочных эффектах.

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

Программам легче запомнить кучу особенностей процессоров, так что они вероятно лучше знают, когда там что менять. И чистые функциональные языки это такой договор: «Я не буду мешать, окей? а ты оптимизируй хорошо. Пожалуйста. Ну пожалуйста! Я даже утыкаю код {-# СОТНЕЙ ДИРЕКТИВ -#} и начну объявлять типы в динамически типизированных языках!