powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
25 сообщений из 448, страница 17 из 18
Java 8 - уже не совсем Java?
    #39251805
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
        .collect(
                                    Collectors.toMap(
                                            word -> word,
                                            word -> 1,
                                            (count1, count2) -> count1 + count2
                                    )
                            )



можно и более выразительно :

Код: java
1.
2.
  .collect(groupingBy(identity(),counting()))  // identity() === t->t
  .forEach((k, v) -> System.out.println(k +" : " + v));
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251809
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251811
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach
Странно от тебя такое читать. Ты должен был написать, на кой она нужна та Java 8, если и на Java 7 можно всё написать.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251915
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach

9 достаточно скучна .... ничего прорывного , если смотреть на 8 ....

возможно будет стринг в виде ansi строки а не utf , в тех случаях когда все символы ascii . одна оптимизация и перфоманс ...


по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего ... :) ну и так еще по мелочам накидали классов ... хелперов ....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251920
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего
Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251956
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадячто спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach
Странно от тебя такое читать. Ты должен был написать, на кой она нужна та Java 8, если и на Java 7 можно всё написать.
это была шутка юмора.
я против такой скорости обновления, только потому, что не успели опубликовать использования всех тонкостей, одной версии, как уже другая, и всё по новой. пока инфу найдешь, пока исследуешь...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251989
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAtum1по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего
Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная.

Поподробнее можно ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252015
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Поподробнее можно ?
YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252020
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говнопарсер убил ссылки. В общем, на 1:09:07 Куксенко рассказывает про детали реализации.
На 23:38 Шипилев рассказывает о том что в поведении отличий от анонимных классов нет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252110
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Blazkowiczпропущено...

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

Поподробнее можно ?
Она собирается как static метод в том классе где используется ЕМНИП. Но я это тестил на самых ранних
первых версиях Jdk8
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252466
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczГовнопарсер убил ссылки. В общем, на 1:09:07 Куксенко рассказывает про детали реализации.
На 23:38 Шипилев рассказывает о том что в поведении отличий от анонимных классов нет.

ну вроде да - либо вдолженный класс на лету либо метод-хендлер

вообще как сейчас и в каждом конкретном случае нужно смотреть что там будет - самый простой тест :

Взять самую простую ламбду - в виде анонимного класса и ламбы -и декомпельнуть javap - и посмотреть что будет ....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252562
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

@Warmup(iterations = 3)
@Measurement(iterations = 10)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class MicroTest {

    public interface Foo {

        public Object foor();
    }

    @Benchmark
    public Foo inner() {
        return new Foo() {

            @Override
            public Object foor() {
                return "42";
            }
        };
    }
    
    @Benchmark
    public Foo lambda() {
        return () -> "42";
    }
    
    public static void main(String[] args) throws RunnerException {
        
        Options opt = new OptionsBuilder()
                .include(MicroTest.class.getSimpleName())
                .forks(1)
                .build();

        new Runner(opt).run();
    }

}



Код: java
1.
2.
3.
4.
5.
# Run complete. Total time: 00:00:27

Benchmark         Mode  Cnt  Score   Error  Units
MicroTest.inner   avgt   10  6,419 ± 1,052  ns/op
MicroTest.lambda  avgt   10  2,855 ± 0,065  ns/op



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
$ javap -c MicroTest.class 
Compiled from "MicroTest.java"
public class ru.isalnikov.benchmarkfactorial.MicroTest {
  public ru.isalnikov.benchmarkfactorial.MicroTest();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public ru.isalnikov.benchmarkfactorial.MicroTest$Foo inner();
    Code:
       0: new           #2                  // class ru/isalnikov/benchmarkfactorial/MicroTest$1
       3: dup
       4: aload_0
       5: invokespecial #3                  // Method ru/isalnikov/benchmarkfactorial/MicroTest$1."<init>":(Lru/isalnikov/benchmarkfactorial/MicroTest;)V
       8: areturn

  public ru.isalnikov.benchmarkfactorial.MicroTest$Foo lambda();
    Code:
       0: invokedynamic #4,  0              // InvokeDynamic #0:foor:()Lru/isalnikov/benchmarkfactorial/MicroTest$Foo;
       5: areturn

  public static void main(java.lang.String[]) throws org.openjdk.jmh.runner.RunnerException;
    Code:
       0: new           #5                  // class org/openjdk/jmh/runner/options/OptionsBuilder
       3: dup
       4: invokespecial #6                  // Method org/openjdk/jmh/runner/options/OptionsBuilder."<init>":()V
       7: ldc           #7                  // class ru/isalnikov/benchmarkfactorial/MicroTest
       9: invokevirtual #8                  // Method java/lang/Class.getSimpleName:()Ljava/lang/String;
      12: invokevirtual #9                  // Method org/openjdk/jmh/runner/options/OptionsBuilder.include:(Ljava/lang/String;)Lorg/openjdk/jmh/runner/options/ChainedOptionsBuilder;
      15: iconst_1
      16: invokeinterface #10,  2           // InterfaceMethod org/openjdk/jmh/runner/options/ChainedOptionsBuilder.forks:(I)Lorg/openjdk/jmh/runner/options/ChainedOptionsBuilder;
      21: invokeinterface #11,  1           // InterfaceMethod org/openjdk/jmh/runner/options/ChainedOptionsBuilder.build:()Lorg/openjdk/jmh/runner/options/Options;
      26: astore_1
      27: new           #12                 // class org/openjdk/jmh/runner/Runner
      30: dup
      31: aload_1
      32: invokespecial #13                 // Method org/openjdk/jmh/runner/Runner."<init>":(Lorg/openjdk/jmh/runner/options/Options;)V
      35: invokevirtual #14                 // Method org/openjdk/jmh/runner/Runner.run:()Ljava/util/Collection;
      38: pop
      39: return
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252587
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    private Foo cached = new Foo() {

        @Override
        public Object foor() {
            return "42";
        }
    };
    
    @Benchmark
    public Foo inner_cache() {
        return cached;
    }



Код: java
1.
2.
3.
4.
Benchmark              Mode  Cnt  Score   Error  Units
MicroTest.inner        avgt   10  6,395 ± 0,501  ns/op
MicroTest.inner_cache  avgt   10  3,915 ± 0,721  ns/op
MicroTest.lambda       avgt   10  3,330 ± 0,744  ns/op
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39379745
twr143
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered
Код: java
1.
    dictionary.put(token, dictionary.getOrDefault(token, 1));



->
Код: java
1.
    dictionary.put(token, dictionary.getOrDefault(token, 0)+1);
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Java 8 - уже не совсем Java?
    #40045304
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за резкий UP.

Искал где были стримы, доклады и конференции по теме Java. Не нашел. Пускай будет здесь.

Основные инженеры, которые заняты перформансом, компилляторами и GC собрались дать краткий обзор
по текущему состоянию релизов Java8/11/15/16/17.

YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046404
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тебе геттеры? Опять - поддержкать еще один никому не нужный тяжелый фреймворк?
Если фреймворк не осилит рекорды - то значит они ему и не нужны. А мир двигается дальше.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046427
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сеттеры в рекордах? Рекорды же иммутабельные были по определению. В начале по крайней мере.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046434
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

я думаю осилит- вопрос в том сколько все тогда поломается- код то старый нужно поддерживать
поэтому проще все name() написать getName() и все будут счастливы и фреймворки и рекорды взлетят
пока это не юзабельно ибо сериализиторы без гетов не могут объект собрать .
Я не пойму почему рекорд сделали по ломбоковски- типо getter это name() а setter ->name(String name)
это ломает всю систему


тебе нужно попытаться какой-нить кодогенератор или интроспектор написать и ощутить всю боль на себе: у полей префиксы типа is/has несут вполне ощутимую смысловую нагрузку, а когда мы начинаем пользоваться "конвенциями", где для булевских полей у нас геттеры должны называться (is|get)FieldName то сразу сталкиваемся с кучей трудностей. Называть геттеры точно также как и поля - это великая веха в истории жавы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046438
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
Андрей Панфилов


тебе нужно попытаться какой-нить кодогенератор или интроспектор написать и ощутить всю боль на себе: у полей префиксы типа is/has несут вполне ощутимую смысловую нагрузку, а когда мы начинаем пользоваться "конвенциями", где для булевских полей у нас геттеры должны называться (is|get)FieldName то сразу сталкиваемся с кучей трудностей. Называть геттеры точно также как и поля - это великая веха в истории жавы.

попаболь с генерацией булевых полей я уже ощутил на себе
когда какой то му_дак аналитик называет поле isImIdiot - и сразу ломается ломбок тут
по итогу ты судорожно ищешь такие поля и делаешь им ручные гет/сет
getIsImIdion /setIsImIdiot

на счет вехи не уверен- веха эта уже имеется в виде ломбока @Accecor(true)


Не ну твое software кунфу конечно сильное. Попробую в следующий раз бизнесу отписать - фича не может быть реализована, потому что ломбок б...ь
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046443
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

я думаю осилит- вопрос в том сколько все тогда поломается- код то старый нужно поддерживать
поэтому проще все name() написать getName() и все будут счастливы и фреймворки и рекорды взлетят
пока это не юзабельно ибо сериализиторы без гетов не могут объект собрать .
Я не пойму почему рекорд сделали по ломбоковски- типо getter это name() а setter ->name(String name)
это ломает всю систему

Ломбок здесь вообще непричем. По моему скромному мнению records это некие предтечи функционального
программирования в Java. Я не зря поднимал топик о смерти ООП. Но это было просто гипертрофированная
фантастика. Реальность примерно такова. Середина 20-го века прошла под флагом логического и функционального
программирования. Это было время сильной математики. И точных наук. В конце 20 века пришел бизнес.
И программирование стало на службе у обычной бухгалтерской арифметики. Там не нужен был вывод
остаточных процедур и доказательтво свойства у какой-то функции. Нужно было просто еб*шить код.
Много кода. И требования к самим кодерам должны быть снижены. ООП подходил идеально.

Сегодня имеет место процесс переосмысления. Когда программисты ищут нового. Ищут коротких языков.
DSL-подобных. И безопасных. И открылись некоторые предметные области (bigdata/Spark) где свойства ФП
(такие как неизменяемость переменных) дают преимущества. В самом деле. Если переменная с момента
объявления никогда не меняется (это похоже на final в Java но посложнее) то синхронизация с ней
черезе synchronized или другие API становится ненужной. В самом деле. Потоки всегда видят одно
value. Уходит целый пласт проблем гонок и голоданий в мультипоточке. Уходят ошибки (code-smells) повторного
использования переменной в методе в другой роли. Об этом часто пишут Фаулер и дядко Боб.

И это только вершина айсберга. Настоящее ФП постулирует также неизменяемость коллекций.
Отсюда кстати вытекает одна важная рекомендация в использовании Java Streams которую джависты
обычно нечитают и не понимают зачем она. В ФП (Scala) декларирован генерик Stream[A]/LazyList[A] который
програмным образом позволяет создать бесконечные коллекции. Коллекции с отложенной инициализацией.
Генераторы. В спарке работа с RDD очень напоминает чистое ФП хотя сами по себе RDD происходят
как исторический срез какой-то базы данныз.

Конечно взамен мы получаем новые вопросы. Как - использовать в цикле Java-Records? Как декларировать
что Stream - ленивый и бесконечный. Но это будет некое итеративное развитие спецификации языка.

Насколько я вижу - главные идеологи JLS - очень осторожны в этом смысле.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем идут такие тектонические изменения, что обсуждать Spring и Lombok неинтересно.
Они - просто бюрократический обвес.

Будет менятся мышление разработчиков.

P.S. Да конечно ООП останется. Никто его не уберет. Мультипарадигменность - будет важнее чем культ Спринга или Ломбока.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046478
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Атомики решают часть задач мультипоточки.

Могу придумать задачу, которую ты не решишь только на них.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046763
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только мало понятно, что же за задачка такая.
дабы и блокировки и все остальное - реализуются чисто через память. Т.ч. даже атомики вроде избыточны, вполне volatile должно хватать. IMHO AFAIK

не специалист по многопоточке.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048226
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
...
дабы и блокировки и все остальное..
...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048227
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. избыточность != нунжы и востребованы

Ваш К.
...
Рейтинг: 0 / 0
25 сообщений из 448, страница 17 из 18
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]