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).

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

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

Предидущая новость на эту тему была все-таки не совсем верной.

> Еще один из блистательной плеяды разработчиков Java покинул команду и ушел к новому работодателю, Microsoft.

Ушел давно, судя по тому, что участвовал в работе над 5.0

> Чем он будет там заниматься и что развивать?

Он сам пишет, что *уже* работает on the dotNet platform languages.

> Справедливый вопрос, учитывая, что C# уже имеет в своем составе замыкания, которыми Гафтер занимался в openjdk

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

www_linux_org_ru ★★★★★ ()

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

Но при этом анонимус, автор изначальной новости, навел на интересную личность, плюс к тому спецификация замыканий в яве тоже интересна.

www_linux_org_ru ★★★★★ ()

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

Хм, в яве нет замыканий?

anonymous ()

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

Синтаксис ввел меня в дебри конгитивного диссонанса, это писец.

wfrr ★★☆ ()

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

> участвуя в реализации явы с версии 1.4 по 5.0.

Машина времени? :=Ё Не 5.0, а 1.5 (!)

DOKA ()

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

>Машина времени? :=Ё Не 5.0, а 1.5 (!)

Да нет, всё пральна, с версии 1.5 новая нумерация релизов. Сейчас версия Java 6.0 1.6.0, была Java 5 1.5.0, будет Dolphin Java 7 1.7.0. 1.6.0, 1.7.0 это =внутренняя= нумерация, для разработчиков, а для простых людей 5, 6, 7, 8...

anonymous ()

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

>Но при этом анонимус, автор изначальной новости, навел на интересную личность, плюс к тому спецификация замыканий в яве тоже интересна.

А как же ты искал, что вот этой ссылки не увидел http://www.artima.com/forums/threaded.jsp?forum=121&thread=239398 Йа так и не понял, зачем Нил делает презентацию для некрософт о языках в JavaVM? Они стратегию .NET Framework выбирают?

anonymous ()

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

Нил вначале перешёл в Гугл, а уже потом в Microsoft. В последнем JavaPosse можно послушать комментарии его самого.

С кложерами много вопросов - Chief Java Architect в Google Джошуа Блох(=> в JCP от компании тоже он), но он не поддерживает предлагаемые Нилом кложеры, вместе с Бобом Ли(Guice, Android) & Дугом Лиа(Threads on JVM, fork-join framework) они предлагают альтернативу CICE(более простой синтаксис для анонимных классов).

anonymous ()

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

замыкания - для тупых быдлокодеров, обычные метки рулят!

anonymous ()

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

Бля, зачем делать замыкания "лишь бы было"? Они хороши читабельностью и уместностью, а тут какое-то синтаксическое безумие.

anonymous ()

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

эти трое гонят. CICE требует обявления конкретного интерфейса. BGGA соответствия сигнатуре. BGGA - лучше. Если добавить немножко вывода типов - будет вообще кроткословно насколько это возможно в жабе. А CICE требует инстанциации конкретного интерфейса - что приведет к куче оберток. Невозможно например бутет написать нормальный map или foldl/r - надо будет объявлять интерфейс и имплементировать его что явно бред.


r ★★★★★ ()

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

Хочется в очереднйо раз процитировать фразу услашанную в одном из серии фильиов про силиконовую долину: "Микрософт всегда приходит на вечеринку последним, но задерживается там дольше всех".

Микрософт сманивает сотрудников Сан, Гугл, пичкая им в карманы тоннобаксы еще на пороге собеседования и постоянно бурча: "мы все купим, мы все равно все купим, а не купим так скопируем, мы все равно все скопируем".

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

anonymous ()

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

>Машина времени? :=Ё Не 5.0, а 1.5 (!)

http://www.google.ru/search?client=opera&rls=ru&q=%22java+5.0%22&...

KRoN73 ★★★★★ ()

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

Ура. Корову оседлали. Зачем только корове это седло нужно?

anonymous ()

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

Нихрена не понял что там по ссылке, это же невозможно читать. Что за хрень?!

Кто-то на erlang возбухал, мол синтаксис ужасный, да вот только код на erlang по сравнению с ЭТИМ просто стихотворение написанное калиграфическим почерком.

Oceanborn ()

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

Мда, я особо не разбирался подробно, но по ссылке намутили что-то страшное. :-X Синтаксис - ахтунгЪ.

Bohtvaroh ★★★★ ()

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

Нормальный синтаксис. Примеры на Хаскеле почитайте - там всё позаковыристей будет.

tailgunner ★★★★★ ()

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

Вон нарисовано. Без свободных переменных. Хочешь перепиши так:

final int x = 5;
{int y => x + y}

Полегчает?




r ★★★★★ ()

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

что такое ЗАМЫКАНИЯ , ктонить вообще может ответить? %) %) %)

// p.s.: программирую на c++98 ..

anonymous ()

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

Симпатично, но из стиля джавы выбивается, индусы не оценят. Кому нужны замыкания и джава - используют scala.

Legioner ★★★★★ ()

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

> что такое ЗАМЫКАНИЯ , ктонить вообще может ответить? %) %) %)

не позорь себя и людей своим PS-ом для начала, посмотри гугл.

Displacer ★★ ()

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

в том смысле, что уровень образования достаточный, чтобы самому найти информацию.

Displacer ★★ ()

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

>Я могу. > >// wikipedia

вот сдесь?: http://ru.wikipedia.org/wiki/Замыкание_(программирование)

.. тогда дело плохо ..:

.. тут не сказанно ни про какие "=>" , а всеголишь рассказано про всякие lambda-функции (или чтото похожее( па замыслу) на них)..

anonymous ()

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

>> что такое ЗАМЫКАНИЯ , ктонить вообще может ответить? %) %) %)

>не позорь себя и людей своим PS-ом для начала, посмотри гугл.

мне пофигу -- я ананим :D :D :D :D ..

anonymous ()

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

5 ряз прочитал фикипедию и осталось такое ощщущение что лямбда функции -- это и есть замыкания %) .... (ну илиобъектные функции (с перегруженным оператором"()") )

anonymous ()

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

>такое ощщущение что лямбда функции -- это и есть замыкания %)

а пространство имён, доступное этой функции?

p.s. в голове мелькает, что-то про замкнутые формулы, в которых нет свободных переменных... но это не по теме

dimon555 ★★★★★ ()

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

http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8...)

Java релизует концепцию замыкания с помощью анонимных классов.

Т.е. в Java уже есть замыкания.... чего же еще надо ?

anonymous ()

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

> Т.е. в Java уже есть замыкания.... чего же еще надо ?

нормальный синтаксис и автоматическое генерирование обёрток для захвата переменных.

anonymous ()

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

> 5 ряз прочитал фикипедию и осталось такое ощщущение что лямбда функции -- это и есть замыкания %) .... (ну илиобъектные функции (с перегруженным оператором"()") )

Они просто обычно взаимосвязаны.

int x = 5; Func<Int32, Int32> func = (y) => { return x + y; };

var r1 = func(1); x++; var r2 = func(1);

r1 == 6 r2 == 7

здесь func - это лямбда функция, которая завхватывает переменную x и звнешнего контекста

anonymous ()

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

А это что Func<Int32, Int32> ? Тип возвращаемого значения? Ну и где там Func<Int32, Int32>?

anonymous ()

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

>Т.е. в Java уже есть замыкания.... чего же еще надо ?

Нормальные замыкания.

r ★★★★★ ()

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

Это функция с одним аргументом типа Int32 и возвращаемым значением типа Int32.

PS: Прочитай уже википедию.

r ★★★★★ ()

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

>Примеры на Хаскеле почитайте - там всё позаковыристей будет.

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

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

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

Macil ★★★★★ ()

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

> А это что Func<Int32, Int32> ? 
> Тип возвращаемого значения? Ну и где там Func<Int32, Int32>?

Вот более реалистичный пример (Nemerle)

def gw = urlMap[url];

_ = ThreadPool.QueueUserWorkItem(fun (_object) {
  using(context.Request.InputStream) {
    using (context.Response.OutputStream) {
      try {
        gw.Process(context);
      }
      catch {
        | e =>
          logger.Error($"Error processing request $(e.ToString())");
          context.Response.StatusCode = 500;
      }
    }
  }});
}

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

Да, здесь можно обойтись без замыкания, но классы обёртки придётся делать ручками.

anonymous ()

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

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

PS: По ссылке вычитал parameterized delayed-execution blocks of code. Но всё равно не понятно для чего это.

PPS: Вопрос не ради флейма, а исключительно ради самообразования.

anonymous ()

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

> Они просто обычно взаимосвязаны.

> int x = 5; Func<Int32, Int32> func = (y) => { return x + y; };

> var r1 = func(1); x++; var r2 = func(1);

> r1 == 6 r2 == 7

> здесь func - это лямбда функция, которая завхватывает переменную x и звнешнего контекста

То есть, чтобы теперь ошибки для разработчиков вообще возникали "хрен знает откуда, у меня всё должно быть корректно"??

anonymous ()

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

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

Это функции (возможно, анонимные), которые имеют доступ к локальным переменным другой функции.

> и, главное, какое преимущество от их использования?

Улучшение структуры кода, более краткий и выразительный код.

tailgunner ★★★★★ ()

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

>http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8...)

> Замыкание — это особый вид функции. Она определена в теле другой функции ...

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

anonymous ()

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

Только если в сях вернут указатель на вложенную функцию то будет алярм.

wfrr ★★☆ ()

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

>> Замыкание — это особый вид функции. Она определена в теле другой функции ...

> Правильно я понял, что в C это есть как само собой разумеющееся?

Нет. В Си нет замыканий.

> Если определить блок внутри другого блока кода, то вложенному блоку будут видны все переменные внешнего.

Различие между блоком кода и функцией от тебя ускользнуло?

> Всё равно не понятно, какой от этого плюс.

Долго объяснять. Попробуй почитать SICP.

tailgunner ★★★★★ ()

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

такие closures в java не нужны

Tails ()

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

>А кто-нибудь может объяснить на пальцах

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

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

Полезность замыканий в том, что это "объекты для бедных" или объекты это "замыкания для бедных"?

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

Например, есть у нас функция log(level,message), а мы хотим сдлеать функцию debug(message). Тогда мы делаем примерно следущее (на питоне):

def makeLogger(level):
...def logger(message):
......log(_level,message)
...return logger

debug = makeLogger(DEBUG) info = makeLogger(INFO)
debug("Debug message") info("Info мessage")

У функций (замыканий) debug и logger в вычислительном контексте будет находится level = DEBUG и level = INFO

Глобальные переменные - частный случай замыканий, т.е. у всех есть "глобальный" вычислительный контекст.

В том же самом питоне есть хитрый оператор yield, который тормозит исполнение текущей функции и возвращает ее замыкание.

Это если на пальцах, с нематематической точки зрения.

А с математической точки зрения, у лямбда-терма могут быть связанные и свободные переменные, так вот, с точки зрения функции logger(message) message - связанная переменная, а level - свободная.

Macil ★★★★★ ()

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

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

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

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