В связи с 25-летием JDK 1.0 опрос. Какая была ваша первая версия Java, с которой вы начали работать за деньги?
Final Results
0%
Java 1.0/1.1
2%
Java 1.2
2%
Java 1.3
7%
Java 1.4
7%
Java 5
23%
Java 6
22%
Java 7
32%
Java 8
1%
Java 9+
4%
Я (ещё) не писал на Java за деньги
Где-то неделю программирую на Java 11. Пока в основном радуюсь новшествам в API, а не в синтаксисе. Прям сильно зашёл HttpClient. Сокращает код в разы по сравнению с HttpURLConnection. Ещё заюзал Files.writeString и String.isBlank. Из синтаксиса пока только удалось написать анонимный класс с оператором бубна. var пока не решаюсь использовать. А вы пишете var?
C:\Soft\jdk-17\bin>jshell
| Welcome to JShell -- Version 17-ea
| For an introduction type: /help intro
jshell> Record.class.isRecord()
$1 ==> falseТут вышел новый черновик JEP Frozen Arrays с предложением добавить в Java замороженные (shallowly immutable) массивы:
• В такие массивы нельзя писать (выкинет
• Могу создаваться с помощью фабрики или путём вызова
• С помощью
• Нового синтаксиса не будет. Изменений в байт-коде тоже.
Самое интересное, как будут выглядеть фабрики таких массивов. Хотелось бы чего-нибудь вроде
• В такие массивы нельзя писать (выкинет
ArrayStoreException)• Могу создаваться с помощью фабрики или путём вызова
array.freeze()/System.arrayfreeze(array, 0, array.length) на существующем мутабельном массиве (при этом возвращается новый массив).• С помощью
System.isFrozenArray(array) можно проверить, заморожен ли массив• Нового синтаксиса не будет. Изменений в байт-коде тоже.
Самое интересное, как будут выглядеть фабрики таких массивов. Хотелось бы чего-нибудь вроде
Arrays.makeFreezedArray(int size, IntFunction<T> func). Но тогда непонятно, что будет с примитивными генераторами, ведь специализаций у IntFunction<T> только три (IntUnaryOperator, IntToDoubleFunction, IntToLongFunction), но при этом IntToCharFunction и всех остальных нет. В общем, это самое непонятное место пропозала.Год назад я создавал опрос о распространённости версий Java. Давайте посмотрим, что-нибудь изменилось за год или нет. Варианты ответов оставляю ровно те же самые.
Какие языки используете?
Какие языки используете?
Final Results
3%
Java 7 и более старые
56%
Java 8
0%
Java 9/10
52%
Java 11
19%
Java 12 или выше
10%
Groovy
4%
Scala
23%
Kotlin
А вот кстати результаты технологического отчёта 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