LINUX.ORG.RU

Прототип замыканий (closures) в языке Java поддерживает все пункты спецификации

 , , , , , ,


0

0

Об этом сообщает в своем блоге Нил Гафтер ( http://gafter.blogspot.com/ ).

Пикантость ситуации придает тот факт, что Гафтер долгое время работал ведущим инженером (senior staff engineer) в Sun Microsystems, участвуя в реализации явы с версии 1.4 по 5.0.

После этого Гафтер перешел в компанию Микрософт, где и работает в настоящее время над языками dotnet. Тем не менее, в свободное время Гафтер участвует в развитии языка Java, как он сам пишет для того, чтобы "сбалансировать свою жизнь" (To balance his life).

>>> Спецификация замыканий в яве

Ответ на: комментарий от anonymous

> Как я понял из объяснения

> Тогда в C это можно просто заменить define-ом.

Я бы сказал, что ты понял неправильно.

tailgunner ★★★★★
()

Похоже, что SUN пошла на поводу масс быдлокодеров: добавляет возможности, которые, ИМХО, принципиально противоречат философии и стилю Java. Ведь с точки зрения быдлокодера C# лучше Java потому, что там больше всяких (ненужных) фич.

Fice ★★
()
Ответ на: комментарий от sur02111976

а вот когда метод какого-то объекта надо передать другому объекту для последующего вызова в случае чего - это надо. Помню в билдере даже слово такое было __closure__ для обеспечения такой возможности. Вроде даже в плюсовый стандарт собирались вводить. Чем дело кончилось ? Кто в курсе ?

sur02111976
()
Ответ на: комментарий от sur02111976

Re^2: Прототип замыканий (closures) в языке Java поддерживает все пункты спецификации

> Замыкания не нужны. усложняют понимание кода.

Да-да, а вагон и маленькая тележка микроклассов код ниибаццо упростят. Жги ещё!

> Не пользуюсь в принципе и не видел надобности никогда.


А может просто не осилил?

gaa ★★
()
Ответ на: комментарий от sur02111976

Re^2: Прототип замыканий (closures) в языке Java поддерживает все пункты спецификации

> а вот когда метод какого-то объекта надо передать другому объекту для последующего вызова в случае чего - это надо. Помню в билдере даже слово такое было __closure__ для обеспечения такой возможности. Вроде даже в плюсовый стандарт собирались вводить. Чем дело кончилось ? Кто в курсе ?

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

gaa ★★
()
Ответ на: комментарий от sur02111976

>Замыкания не нужны. усложняют понимание кода.

Сабжевыми замыканиями можно пугать сишников, сам ужаснулся, но тоже из схемы развеяло мои страхи и мир стал светлее.

wfrr ★★☆
()
Ответ на: комментарий от anonymous

>Тогда в C это можно просто заменить define-ом.

Нет. Т.к. define используется исключительно во время препроцессинга (даже не компиляции). А замыкания - штука динамическая.

Замыкания можно заменить с помощью шаблона Functor, но замена не совсем равнозначная.

>Никаких функциональных преимуществ нет

Ну, в императивных языках преимущества скорее нотационные.

Macil ★★★★★
()

Кстати, ещё одна хорошая вещь: до кучи к замыканиям введут ещё и укороченные их варианты:

Можно будет написать что-то типа

withLock(lock) {
System.out.println("hello");
}

вместо длинного нечитабельного

Locks.<throws IOException|NumberFormatException>withLock(lock, {=>
System.out.println("hello");
});

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

gaa ★★
()
Ответ на: комментарий от anonymous

Не программируй больше. Для программирования требуется уровень интеллекта чуть повыше, чем у тебя.

anonymous
()
Ответ на: комментарий от anonymous

> А кто-нибудь может объяснить на пальцах, что есть замыкания (closures) и, главное, какое преимущество от их использования?

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

anonymous
()
Ответ на: комментарий от anonymous

> Как я понял из объяснения, это просто для упрощения написания программ. Никаких функциональных преимуществ нет. Так?

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

> Тогда в C это можно просто заменить define-ом.

Нельзя. Логика замыканий весьма сложная, препроцессор не способен выделить список свободных и связанных переменных в подвыражениях и из пересечения этих списков создать определение структуры, функции инициализации и функции исполнения. Это можно только на уровне компилятора сделать.

anonymous
()
Ответ на: комментарий от sur02111976

> Замыкания не нужны. усложняют понимание кода.

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

> Не пользуюсь в принципе и не видел надобности никогда.

Ты, вероятно, недостаточно умный и недостаточно профессиональный программист.

anonymous
()
Ответ на: комментарий от anonymous

> Ты, вероятно, недостаточно умный и недостаточно профессиональный программист.

Пиписькомерка рулит! :D

Bohtvaroh ★★★★
()
Ответ на: комментарий от anonymous

Оккама с его бритвой на вас нет!

Замыкания - костыль. Причем костыль не к языку, а для хромых программистов, которые не могут нормально мыслить в терминах одной парадигмы, потому что ни одной до конца не понимают и логики языка не чувствуют.

> Ты, вероятно, недостаточно умный и недостаточно профессиональный программист.

Возможно, он хороший проектировщик.

anonymous
()
Ответ на: комментарий от anonymous

Re^2: Прототип замыканий (closures) в языке Java поддерживает все пункты спецификации

> Оккама с его бритвой на вас нет!

> Замыкания - костыль. Причем костыль не к языку, а для хромых программистов, которые не могут нормально мыслить в терминах одной парадигмы, потому что ни одной до конца не понимают и логики языка не чувствуют.


Раздутый, написанный по правилам объектной парадигмы (а ведь она имеется в виду) код никому не нужен: и охватить его взглядом сложно и поддерживать.

>> Ты, вероятно, недостаточно умный и недостаточно профессиональный программист.


> Возможно, он хороший проектировщик.


А может хороший дворник? Или слесарь?

gaa ★★
()
Ответ на: комментарий от anonymous

>Замыкания - костыль. Причем костыль не к языку, а для хромых программистов

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

И последнее, ИМХО сабж - синтаксический сахар для конструирования шаблона Functor.

Macil ★★★★★
()
Ответ на: комментарий от anonymous

> Причем костыль не к языку, а для хромых программистов, которые не могут нормально мыслить в терминах одной парадигмы, потому что ни одной до конца не понимают и логики языка не чувствуют.
А что - программист должен в молодости принести клятву верности одной парадигме - и всю жизнь использовать только ее?

Да, жабка постепенно становится многопарадигменным языком. Во всяком случае, старается. У этого есть плюсы и минусы. Мне это скорее не нравится, чем нравится. Но есть люди, которые будут рады использовать новые возможности - у некоторых наверняка это даже будет получаться красиво;)

svu ★★★★★
()
Ответ на: комментарий от sur02111976

Замыкания нравятся гламурным, которым платят не за программы а за учебники. Они типа от кутюр, моду создают. Вот счас создали моду на замыкания и ФП, быдлокодеры ломятся читать PCL, хотя профита нам с этого 0

Лушче в SQL разбирались

anonymous
()
Ответ на: комментарий от svu

> Да, жабка постепенно становится многопарадигменным языком.

В общем, да. Но я бы предпочел чистый Java и многопарадигменный Scala. А причина пихать все эти возможности непосредственно в Java - конкуренция с C#. Большинство недалеких программистов ведь выбирут тот язык, в котором всяких модных возможностей количественно больше.

anonymous
()
Ответ на: комментарий от anonymous

Ты быдло. Замыкания появились гораздо раньше, чем всякие там гламурные классы да объекты.

anonymous
()
Ответ на: комментарий от Macil

>Кроме того, нужность замыканий при текущем состоянии явы мне представляется сомнительной.

Очень зря.

>Либо мы объявляем "все есть объект" и делаем "обычные" функции с блекдж^W замыканиями и поддержкой оптимизации хвостовой рекурсии, ибо явские методы в силу чисто нотационных причин не очень удобно использовать в виде объектов первого класса, либо уж не множим и без того многие сущности.


Каррингом и выводом типов. Нормально - BGGA существенно облегчаю жизнь.

r ★★★★★
()
Ответ на: комментарий от anonymous

> Замыкания - костыль.

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

> Возможно, он хороший проектировщик.

Да нет, он ламер. Редкостный. Да и ты ламер, редкостный.

anonymous
()
Ответ на: комментарий от anonymous

Re^2: Прототип замыканий (closures) в языке Java поддерживает все пункты спецификации

> Замыкания нравятся гламурным, которым платят не за программы а за учебники. Они типа от кутюр, моду создают. Вот счас создали моду на замыкания и ФП, быдлокодеры ломятся читать PCL, хотя профита нам с этого 0
> Лушче в SQL разбирались


Сразу видно матёрого быдлокодера с сединою на висках.

gaa ★★
()
Ответ на: комментарий от anonymous

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

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

anonymous
()
Ответ на: комментарий от sur02111976

> а вот когда метод какого-то объекта надо передать другому объекту для последующего вызова в случае чего - это надо.

Передавай. Только через интерфейс. И работает и уже сейчас.

VoDA ★★
()
Ответ на: комментарий от anonymous

> Возможно, он хороший проектировщик.

Собачих будок.

r ★★★★★
()
Ответ на: комментарий от svu

Re^2: Прототип замыканий (closures) в языке Java поддерживает все пункты спецификации

> Да, жабка постепенно становится многопарадигменным языком. Во всяком случае, старается.

Уже можно проводить конкурсы на самый непонятный код на жабе? :)

gaa ★★
()
Ответ на: комментарий от anonymous

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

Большинство недалеких программистов будут гундеть что им претит развиваться. Лично мне надоело для сортировки чего либо заниматься наследованием или мрачной фигней типа
new Comparator<X>() {
public boolean compare(X x, X ,y) {
return ...;
}
}

вместо {x,y => x ... y)}

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

r ★★★★★
()
Ответ на: комментарий от anonymous

Самый объектастый язык смолтолк принципиально построен вокруг замыканий. Их там было есть и будет есть и если бы их небыло - небыло бы языка.

r ★★★★★
()
Ответ на: комментарий от r

>Самый объектастый язык смолтолк

И еще самая Ъ реализация ООП - CLOS...

Macil ★★★★★
()
Ответ на: комментарий от anonymous

Кстати, кто-нить знаёт как там дела с traits ? И в мире JVM и в мире CLR ? Вроде в scala были, но хотелось бы ещё чего-нить из CLR.

anonymous
()
Ответ на: комментарий от anonymous

>Подкину ключевых слов из тегов: java, dotnet, microsoft, замыкания

Неа, слова не те и не в том порядке. Подкину я слов: хвостовая рекурсия, оптимизация хвостовой рекурсии, .NET, Nemerle, стэк, boo, python, SICP. Вот, теперь срач начнется. А, да, еще забыл слово: лямбда! Никто не понимает, что это слово значит, но все его говорят, предполагая что волшебным образом программы, написанные на лямбде, начнут работать правильно и самое главное, быстро

anonymous
()
Ответ на: комментарий от anonymous

Лямбда - это то, что помогало Фримену в халф-лайфе спасти мир! Неужели оно не может помочь программисту?

svu ★★★★★
()
Ответ на: комментарий от svu

> Лямбда - это то, что помогало Фримену в халф-лайфе спасти мир! Неужели оно не может помочь программисту?

Ну если за спиной программиста будет стоять мужик с фомкой, то производительность сильно повысится, я думаю :)

anonymous
()
Ответ на: комментарий от anonymous

>А, да, еще забыл слово: лямбда! Никто не понимает, что это слово значит

Я понимаю. Фримен рисовал эту загадачную букву во всех местах, где он токо успел побывать.

А вот на кой чет в CS персонажи может спреить Лябду я не знаю, разве что для лулзов только.

anonymous
()
Ответ на: комментарий от svu

>Лямбда - это то, что помогало Фримену в халф-лайфе спасти мир! Неужели оно не может помочь программисту?

Ты меня опередил, мен.

anonymous
()
Ответ на: комментарий от anonymous

>Замыкания нравятся гламурным, которым платят не за программы а за учебники. Они типа от кутюр, моду создают. Вот счас создали моду на замыкания и ФП, быдлокодеры ломятся читать PCL, хотя профита нам с этого 0

>Лушче в SQL разбирались

Быдло(-кодер?) детектед

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

>Как я понял из объяснения, это просто для упрощения написания программ. Никаких функциональных преимуществ нет. Так?

ЛОЛ детка любой высокоуровневый тюринг-полный ЯП отличается от асма только синтаксическим сахаром.

>Тогда в C это можно просто заменить define-ом.

Жги еще.

Sidrian
()
Ответ на: комментарий от tailgunner

Это-то понятно. При допущении нерастяжимых нитей и абсолютно упругих тел. А как эксепшены-то ловить и где обрабатывать?

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

> При допущении нерастяжимых нитей и абсолютно упругих тел.

Друг, ты форумом не ошибся? :)

> А как эксепшены-то ловить и где обрабатывать?

Ровно так же, как и без замыканий. Замыкание - это такая хитро построенная функция, у нее есть стек, через него распространяются исключения. Или вопрос не об этом?

tailgunner ★★★★★
()

Кстати, в ответ на это http://gzip.rsdn.ru/forum/Default.aspx?mid=3119293&flat=0 и это http://www.linux.org.ru/jump-message.jsp?msgid=3127459&cid=3127845

Вот здесь http://www.gafter.com/~neal/resume.html английским по белому написано, что ушел он из Гугла не "очень давно", а в сентябре, а узнали об этом только на JavaPosse так что новость от 29.09.2008 была правильной и удалена Shaman007 по причине '4.2 Вызывающе неверная информация' незаконно. Новость о том, что Нил ушел в Микрософт в сентябре была новостью ДЛЯ ВСЕГО МИРА!

anonymous
()
Ответ на: комментарий от anonymous

>Ты быдло. Замыкания появились гораздо раньше, чем всякие там гламурные классы да объекты.

Да нет, из вас двоих быдло это ты. Если бы от замыканий был толк, тогда никакого ООП и ООД не потребовалось бы, писали бы код на лямбдах, без всяких мутных объектов

anonymous
()
Ответ на: комментарий от r

>Их там было есть и будет есть и если бы их небыло - небыло бы языка.

И? Ему это не помогло. Тормозной, в 50 раз медленнее жабского, рантайм. Язык не пригоден для промышленного применения а так, для ООД, прототипирования и студней ООП учить

Да и стоит килобаксы

anonymous
()
Ответ на: комментарий от anonymous

>Да нет, из вас двоих быдло это ты. Если бы от замыканий был толк, тогда никакого ООП и ООД не потребовалось бы, писали бы код на лямбдах, без всяких мутных объектов

>Если бы от замыканий был толк, тогда никакого ООП и ООД не потребовалось бы, писали бы код на лямбдах, без всяких мутных объектов

>писали бы код на лямбдах

ЛОЛ, такое ощущение, что человек даже не удосужился прочесть статью на вики что такое замыкания и лямбда-исчисление. А то звучит как "Если бы от математики был толк, тогда никакого ООП и ООД не потребовалось бы, писали бы код на интегналах, без всяких мутных объектов".

Sidrian
()
Ответ на: комментарий от anonymous

>>Их там было есть и будет есть и если бы их небыло - небыло бы языка.

>И?

И это значит, что люди, которые изобрели ООП, считали замыкания полезным свойством ООП-языка. Более того - замыкания изначально не попали в Яву только из-за ограничения на время реализации (Гослинг писАл об этом).

> Тормозной, в 50 раз медленнее жабского, рантайм.

Рантайм жабы вырос из экспериментального рантайма Смолтока.

> Да и стоит килобаксы

Squeak

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.