Size: a a a

Clojure — русскоговорящее сообщество

2020 January 30

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Зависит от того, как реализованы замыкания. Это уже не семантика а детали реализации. Например в моем интерпретаторе в лямбде просто хранится АСТ ее тела и ссылка на окружение ее создания, поэтому можно переписать ее тело с использованием любмых связанных символов из этого окружения. В компилируемых реализациях, полагаю, это не так, но таким вроде и никто не занимается.
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Andrey Ivanov
Зависит от того, как реализованы замыкания. Это уже не семантика а детали реализации. Например в моем интерпретаторе в лямбде просто хранится АСТ ее тела и ссылка на окружение ее создания, поэтому можно переписать ее тело с использованием любмых связанных символов из этого окружения. В компилируемых реализациях, полагаю, это не так, но таким вроде и никто не занимается.
Ну там есть одна плюшка - сравнение функций по AST
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
как вот в этом поделии https://www.unisonweb.org/
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Andrey Ivanov
Зависит от того, как реализованы замыкания. Это уже не семантика а детали реализации. Например в моем интерпретаторе в лямбде просто хранится АСТ ее тела и ссылка на окружение ее создания, поэтому можно переписать ее тело с использованием любмых связанных символов из этого окружения. В компилируемых реализациях, полагаю, это не так, но таким вроде и никто не занимается.
Это типа dynamic scope?
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
функции сравнивать безнадежное дело. #(+ 1 %) и inc, и это не говоря о совпадающих АСТ при разных контекстах замыканий
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Ну почему безнадежное
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
[:div {:on-click #()}]
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Это типа dynamic scope?
Подзабыл что это такое, сорри.
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Это разница между перерерисовкой всего компонента и неперерисовкой всего компонента
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Andrey Ivanov
Подзабыл что это такое, сорри.
Ну, когда значение переменных берется не в момент определения функции, а берется из окружения в момент вызова
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
(def x 3)

(defn square []
   (* x x))

(def x 4)

(println (square))
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
lexical и dynamic scope тут вернут разное
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
А, понял, сохраняется ли значение до мутации или берется какое будет в момент вызова. Второе, да. Это позволяет интересные штуки с замыканичми творить через set! и делать ооп всякое
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Andrey Ivanov
А, понял, сохраняется ли значение до мутации или берется какое будет в момент вызова. Второе, да. Это позволяет интересные штуки с замыканичми творить через set! и делать ооп всякое
У меня такое вызывает мурашки по телу :)
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
А изменение тела лямбды у тебя мурашек не вызывает? 😁
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну вроде не предлагается мутировать саму функцию при этом) Ну и не надо так делать, макросы вроде более удобным способом позволяют похожие вещи делать
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
А по поводу мурашек, есть еще интересная спецформа eval-in которая принимает окружение, в котором надо вычислить что-то. окружение не фест класс вэлью, но можно лямбду передать и в ее окружении будет вычисляться форма. Это еще больше добавляет возможностей
источник

IP

Ilya Pomaskin in Clojure — русскоговорящее сообщество
https://github.com/IlyaPomaskin/h3lwp/commit/7fe240aec246f19ff5bd704130b27e5b5ba83907?diff=split

Я тут вчера кода понаписал и не уверен что не переинженерил. Как считаете нужен ли тут протокол? Или может есть более простые методы тоже самое реализовать?
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
продолжим получать удовольствие от рефакторинга) кого знатно бомбило в момент написания подобного
 exports.setDiscountsForFukinContracts = function(fields){
           var deferred = $q.defer();
           return $http.post(host + '/api/ContractServiceDiscount/', fields)
               .success(function (data) {
                   deferred.resolve(data);
               })
               .error(function (data) {
                   deferred.reject(data);
               });
       };
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Сергей Суржик
продолжим получать удовольствие от рефакторинга) кого знатно бомбило в момент написания подобного
 exports.setDiscountsForFukinContracts = function(fields){
           var deferred = $q.defer();
           return $http.post(host + '/api/ContractServiceDiscount/', fields)
               .success(function (data) {
                   deferred.resolve(data);
               })
               .error(function (data) {
                   deferred.reject(data);
               });
       };
Подписывайтесь, ставьте лайки)
источник