Как стать автором
Обновить

Комментарии 27

Перевод сделал из-за того, что мне показался интересным пост, несмотря на непосредственную причастность Brian Goetz к «высоким материям» внутри Oracle. Schouten же человек, на которого я вижу периодические ссылки, т.е. вроде как тоже не последний товарищ в Java-сообществе.
Как вы видите, из-за одних только Лямбда-выражений будет множество оптимизиационных моментов, которыми сможет воспользоваться программист для достижения оптимальной производительности от Лямбда-выражений. Лямбда-выражения сделают жизнь и программирование для мультиядерных машин легче, где фреймворк Fork-Join также даст серьёзную производительность. Я думаю, что все детали проработаны и реализация очень изящна.

Этот текст хоть раз был прочитал, качество перевода ужасно, абзац выше — что угодно, но точно не перевод:

So, as you can see, besides just Lambda expressions, there will be many other optimizations that will allow programmers to optimally take advantage of Lambda expressions. Lambda expressions will also make it easier to write code that is optimized to run on multi-core computers. This is an area where the Fork-Join framework will also provide huge improvements. I've seen some details and the implementation is really smart.
А в чем конкретнее заключается разница между Lambda-выражениями и нынешними SAM? Только в синтаксисе?
Лямбды не могут иметь никаких побочных эффектов, а SAM это обычные методы.
Поэтому лямбды можно оптимизировать как угодно.
я не могу вызвать из лямбды метод? Ведь в методе может быть спрятан побочный эффект.
не можете. Иначе просто не зачем городить огород со всеми этими лямбдами.
хм, а толку от лямбд которые не могут вызывать методы?
Т.е. что нам остается? Только арифметические операции и всё?
А что вам еще нужно?
Вы можете сделать любые вычисления, вообще любые. Просто не можете никуда сохранить результат — это должен сделать метод, который вашу лямбду вызывает. Смысл в том, что лямбда-вычисления уж очень хорошо оптимизируются.
Вообще любые, или таки небольшое подмножество операций — логические и арифметические?
Вы ведь даже 2 строки сравнить не можете без вызова методов!
В конце-концов, посмотрите же примеры из статьи. Там из лямбд нормально вызываются методы.
Не понимаю, батенька, Вы же сами пишите:
people.sortBy(#Person.getLastName);
я не могу в getLastName() написать код который делает System.exit(1) или изменяет состояние объекта?
Вы меня точно не путаете с автором статьи?
Вы можете засунуть в getLastName что угодно, но не сможете собрать из этого лямбду.
Уважаемый, вы что-то серьёзно путаете. Лямбда не обязана быть чистой.
Я так подозреваю, что дело в захвате лексического контекста. Т.е. в Java наконец-то появятся классические замыкания.
Сейчас там есть анонимные классы, но это кажется немножко не то.
Замыкания (closures) в джаве давным-давно есть.
Да, действительно, попутал немного. Просто нужно ставить модификатор final, что бы локальные переменные функции захватывались в замыкание.
присоединяюсь к вопросу. Интересно, это будет просто сахар, или будут какие-то изменения в jvm?
Нет, для ламбда-выражений в jvm ничего специального делать не будут — все будет решаться во время компиляции.
Хотя вообще, рассматривать только ламбда-выражения вне контекста всего проекта Lambda — не совсем правильно: да, ламбда-выражения, по сути, синтаксический сахар, но вот весь проект Lambda в сумме — это подготовка Java к эпохе многоядерных систем.
Пока все изменения — чисто сахар. Где-то даже видел пруф. Да и в статье же написано: лямбды транслируются в SAM-объекты.
Плохо то, что все нововведения в джаве смотрятся как пятое колесо, без единой идеи и унифицированного синтаксиса. Просто как взяли отдельную фичу из груви и засандалили в язык. По этой причине мне больше нравится Scala.
Ну ппц … Ощущение, что лямбды проталкивали те, кто нормальной IDE не пользуются…
теперь я точно знаю, что ничего про будущее Java, не знаю не только я, но и еще непоследние люди в самом Оракле.
Как правильно заметил автор, Оракл не особо публичная компания. Поэтому слово «точно» вообще субъективно для всех, кто не имеет доступа к информации топ-менеджеров.
Да, пост довольно восторженный, но лично я склонен рассматривать не только негативные оценки, но и такие, тем более что идёт ссылка на компетентного специалиста.
Эх, лямбды будут не скоро. Хотя не велика беда. В конце концов, можно уже сейчас использовать Scala, если уж прям хочется языковых фич. Хотя сильно проще от этого жить (по крайней мере мне) не станет.
Нафига интересно в синтаксисе решетка?
Насколько знаю, у создателей ламбда-выражений в Java был настоящий холивар на тему синтаксиса.
В итоге, было решено просто взять и выбрать. И больше не возвращаться к этому вопросу.
в groovy замыкания оборачиваются в фигруные скобки и неясно по какой причине нужно дописывать перед ними #, как в вашем примере
не иначе, помесь groovy и clojure :)
как то неуверенно у вас подсвечен код, бледно
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории