powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложить два числа в Kotlin :)
19 сообщений из 69, страница 3 из 3
Сложить два числа в Kotlin :)
    #39918546
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай посмотрим. Нужен тест. И дамп памяти.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918566
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично мне тест не нужен - у меня просто нет проблем из-за "офигенного футпринта" (по русски - "больших накладных расходов").
Но мне не очень нравится, когда делаются весьма прямолинейные утверждения, которые весьма неочевидны, если "учесть все известные факторы".

P.S.
Тот же CardRayTracer сильно ускоряется на Java 11 в сравнении с Java 8. Байт-код, понятное дело, от Java 8. Но Java 11 научили автовекторизации и JIT сделал то, что лично я не просто не умею, а никогда не буду уметь в обозримом будущем.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918579
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько процентов ускоряется?
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918607
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
andreykaT, не одобряю твою манеру коверкать слова.

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

Не держи в себе короче.

да не, они норм парни. и котлин их норм. идешку их я использую уже лет 5-6. жаль скале так не повезло с промоутом как котлину. мне кажется, скала все-же имеет гораздо более серьезный потенциал чем эта джава с плюшками.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918655
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Leonid Kudryavtsev

У меня чувство, что для каждой лямбды просто создается свой отдельный внутренний класс. Никто не мешал и раньше делать "лямбды" (callback'и), только нужно было самому класс создавать.

Я кажется дизассемблировал лямбду в восьмерке. Получалось что вроде каждая лямбда компилирует в текущем классе
метод в знаком $ в составе имени.

Попробую сегодня уточнить для 11-тки.

По поводу лямбд. Вот выхлоп стандартного javap-дизассемблера (фрагмент)

Код: 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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
         0: iconst_2
         1: bipush        100
         3: invokestatic  #2                  // InterfaceMethod java/util/stream/IntStream.range:(II)Ljava/util/stream/IntStream;
         6: invokedynamic #3,  0              // InvokeDynamic #0:test:()Ljava/util/function/IntPredicate;
        11: invokeinterface #4,  2            // InterfaceMethod java/util/stream/IntStream.filter:(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;
        16: invokedynamic #5,  0              // InvokeDynamic #1:test:()Ljava/util/function/IntPredicate;
        21: invokeinterface #4,  2            // InterfaceMethod java/util/stream/IntStream.filter:(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;
        26: invokeinterface #6,  1            // InterfaceMethod java/util/stream/IntStream.boxed:()Ljava/util/stream/Stream;
        31: invokedynamic #7,  0              // InvokeDynamic #2:apply:()Ljava/util/function/Function;
        36: invokeinterface #8,  2            // InterfaceMethod java/util/stream/Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
        41: invokedynamic #9,  0              // InvokeDynamic #3:accept:()Ljava/util/function/Consumer;
        46: invokeinterface #10,  2           // InterfaceMethod java/util/stream/Stream.forEach:(Ljava/util/function/Consumer;)V
        51: return
      LineNumberTable:
        line 8: 0
        line 9: 11
        line 10: 21
        line 11: 26
        line 12: 36
        line 13: 46
        line 14: 51

  private static void lambda$main$3(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
         0: getstatic     #11                 // Field java/lang/System.out:Ljava/io/PrintStream;
         3: aload_0
         4: invokevirtual #12                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         7: return
      LineNumberTable:
        line 13: 0

  private static java.lang.String lambda$main$2(java.lang.Integer);
    descriptor: (Ljava/lang/Integer;)Ljava/lang/String;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #13,  0             // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/Integer;)Ljava/lang/String;
         6: areturn
      LineNumberTable:
        line 12: 0

  private static boolean lambda$main$1(int);
    descriptor: (I)Z
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
         0: iload_0
         1: iconst_5
         2: irem
         3: ifeq          10
         6: iconst_1
         7: goto          11
        10: iconst_0
        11: ireturn
      LineNumberTable:
        line 10: 0
      StackMapTable: number_of_entries = 2
        frame_type = 10 /* same */
        frame_type = 64 /* same_locals_1_stack_item */
          stack = [ int ]

  private static boolean lambda$main$0(int);
    descriptor: (I)Z
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
         0: iload_0
         1: iconst_3
         2: irem
         3: ifeq          10
         6: iconst_1
         7: goto          11
        10: iconst_0
        11: ireturn
      LineNumberTable:
        line 9: 0
      StackMapTable: number_of_entries = 2
        frame_type = 10 /* same */
        frame_type = 64 /* same_locals_1_stack_item */
          stack = [ int ]
}




Исходник где предположтельно 4 лямбды.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package mayton.algo.roundpoll;

import java.util.stream.IntStream;

public class RoundPoll {

    public static void main(String[] args) {
        IntStream.range(2, 100)
                .filter(i -> i % 3 != 0)
                .filter(i -> i % 5 != 0)
                .boxed()
                .map(i -> "'" + i + "'")
                .forEach(i -> System.out.println(i));
    }

}



Вобщем лямбда реализована как приватный статический метод. Имя - как композит из имени класса и специального
счетчика с долларом. Видимо для предотвращения clashing names.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918656
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, про вопрос перформанса я помню. Надо актуализировать этот чортов Card-Raytracer.
Руки не доходят. Там надо сделать чуть больше действий. Я если уж доберусь до него то и сделаю
чуть больше. Хотя-бы табличку на титульной странице поправить надо,
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918672
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton#22066461, thanks
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918723
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите а в котлине нормальный патернматчинг есть?
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918732
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
На сколько процентов ускоряется?
Пересмотрел свои старые сообщения в "Четверговых акторах".
Тогда это было Java8 vs Java10 - минус, примерно, 25% времени (31-34 секунды против 25-28 секунд).

Тогдашнего сорца не нашёл, взял код Andrew Kensler . Сейчас ничего не менял, только добавил примитивный отсчёт времени.
Получил и увеличение времени и отсутствие разницы: по 38-39 секунд на актуальных OpenJDK 1.8.0_232-b09 и 11.0.5+10.
Проц у меня с тех пор, вроде, не менялся.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918735
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, если мы поднимем на 25% - то мы перегоним clang c AVX-оптимизацией над которой
работал Зяма. Кстате это самая быстрая имплементация этого бенчмарка.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918801
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Basil A. Sidorov, если мы поднимем на 25% - то мы перегоним clang c AVX-оптимизацией
"Закусывать надо".
"Плюс двадцать пять" относилось к Java 8 vs Java 10 на моём компьютере три года назад.
Зачем приплетать сюда "clang с AVX-оптимизацией", если ни тогда ни сейчас с моей стороны не было ни одного слова про другие реализации???
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак у меня статистика как раз по восьмёрке.
И она опубликована.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918913
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
забыл ник
пропущено...

Вот тут не понял - а что мешает то? ФП это как SQL - декларативное описание программы. В какой очередности что-то дергать или выполнять(в том числе в абсолютно императивном стиле) - все идет на откуп движку БД. Но у тебя же не возникает вопроса - что там остается от SQL?

ФП-шность и способность кода собираться через LLVM - это два независимых вектора развития.
Одно другому не мешает. Вот хаскель вроде тоже использует LLVM и ничего.

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

А ну вот домашняя страничка этого поделия
https://scala-native.readthedocs.io/en/v0.3.9-docs/
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918935
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
да не, они норм парни. и котлин их норм. идешку их я использую уже лет 5-6. жаль скале так не повезло с промоутом как котлину. мне кажется, скала все-же имеет гораздо более серьезный потенциал чем эта джава с плюшками.


Scala не повезло не с промотуерами, а немного не правильной стратегией развития.
Т.к. они (Scala) опираются на JVM, то все java-программисты ожидали, что проблем м/у Java и Scala не будет.
Но это оказалось немного не так.
Для тог же Spark пришлось писать отдельное реализация API для Java, которое еще и отставало от API для Scala на ранних этапах.
Потом пересмотрели приоритеты и сказали, что основное API будет для Java.

А так Scala мощный язык, но его мощь его и сгубила.
"Будь проще и люди к тебе потянуться" :-)

ДжетБрейнс фишку просекли и сделали "проще".
Результат не заставил себя долго ждать.

Как минимум на мобилках.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39918939
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
Скажите а в котлине нормальный патернматчинг есть?


Нет и А. Бреслав в своих докладах по Котлин от него отбивается руками и ногами.
Типа это нафиг никому не нужно, а делать очень сложно и вообще не хотим.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39919196
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я уже говорил Java/Kotlin по своему понимают ФП и тащут в свои языки жалкую карикатуру.
Они переварили паттерн матчинг и поняли это как усложнённый switch/case.

Вот (примерно) так выглядит паттерн матчинг в Haskell. Сопоставление аргумента функции с известным промежуточным
результатом свёрток.

Код: plaintext
1.
2.
3.
factorial' 0 = 1
factorial' 1 = 1
factorial' n = n * factorial' (n - 1)
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39919202
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как я уже говорил Java/Kotlin по своему понимают ФП и тащут в свои языки жалкую карикатуру.
Они переварили паттерн матчинг и поняли это как усложнённый switch/case.

Вот (примерно) так выглядит паттерн матчинг в Haskell. Сопоставление аргумента функции с известным промежуточным
результатом свёрток.

Код: plaintext
1.
2.
3.
factorial' 0 = 1
factorial' 1 = 1
factorial' n = n * factorial' (n - 1)



Нормально понимают в скале паттерн матчинг. Отсутвие няшного синтаксиса вызвано рядом причин, основная из которых совместимость с Java и JVM
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39919207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я говорю вобщем про бесконечные компромиссы. Вот втащили в Kotlin нечто. Это нечто - имеет
характерный bracer-like синтаксис. Можно назвать это pattern-matching-ом. А можно просто назвать
это синтаксическим сахаром над обычным if-else.
...
Рейтинг: 0 / 0
Сложить два числа в Kotlin :)
    #39919276
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ну я говорю вобщем про бесконечные компромиссы. Вот втащили в Kotlin нечто. Это нечто - имеет
характерный bracer-like синтаксис. Можно назвать это pattern-matching-ом. А можно просто назвать
это синтаксическим сахаром над обычным if-else.


Так в Котлин и не собираются внедрят pattern-matching. :-)
...
Рейтинг: 0 / 0
19 сообщений из 69, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложить два числа в Kotlin :)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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