LINUX.ORG.RU
ФорумTalks

[лисп r.i.p.]Замыканиям в Java 7 Быть!


0

0

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

Ознакомится как это будет сделано можно в спецификации собстно замыканий и якобы они будут сильно похожи на FCM.

Краткая справка:

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

Примеры:

//javac
#int(int,int) plus = #(int x, int y) x+y;

//из FCA

//The following example shows the method type to which 
//a static method reference can be assigned:

  List<String> list = ...
  #(int(Object)) ref = list#indexOf(Object);

//The following example creates an anonymous inner method assigned
// to a method type:

  #(void(ActionEvent)) action = #(ActionEvent ev) {
    System.out.println("ActionEvent fired");
  }

//acessing to this
  public class MyClass {
    public void process() {
      #(void(String)) example = #(String message) {
        Logger.log(this, message);
      };
      example.invoke("Logged message");
    }
  }

★★☆
Ответ на: комментарий от Deady

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

О чем вообще столько букв ты родил, если ты так не доказал что анонимный класс понятнее и читаебельнее?

тролить пытаешься?

Тя беспокоят такие оналогии? А тем не менее по уровня маразма шо твоя любофь к анонимным классам , что любофь к 1ц - горькие отклонения, какой уж тут троллинг.

причем тут new Object()? не уходи от темы.

Это была аналогия, но ты как обычно кроме онанимных классов ничего не видишь, и таки, что там про объект функции?

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

Сам спросил сам и ответил, а еще ссылка на функцию, карринг и прочие затейства.

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

какя мысль? ты сравни сколько информации лишней несет твой онанимный класс, и сколько ссылка на метод и удобство работы со всем этим. Тут например даже элементарная фабрика пишется веселее, тыб как описывал интрефейсом конструктор класса?

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

сколько лишней информации? наверно нисколько, если не смотреть в jvm. а то что в коде это смотрится излишне, так зато получаем пряник в виде compile-time проверки и строгой типизации. ява ведь с упором на строгость языка писалась. да и потом, как наследовать методы? тот же адаптер как писать?

вобщем нововведение несет в себе больше сахара, чем чего-то нового. пусть будет, будем пользовать. может я чего и не увидел полезного

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

сколько лишней информации? наверно нисколько, если не смотреть в jvm. а то что в коде это смотрится излишне

О боже, да ты интеллект, попробуй подумать, подсказываю Class+Method(конструктор по умолчанию, toString(), getHash() & etc.)+Method(который нам нужен), это все вместо одного Method. Так что когда пишешь «наверное» лучше бей себя по рукам и берись на 1ц.

получаем пряник в виде compile-time проверки и строгой типизации

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

вобщем нововведение несет в себе больше сахара

В общем ты нихрена не читал, не думал, и воще шо ты тут делаешь, пишель букавы?

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

онструктор по умолчанию, toString(), getHash() & etc.)+Method(который нам нужен), это все вместо одного Method

то есть замыкание - не объект и лишено этих методов? то есть reflection к нему не применить? нахрен оно тогда нужно?

Так что когда пишешь «наверное» лучше бей себя по рукам и берись на 1ц.

опять в лужу, свой тон можешь себе оставить

как ты интерфейс на конструктор (и любые другие методы класса, в т.ч. статические) будешь делать, умник?

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

и что там с адаптером?

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

>макросы это надязыг для надмозга?

Нет - это орех, который тупым белкам не по зубам =)

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

блин,

то есть замыкание - не объект

ты проявил свой интеллект опять, подсказываю Method сам по себе имеет эти методы (дя, да).

опять в лужу, свой тон можешь себе оставить

Чувак, лужу занял ты, там даже плюнуть некуда, все в твоих умных мыслях.

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

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

и что там с адаптером?

ты написал уже интерфейс конструктора чудик? Когда напишешь, тогда начнешь изучать одаптеры.

все спи спокойна, пусь те приснится сисястая бельчиха

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

пля, вот ты тупой. ты кроме слов фабрика, шаблон хоть что то знаешь? НАКУА мне интерфейс конструктора? НУ НАКУА? где та ситуация, в которой это полезно?

Далее, какой Method? причем тогда твое утверждение, что функция не объект? Или ты пытаешься намекнуть что замакание сделают оберткой вокруг Method, но незнание языка тебе не дает это сделать?

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

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

>пруфлинк, орешек ты наш, завтра посморю на тебя

Какой в жопу профулинк?!!! В JVM нет окромя классов ничего и не предвидится. Едва-едва invokedynamic пропихнули в семёрке, да и то глянешь в ASM-е на использование - волосы дыбом встают. Каким хером они будут делать маскарад классов из типов этих «функций» - хз.

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

>В JVM нет окромя классов ничего и не предвидится.

А можно поподробнее? Не флейма ради. Просто мне жутко интересно.

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

ну тупая белка - по ссылкам из новости и написано, что ничего кроме интерфейсов не будет - даже тип функции как first-class не будут делать. От треска ореховой скорлупы глаза по-вылазили?!

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

>А можно поподробнее? Не флейма ради. Просто мне жутко интересно.

Да как-бе куда подробнее? На уровне JVM (вернее - байткода) изменений вообще никаких пока кроме уже сделанного invokedynamic не планировалось - всё остальное сахар синтаксиса.

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

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

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

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

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

В JVM нет окромя классов ничего и не предвидится

бугага, в яве есть тривиальные типы (int, char и т.п.) ты слил.

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

пля, вот ты тупой.

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

НАКУА мне интерфейс конструктора?

Тыж е знаешь ответ:

пля, вот ты тупой.

Далее, какой Method?

Ты школота, reflection не знешь? Бугага.

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

охохо, лоровский метаноид на третьем своем высере в треде решил пройти по ссылкам, охохохо. Осталось еще олуха Deady заставить туда сходить и моя миссия выполнена.

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

Да, будет полезно (только замыкания были и раньше, но в извращенной форме костылей), причем я уже упоминал, что для функциональных языков и прочей дряни есть JSR 292, в рамках которого и будут улучшены замыкания, однако члесты которые даже по ссылкам не ходили тут изрядно поиспражнялись в представлении себя специаглистами.

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

Ты школота, reflection не знешь? Бугага.

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

ты так и не ответил про интерфейс конструктора.

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

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

>...решил пройти по ссылкам

да я перепугался - может действительно что нового добавили... А там обычный сахар

...что для функциональных языков и прочей дряни есть JSR 292


в котором кроме invokedynamic есть только сахар, сахар и ещё раз сахар. Диабет не боишься заработать?

бугага, в яве есть тривиальные типы (int, char и т.п.) ты слил.


ну не кажись тупее чем ты есть - каким боком замыкания и функциональные типы к простым типам? Код (методы, исключения и все прочие «навороты») организован исключительно через классы, и в этом плане никаких изменений не предвидится.

И я не представляю как они это «Closures for Java (v0.6a)» именно в таком виде реализуют в JVM - простыми типами параметризировать классы нельзя. В такой степени они VM не переделают, а значит либо ограничатся классами, либо будут «насиловать» сигнатуры и аннотации (либо введут дополнительные атрибуты).

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

в котором кроме invokedynamic есть только сахар, сахар и ещё раз сахар. Диабет не боишься заработать?

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

каким боком замыкания и функциональные типы к простым типам

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

В такой степени они VM не переделают, а значит либо ограничатся классами, либо будут «насиловать» сигнатуры и аннотации (либо введут дополнительные атрибуты).

Не тупи.

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

йоп. тупень. ты свой интелект в туалете джемонстрируй. рефлекшн я знаю

риальне поцанчик? хохо, так вот ты какой java monkey

я и спрашиваю, какой прок от функции-не-объекта.

С какого перепуга экземпляр класса Method перестал быть объектом?

короче, ты просто юный онанист, который решил подрочить на сахар.

Чувак, твои аргументы делают тебя только глупее.

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

>в сях по сравнению с ассемблером только сахар

по сравнению с машкодами - да

ты прометанировал на весь лор, что в яве вообще нет ничего крмое классов


я имел в виду код (уточню чтоб и дальше не придерался - байткод). Ладно, виновен в неуточнении.

Не тупи.


Ага, любимый аргумент тупой бешеной белки

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

по сравнению с машкодами - да

Крута, ты себя сам загнал в логическую яму. Обратися к какомунить источнику: http://ru.wikipedia.org/wiki/Синтаксический_сахар

И теперь скажи самому себе (тут можешь не отвечать) является ли появление такой вещи как «Тип метод» (т.е. '#int(int,int)'), синтаксическим сахаром, и как это заменить средствами явы в нынешней версии (а лучше реализуй, ага)?

Ага, любимый аргумент тупой бешеной белки

Не лучше не хуже остальных в этом треде.

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

Эмм, тип метода звучит кучеряво, в общем вот код, не озадачивайся его смыслом, просто попробуй сделать такое:

Map<String, #Node(String)> ctors = new HashMap<>();
ctors.put("org.project.Node", Node#(String));
ctors.put("org.project.User", User#(String));
ctors.put("org.project.Post", Post#(String));

//Post наследует Node
Node p = (Node)ctor.get("org.project.Post")("firstPost");
но стандартными средствами, с проверкой типов, но без reflection (да, да)

wfrr ★★☆
() автор топика

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

По теме топика: это не надо. Тупой синтаксический сахар, приятный лишь новичкам. Присоединяюсь к высказыванию выше, что анонимные классы отлично читабельны, к ним все давно привыкли и они полностью всех устраивают. На кой было поднимать кипиш с замыканиями - непонятно.

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

>Обратися к какомунить источнику: http://ru.wikipedia.org/wiki/Синтаксический_сахар

И что? Типизация классов и методов в 5-ке - сахар. А без них Java практически 1:1 является «читабельным» аналогом байткода, почти ассемблером для JVM.

является ли появление такой вещи как «Тип метод» (т.е. '#int(int,int)'), синтаксическим сахаром


чем это отличается от

interface III { int invoke(int i, intj); }?

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

>просто попробуй сделать такое

и чем это отличается от пачки интерфейсов и [вложенных] анонимных классов? Более того, именно так и будет реализовано. И что это тогда если не сахар?

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

>господа выше, я уверен, не программируют на джаве

за еду - нет

прибежали от пыхапистов


его совсем не знаю

вас конечно смешно читать, но уже надоело.


стараешься тут ради него, а он ещё не доволен. Не нравится - не ешь.

Тупой синтаксический сахар


не всем это понятно

yyk ★★★★★
()
Ответ на: комментарий от wfrr
class Node {
    Node(String param) {
    }
}
class Post extends Node {
    Post(String param) {
        super(param);
    }
}

class NodeFactory {
    public Node newInstance(String param)  {
        return new Node(param);
    }
}

class PostFactory extends NodeFactory {
    public Post newInstance(String param)  {
        return new Post(param);
    }
}

class Check {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        Map<String, NodeFactory> ctor = new HashMap<String, NodeFactory>();
        ctor.put("Node", new NodeFactory());
        ctor.put("Post", new PostFactory());

        Node p = ctor.get("Post").newInstance("firstPost");
    }
}

с рефлекшеном конечно будет намного более гибко и красиво.

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

И что? Типизация классов и методов в 5-ке - сахар. А без них Java практически 1:1 является «читабельным» аналогом байткода, почти ассемблером для JVM.

чуувак, ты, настолько умен, что твой IQ в минусе, тыже сам сказал что чтобы в языке не сделали - это с твоей точки зрения будет сахар над асмом (байткодом), я те кинул ссылку подтверждающую твой диагноз - «неизлечим», а ты пройдя поссылке все не уймешься.

чем это отличается от

interface III { int invoke(int i, intj); }?

амозглик, тем что это не оно, вкуряешь? Даже в твоем любимом байткоде.

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

и чем это отличается от пачки интерфейсов и [вложенных] анонимных классов?

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

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

Крют, мужик, у тебя получается в два раза больше классов, дохрена больше кода, все это ведет к ошибкам, и тормозам.

с рефлекшеном конечно будет намного более гибко и красиво.

С рефлекшеном ты будешь в ручную реализовывать типизацию, и статической типизации уже не будет, ога. Тормозов будет больше. Можешь накидать полностью оналогичный вариант, в доказательство идиотской мысли что эт овсе сахар?

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

Тупой синтаксический сахар, приятный лишь новичкам.

Сколько ты языков знаешь деточка? И да, не сравнивай сахар с собой.

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

>Крют, мужик, у тебя получается в два раза больше классов, дохрена больше кода, все это ведет к ошибкам, и тормозам.

А с чего ты взял, что в итоге из твоего кода в class-файлах не будет аналога от Deady? Тебе голоса нашептали? По ссылкам ни слова на счёт нововведений в байткоде, но лишь подтверждения, что в результате получим кучу сгенерированных интерфейсов и классов.

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

>тыже сам сказал что чтобы в языке не сделали - это с твоей точки зрения будет сахар над асмом (байткодом)

то, что они предлагают - это уже «сахар над сахаром» :) Т.е. для Java это сахар (как дженерики), а для байткода - уже нет, ибо «напрямую» в байткод не отображается - только через генерацию кучи дополнительных классов.

тем что это не оно, вкуряешь? Даже в твоем любимом байткоде.


про планирующиеся изменения в байткоде - ни слова. Так чем именно оно будет различаться?

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

Крют, мужик, у тебя получается в два раза больше классов,

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

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

>я те рюсским языком написал, реализуй

только по предоплате, да и русский у тебя как из тупой белки программист

в новом виде гибче


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

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

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

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

то, что они предлагают - это уже «сахар над сахаром» :)

То что ты говоришь - это клиника. Определение сахара я тебе приводил, но ты продолжаешь срать.

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