четверг, 27 марта 2014 г.

Ошибочка тут у нас

Неожиданное продолжение поста про лямбды.

Допустим, что есть интерфейс:
    interface I<T> {
        public T m(T value);
    }
и есть реализация этого интерфейса:
    I o = new I<Integer>() {
        @Override
        public Integer m(Integer value) {
            return value++;
        }
    };

IDEA подсветила выражение, предложив использовать лямбды. После чего, рефакторинг в одно нажатие изменил код так:
    I<Integer> l = value -> value++;

А теперь допустим, что в одном и том же методе существуют обе эти реализации. Как вы думаете, какие числа напечатаются?
    System.out.println(o.m(1));
    System.out.println(l.m(1));

Welcome to λ-hell!

Интерпретатор

Совместное нахождение под снегом долгие зимние месяцы - серьёзное испытание даже для самых близких друзей; Йывень и Хвайда не стали исключением из этого правила.

Хвайда была уже достаточно раздражена тем, что её долговязая соседка молча танцевала по каморке, размахивая руками и ногами перед самым носом Хвайды. Но её терпение закончилось в тот день, когда Йывень поставила электрический гучжэн* в центре комнаты и начала на нём играть. Точнее, начала неумело дёргать за струны, получая серию неблагозвучных, немелодичных, неритмичных звуков. Интерлюдия длилась минуту, после чего Йывень села и стала что-то записывать. Но потом она встала и повторила своё выступление.

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

"Что", - прорычала Хвайда, - "ты делаешь?"

Несколько бумаг Йывень слетели на пол. Хвайда схватила их. Это были распечатки алгоритма быстрой сортировки, реализованного на разных языках: C, Lisp, Perl, и даже Prolog. На каждом из них красными чернилами были начертаны ноты.

"Тысяча извинений за мою грубость", - сказала Йывень. - "Я пыталась закодировать алгоритмы в виде движений в пространстве или записей в воздухе. Если этот результат не радует, то я сменю кодировку и попробую ещё раз".

"Зачем?" - спросила Хвайда.

"Чтобы увидеть, что я обнаружу, делая это", - ответил Йывень. - "Мы часто говорим о красоте или элегантности кода. Возможно, не зная об этом, мы уже составили хореографию танца по информации, и мы находим некоторые вещи приятными, так как они взывают к некоему глубокому эстетическому чувству, общему для других форм человеческого искусства. Если это так, то такое искусство можно добавить. Я ищу эту связь".

Хвайда задумалась.

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

В ответ Хвайда достала две ватных затычки из своей тумбочки и засунула их в уши. Йывень поклонилась и вернулась к своему инструменту. Таким образом, мир был восстановлен.


* Я полагаю, что гучжэн звучит примерно так.

Original: Interpreter

Переезд

Даже небольшой переезд с этажа на этаж - это хороший повод прибраться в труднодоступных местах, разобраться в хламе и повыкидывать ненужное. I like to move it, move it...