А вот кстати результаты технологического отчёта JRebel за 2021 год.
• Java 8 возросла с 58% до 69% (видимо, всё ещё переходят с 6 и 7)
• Java 11 – c 23% до 36%
• Eclipse в прошлом году был совсем плох – 24%. В этом году 48%. IDEA упала с 82% до 65%. Не знаю, может тут какой-то bias в опросе. Результаты слишком отличаются.
• Maven и Gradle стали 67% и 20% соответственно, а в прошлом году были 47% и 44%. В общем, я не уверен в корректности их опроса.
• Java 8 возросла с 58% до 69% (видимо, всё ещё переходят с 6 и 7)
• Java 11 – c 23% до 36%
• Eclipse в прошлом году был совсем плох – 24%. В этом году 48%. IDEA упала с 82% до 65%. Не знаю, может тут какой-то bias в опросе. Результаты слишком отличаются.
• Maven и Gradle стали 67% и 20% соответственно, а в прошлом году были 47% и 44%. В общем, я не уверен в корректности их опроса.
Какой ваш любимый JVM язык, но не Java? Можно выбирать любой - необязательно на нём иметь опыт программирования.
Final Results
16%
Groovy
61%
Kotlin
16%
Scala
5%
Clojure
1%
JRuby / TruffleRuby
0%
Jython / Graal.Python
1%
Xtend
1%
Ceylon
1%
Eta / Frege
0%
Golo
Про версионирование в Java
Вот такой код был когда-то в Hadoop:
Аналогичный случай в commons-lang (версия 2.5). Там тоже используется substring. Для Java 1.10
Вот такой код был когда-то в Hadoop:
private static boolean IS_JAVA7_OR_ABOVE =
System.getProperty("java.version").substring(0, 3).compareTo("1.7") >= 0;
Не понимаю, как можно было в здравом уме такое написать в проекте такого уровня. Ну хорошо, предвидеть, что схема версионирования в Java поменяется, было довольно трудно. Но ведь даже если она не поменялась бы, то всё равно бы это работало неправильно! Допустим, вышла 1.8, потом 1.9, а потом 1.10. И для 1.10 IS_JAVA7_OR_ABOVE было бы false!Аналогичный случай в commons-lang (версия 2.5). Там тоже используется substring. Для Java 1.10
SystemUtils.JAVA_VERSION_AS_FLOAT по старой схеме возвратило бы 1.1 (что меньше 1.7), а по новой это стало выбрасывать StringIndexOutOfBoundsException. То есть точно такой же баг. И это ведь библиотека, которую используют тысячи других проектов. Неужели нельзя было предвидеть, что когда-нибудь выйдет Java 10, и весь существующий код в мире просто сломается?А есть ли здесь те, кто подписан на этот канал, но не подписан на основной? Напоминаю, что канал microJUG второстепенный, а основной канал – это miniJUG. Так что если вы каким-то образом попали на этот канал и пропустили основной, то обязательно кликайте по ссылке и подписывайтесь на @miniJUG.
Telegram
miniJUG
Новости Java: https://www.youtube.com/@mini_jug
Также подписывайтесь на второй канал: @microJUG
Буст: https://news.1rj.ru/str/miniJUG?boost
Twitter: https://twitter.com/mini_JUG
Сайт: https://minijug.org
Feed: https://minijug.org/feed.xml
Чат: https://news.1rj.ru/str/mini_JUG
Также подписывайтесь на второй канал: @microJUG
Буст: https://news.1rj.ru/str/miniJUG?boost
Twitter: https://twitter.com/mini_JUG
Сайт: https://minijug.org
Feed: https://minijug.org/feed.xml
Чат: https://news.1rj.ru/str/mini_JUG
Вам надо вернуть из функции на Java два результата типа X и Y (например, String и Integer). Какой подход вы выберете?
Final Results
6%
Верну Entry<X, Y>
43%
Верну Pair<X, Y>
20%
Объявлю класс с полями X и Y (без использования Lombok)
27%
Объявлю класс с полями X и Y (с использованием Lombok)
1%
Верну массив Object[] или List<Object> с двумя элементами и потом сделаю downcast
2%
Другой вариант (напишу в комментах)
Ахах, в самой библиотеке Java есть синхронизация на value-based классах.
Это кстати говорит о том, что на коллекциях тоже не надо синхронизоваться, потому что там могут быть любые реализации, в т.ч. value-based.
Это кстати говорит о том, что на коллекциях тоже не надо синхронизоваться, потому что там могут быть любые реализации, в т.ч. value-based.
Недавно проводил опрос про Pair. А кто-нибудь знает про Either и использовали ли когда-нибудь?
Final Results
7%
Использовал в production, но не в Java (Scala, Kotlin и т.п.)
5%
Использовал в production в Java
15%
Я знаю, что такое Either, не использовал, но хотел бы использовать
9%
Я знаю, что такое Either, не использовал и не собираюсь (Either - зло, как и Pair)
65%
Не знаю, что это
В Украине заблокировали GitHub
В перечень подпавших под блокировку доступа сайтов сайт статистики мессенджера Telegram и страница шеринга строк кода на международном IТ-ресурсе GitHub
https://www.interfax.ru/amp/753485
В перечень подпавших под блокировку доступа сайтов сайт статистики мессенджера Telegram и страница шеринга строк кода на международном IТ-ресурсе GitHub
https://www.interfax.ru/amp/753485
Интерфакс
Украинских провайдеров обязали заблокировать РБК и 425 других ресурсов
На Украине Национальная комиссия по госрегулированию в сфере связи и информатизации (НКРСИ) проинформировала провайдеров, что они должны заблокировать доступ к 426 сайтам, среди которых сайт российского РБК, блогосервиса "Живой журнал" (Livejournal.com),…
Накладные расходы по памяти различных коллекций Java
То есть сколько нужно байт, чтобы создать коллекцию из N элементов (в данном случае 10) без учёта размера самих объектов.
Как видно из диаграммы, абсолютными чемпионами по неэффективности являются HashSet, TreeSet и LinkedHashSet. Они обходятся в 4-10 раз (!) дороже, чем эффективные коллекции из левой части. Так что в следующий раз задумайтесь, действительно ли вам нужно использовать именно их.
Из левого списка победителями стали List.of() и ImmutableList. Вот их и надо использовать почаще. Integer[] - для тех, кто экономит каждый байт.
Особняком стоит EnumSet и занимает даже меньше, чем массив. Там если в enum ≤ 64 элементов, то используется простой long для битовой маски.
То есть сколько нужно байт, чтобы создать коллекцию из N элементов (в данном случае 10) без учёта размера самих объектов.
Как видно из диаграммы, абсолютными чемпионами по неэффективности являются HashSet, TreeSet и LinkedHashSet. Они обходятся в 4-10 раз (!) дороже, чем эффективные коллекции из левой части. Так что в следующий раз задумайтесь, действительно ли вам нужно использовать именно их.
Из левого списка победителями стали List.of() и ImmutableList. Вот их и надо использовать почаще. Integer[] - для тех, кто экономит каждый байт.
Особняком стоит EnumSet и занимает даже меньше, чем массив. Там если в enum ≤ 64 элементов, то используется простой long для битовой маски.