microJUG


Kanal geosi va tili: Rossiya, Ruscha


Мысли о Java.
Основной канал: @miniJUG
Буст: https://t.me/microJUG?boost
Чат: https://t.me/micro_JUG
Таблица JEP'ов: https://minijug.org/jeps.html

Bog‘liq kanallar  |  O‘xshash kanallar

Kanal geosi va tili
Rossiya, Ruscha
Statistika
Postlar filtri


В сортировке Java опять нашли баг. На этот раз, правда, затронут только parallelSort().

Нарушается стабильность сортировки: контракт sort() и parallelSort() гарантирует, что если элементы равны, то они сохраняют свой изначальный порядок. Но при некоторых условиях parallelSort() равные элементы перемешиваются.

Баг обнаружил один из создателей Dual-Pivot Quicksort в OpenJDK Владимир Ярославский. Он привёл пример кода, ломающего параллельную сортировку.




⌨️ Две большие новости прошлой недели.

Во-первых, наконец-то вышел JEP 544: Ahead-of-Time Code Compilation. Это то, собственно, ради чего создавался проект Leyden: статическая компиляция байткода в нативный код. Без этого не получилось бы решить одну из главных проблем Java: медленный старт приложений. Пока JEP'у не назначен релиз, но есть шанс, что это будет в 28 (т.е. в 29 LTS это уже по-любому будет).

Во-вторых, наконец-то Structured Concurrency выходит из preview в Java 28. Суммарно с инкубаторами он был в таком состоянии 9 релизов (дольше так долго находится только Vector API).

#leyden


Появилась первая Early-Access сборка JDK 28, включающая в себя JEP 401: Value Objects (Preview). Можно скачивать и тестировать ваши приложения.

Напоминание: классы JDK вроде Integer и LocalDate не будут value классами в рантайме, если не указать ключ --enable-preview.

#valhalla


Коммит "Implement JEP 401: Value Objects (Preview)" смёржен в главную ветку репозитория OpenJDK
#valhalla






JDK x86_64 станет deprecated for removal на macOS

Появился черновик JEP: Deprecate the macOS/x64 Port for Removal. Мотивация: Apple перевёл всё своё железо на архитектуру AArch64. Поэтому поддержка со стороны Oracle будет прекращена, т.к. это требует значительных ресурсов и усилий.


Официально. Valhalla попадёт в JDK 28.

Пулл-реквест первого превью JEP 401: Value Classes and Objects сейчас находится на ревью на Гитхабе. В нём около 2800 коммитов и почти 200 тысяч строк кода.

#valhalla


Результаты опроса по версиям Java.

• Java 25 ворвалась с 25%.
• Java 21 прибавила +7%, хотя это предыдущий LTS. Сейчас это самая используемая версия Java.
• Java 17 столько уже убавила (-7%). Но всё ещё имеет заметную долю и пока что выше, чем Java 25.
• Java 8 и 11 болтаются в районе 10% и очень медленно умирают (но до нуля вряд ли когда-то дойдут).
• Groovy болтается в своём районе 4-5%, Scala – 2-3%.
• Kotlin продолжает уверенно держаться в районе 20%.


❌ Oracle хочет полностью запретить контрибьютить в JDK код, сгенерированный с помощью AI.

Марк Рейнолд написал в рассылку письмо, где рассказал, что Oracle работает над черновиком политики, регулирующей использование генеративного AI для вклада в OpenJDK. Однако пока эта политика не будет утверждена комитетом, уже сейчас комитет принял временную политику, которая запрещает вклады, содержащие AI-контент:

Вклады в сообществе OpenJDK не должны содержать контент, сгенерированный полностью или частично большими языковыми моделями, диффузионными моделями и похожими системами глубокого обучения. Контент включает в себя исходный код, текст, изображения в Git-репозиториях OpenJDK, пулл-реквестах на GitHub, e-mail сообщениях, wiki-страницах и в JBS.


Исключением является использование AI в личных целях: изучение, отладка, ревью, исследования.

Причины, почему AI было решено запретить, можно подробно почитать здесь. Если коротко, то это сложность ревьюинга и поддержки больших объёмов кода, сгенерированных через AI. Также есть проблемы с нарушением авторских прав: инструменты AI могут быть обучены на контенте с копирайтом, поэтому сгенированный код может нарушать лицензии.

#ai

3k 3 52 6 47

В JVM есть такая опция -Xms. Вы знаете, что она точно означает? Некоторые думают, что это минимальный размер кучи. Другие - что это начальный размер кучи (при старте JVM). Но какой вариант правильный? Это всё-таки минимальный или начальный размер кучи?

Ответ: и минимальный, и начальный.

Откуда вообще взялась путаница? А вот отсюда. Если посмотреть, что пишет в хелпе сам JDK, то там будет следующее:
> java --help-extra

...
-Xms set initial Java heap size
-Xmx set maximum Java heap size

Но при этом в онлайн документации на сайте Oracle написано по-другому:
-Xms size
Sets the minimum and the initial size (in bytes) of the heap. This value must be a multiple of 1024 and greater than 1 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, or g or G to indicate gigabytes. The following examples show how to set the size of allocated memory to 6 MB using various units:


Это более корректно. Несоответствие заметили буквально недавно и пофиксили лишь в Java 25. Теперь хелп JDK пишет правильно:
> java --help-extra

...
-Xms set minimum and initial Java heap size
-Xmx set maximum Java heap size

P.S. Есть ещё опция -Xmn, но она означает совсем другое: она указывает начальный (и минимальный) размер молодого поколения. Эта опция используется редко.



709 0 0 11 11

🤯 Проект Valhalla было решено свернуть. Брайан Гетц написал письмо [1], где подробно описал решение свернуть проект:

Это было очень тяжёлое для нас решение. Мы потратили на внедрение value-типов в Java 12 лет. Мы сделали несколько рабочих прототипов, но ни один из них нас не устроил полным образом. Мы думали, что сможем внедрить value-типы таким образом, что это не сломает обратную совместимость. Но у нас не получилось. Это слишком инвазивное изменение.


Брайан также сказал:

Есть и хорошие новости. Проект отнимал у нас много сил и времени. Но сейчас мы можем переключиться на фичи, которым уделяли мало внимания. Например, мы хотим наконец-то вывести из preview Structured Concurrency.


На текущий момент проект Valhalla пока что помечен как активный. Но скоро он уйдёт в архив. Последний билд Valhalla всё ещё доступен для скачивания.

[1] https://www.youtube.com/watch?v=dQw4w9WgXcQ


Брайан Гетц предложил внести изменения в JEP 468: Derived Record Creation (Preview).

Ранее предложенный синтаксис:
stats = stats with { count = count + 1; }

Предлагается заменить на следующий:
stats = stats.new(count: count+1);


По поводу первой фичи появился черновик JEP: Enhanced Local Variable Declarations (Preview).
Если есть желание, можно подробно ознакомиться.


🤷‍♂️ Вы не поверите, но они опять хотят добавить имплементацию JavaScript в Java. Правда на этот раз движок с нуля никто писать не собирается. И воскрешать Nashorn тоже. Вместо это хотят сделать всё поверх существующего движка V8. Вся работа будет идти в проекте Detroit.
#javascript


В Java 26 JavaDoc будет поддерживать тёмный режим. JavaDoc для Java 26 уже доступен, так что уже можно потестить.
#javadoc


Появился первый черновик JEP проекта Babylon: https://openjdk.org/jeps/8361105
#babylon


Какой из этих островов Ява?
So‘rovnoma
  •   1
  •   2
  •   3
  •   4
  •   5
96 ta ovoz

20 ta oxirgi post ko‘rsatilgan.