The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск Java SE 21

20.09.2023 09:45

После шести месяцев разработки компания Oracle выпустила платформу Java SE 21 (Java Platform, Standard Edition 21), в качестве эталонной реализации которой используется открытый проект OpenJDK. За исключением удаления некоторых устаревших возможностей в Java SE 21 сохранена обратная совместимость с прошлыми выпусками платформы Java - большинство ранее написанных Java-проектов без изменений будут работоспособны при запуске под управлением новой версии. Готовые для установки сборки Java SE 21 (JDK, JRE и Server JRE) подготовлены для Linux (x86_64, AArch64), Windows (x86_64) и macOS (x86_64, AArch64). Разработанная в рамках проекта OpenJDK эталонная реализация Java 21 полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами.

Java SE 21 отнесён к категории выпусков с расширенным сроком поддержки, обновления для которого будут выпускаться до 2031 года (общедоступные обновления будут выходить до сентября 2028 года). В качестве ветки с длительным сроком поддержки (LTS) также продолжает сопровождаться Java SE 17, обновления для которой будут выпускаться до 2029 года (общедоступные - до 2026 года). Общедоступная поддержка LTS-ветки Java SE 11 прекращается в сентябре этого года, но расширенная поддержка будет производиться до 2032 года. Расширенная поддержка LTS-ветки Java SE 8 продлится до 2030 года.

Напомним, что начиная с выпуска Java 10 проект перешёл на новый процесс разработки, подразумевающий более короткий цикл формирования новых релизов. Новая функциональность теперь развивается в одной постоянно обновляемой master-ветке, в которую включаются уже готовые изменения и от которой раз в шесть месяцев ответвляются ветки для стабилизации новых выпусков.

Из новшеств Java 21 можно отметить ([1], [2], [3], [4], [5]):

  • Добавлена поддержка упорядоченных коллекций (SequencedCollection), предоставляющих методы addFirst, addLast, getFirst, getLast, removeFirst и removeLast для прямого доступа к первым и последним элементам коллекции с постоянным следованием элементов. Упорядоченные коллекции применимы к спискам, sets-наборам (например, TreeSet) и некоторым другим структурам данных.
    
       var letters = List.of("c", "b", "a");
       "c".equals(letters.getFirst());
       "a".equals(letters.getLast());
    
  • Реализован генеративный вариант сборщика мусора ZGC (Generational Z Garbage Collector), вводящий раздельную обработку "старых" и "молодых" объектов, что повышает эффективной очистки недавно созданных объектов с небольшим временем жизни. Отмечается, что применение Generational ZGC уменьшает риски приостановок во время выделения ресурсов, снижает нагрузку на CPU и потребление памяти при сборке мусора. Применение Generational ZGC с Apache Cassandra 4 в проведённых тестах привело к увеличению пропускной способности в 4 раза при фиксированном размере кучи (heap) и уменьшение размера кучи на четверть при неизменной пропускной способности. Для включения нового режима предложена опция "-XX:+UseZGC -XX:+ZGenerational".
  • Стабилизирована реализация шаблонов записей (record pattern), расширяющая появившуюся в Java 16 возможность сопоставления с образцом средствами для разбора значений классов типа record. Например:
    
       record Point(int x, int y) {}
    
       static void printSum(Object obj) {
           if (obj instanceof Point p) {
               int x = p.x();
               int y = p.y();
               System.out.println(x+y);
           }
       }
    
  • Стабилизирована поддержка сопоставления по шаблону в выражениях "switch", позволяющая в метках "case" использовать не точные значения, а гибкие шаблоны, охватывающие сразу серию значений, для которых ранее приходилось использовать громоздкие цепочки выражений "if...else".
    
       static String formatterPatternSwitch(Object obj) {
           return switch (obj) {
               case Integer i -> String.format("int %d", i);
               case Long l    -> String.format("long %d", l);
               case Double d  -> String.format("double %f", d);
               case String s  -> String.format("String %s", s);
               default        -> o.toString();
           };
       }
    
  • Стабилизирована реализация виртуальных потоков, представляющих собой легковесные потоки, значительно упрощающие написание и сопровождение высокопроизводительных многопоточных приложений.
  • Добавлена предварительная поддержка строковых шаблонов (String Template), реализованных в дополнение к строковым литералам и блокам текста. Строковые шаблоны позволяют совмещать текст с вычисляемыми выражениями и переменными без использования оператора "+". Подстановка выражений осуществляется при помощи подстановок \{..}, при этом для проверки корректности подставляемых значений могут подключаться специальные обработчики. Например, обработчик SQL обеспечивает проверку значений, подставляемых в SQL-код, и возвращает на выходе объект java.sql.Statement, а обработчик JSON отслеживает корректность подстановок JSON и возвращает JsonNode.
    
       String query = "SELECT * FROM Person p WHERE p."
           + property + " = '" + value + "'"; // было
    
       Statement query = SQL."""SELECT * FROM Person p
           WHERE p.\{property} = '\{value}'"""; // стало
    
  • Предложена третья предварительная реализация API FFM (Foreign Function & Memory), позволяющего организовать взаимодействие Java-программ с внешними кодом и данными через вызов функций из внешних библиотек и доступ к памяти вне JVM.
  • Добавлена предварительная поддержка безымянных переменных и сопоставлений с шаблоном - вместо неиспользуемых, но необходимых при вызове переменных и шаблонов, теперь можно указывать символ "_".
    
       // было
       String pageName = switch (page) {
         case GitHubIssuePage(var url, var content, var links, int issueNumber)
               -> "ISSUE #" + issueNumber;
       ...
       };
    
    
       // теперь можно
       String pageName = switch (page) {
          case GitHubIssuePage(_, _, _, int issueNumber)
            -> "ISSUE #" + issueNumber;
       };
    
  • Добавлена предварительная поддержка безымянных классов и безымянных экземпляров метода "main", в которых можно обойтись без объявлений public/static, передачи массива аргументов и прочих сущностей, связанных с объявлением класса.
    
       // было
       public class HelloWorld {
         public static void main(String[] args) {
           System.out.println("Hello world!");
         }
       }
    
       // теперь можно
       void main() {
           System.out.println("Hello, World!");
       }
    
  • Добавлена предварительная поддержка ограниченных значений (Scoped Values), позволяющих совместно использовать неизменяемые данные в потоках и эффективно обмениваться данными между дочерними потоками (значения наследуются). Scoped Values развиваются для замены механизма переменных локальных к потоку (thread-local variables) и более эффективны при использовании очень большого числа виртуальных потоков (тысячи и миллионы потоков). Главное отличие Scoped Values от переменных локальных к потоку в том, что первые записываются один раз, в дальнейшем не могут быть изменены и остаются доступны только на время выполнения потока.
    
       class Server {
           final static ScopedValue<user> CURRENT_USER = new ScopedValue<>();      
    
           void serve(Request request, Response response) {
               var level = (request. isAuthorized()? ADMIN : GUEST);
               var user  = new User(level);
          
               ScopedValue.where(CURRENT_USER, user)                               
                          .run(() -> Application.handle(request, response));       
           }
       }
    
       class DatabaseManager {
           DBConnection open() {
               var user = Server.CURRENT_USER.get();                               
               if (!user.canOpen()) throw new InvalidUserException();
               return new DBConnection(...);
           }
       }
    
    
  • Добавлена шестая предварительная реализация API Vector, предоставляющего функции для векторных вычислений, которые выполняются с использованием векторных инструкций процессоров x86_64 и AArch64 и позволяют одновременно применить операции сразу к нескольким значениям (SIMD). В отличие от предоставляемых в JIT-компиляторе HotSpot возможностей по автовекторизации скалярных операций, новый API даёт возможность явно управлять векторизацией для параллельной обработки данных.
  • Добавлен экспериментальный API для cтруктурированного параллелизма (Structured Concurrency), упрощающий разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока.
  • Добавлены новые методы: Math.clamp(), StrictMath.clamp(), String indexOf(int,int,int), indexOf(String,int,int), String splitWithDelimiters().
  • Добавлены методы для определения свойств emoji: isEmoji(int codePoint), isEmojiPresentation(int codePoint), isEmojiModifier(int codePoint), isEmojiModifierBase(int codePoint), isEmojiComponent(int codePoint) и isExtendedPictographic(int codePoint).
    
       var codePoint = Character.codePointAt("😃", 0);
       var isEmoji = Character.isEmoji(codePoint);
       System.out.println("😃 is an emoji: " + isEmoji);
    
  • Добавлен API для использования механизмов инкапсуляции ключей шифрования (KEM, Key Encapsulation Mechanism), предназначенных для защиты ключей симметричного шифрования при помощи алгоритмов на основе открытых ключей.
  • Добавлена поддержка алгоритма цифровых подписей HSS/LMS.
  • Началась подготовка к запрету динамической загрузки агентов. При попытке динамической загрузки Java-агентов в работающую виртуальную машину JVM теперь будет выводиться предупреждение.
  • Прекращена поддержка 32-разрядной платформы Windows.

Дополнительно можно отметить публикацию обновления платформы для создания приложений с графическим интерфейсом JavaFX 21.

  1. Главная ссылка к новости (https://mail.openjdk.org/piper...)
  2. OpenNews: Выпуск Java SE 20
  3. OpenNews: Oracle меняет лицензию на сборки Java SE. Red Hat взял на себя сопровождение OpenJDK 8 и 11
  4. OpenNews: Microsoft опубликовал собственный дистрибутив OpenJDK
  5. OpenNews: Компания Oracle убрала ограничение по использованию JDK в коммерческих целях
  6. OpenNews: Компания JetBrains анонсировала поддержку Wayland в IDE IntelliJ и OpenJDK
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/59787-java
Ключевые слова: java, jdk
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (67) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:22, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    спасибо редакции за качественную новость

    пожелание: "Из новшеств Java 21 можно отметить" - вот тут каждое слово - ссылка, можно так не делать? - выберите главную и сделайте одну ссылку, читать это неудобно

     
     
  • 2.4, Аноним (4), 11:29, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    уже предлагал админу делать обычные советские сноски [1][2][3][4][5], как это делается в той же википедии. Почему-то не послушал и продолжает оформлять каждую букву^W^W каждое слово как отдельную ссылку, что не имеет смысла с точки зрения того, как гипертекст задумывался дидами и как он воспринимается речевыми ридерами для слепых.
     
     
  • 3.10, Аноним (10), 11:55, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Почему-то не послушал и сделал нормально вот это новость.
     
     
  • 4.14, Аноним (1), 12:35, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    про скринридеры - это аргумент
     
     
  • 5.34, Аноним (10), 14:44, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Нет.
     
  • 3.29, VladSh (?), 14:22, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Может доработать скринридеры?
     
     
  • 4.71, A11CF0 (?), 11:55, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Они такое вполне нормально читают. Как пользователь говорю.
     
  • 2.96, Yilativs (?), 10:40, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Хорошо новость оформлена, автору спасибо.
     

  • 1.5, Аноним (5), 11:30, 20/09/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –6 +/
     

     ....ответы скрыты (9)

  • 1.18, Аноним (18), 13:05, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    JavaFX живая хоть?

    Кто видел, разрабатывал приложение на нем? Как оно?

     
     
  • 2.66, vvm13 (ok), 07:48, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Баги фиксят. Изредка прибавляют фичи - каплю в десятилетие.
    Как оно... что?
    У меня работает. Не могу сказать, что я вполне с ней счастлив, но остальные GUI для Java ещё хуже.
    Кстати, классический Arduino IDE именно на JavaFX сделан...
     

  • 1.20, Хосе (?), 13:09, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а Android Studio 3.6 будет работать с OpenJDK 21 на Windows 7 или лучше использовать jdk-8u271-windows-i586.exe ?
     
     
  • 2.21, Аноним (21), 13:19, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На Windows XP попробуйте, расскажете.
     
     
  • 3.22, Хосе (?), 13:23, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    на ХР нормально работает, только без ускорения для эмулятора
     
  • 2.26, Аноним (26), 13:51, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    У джетбрейнс есть свой форк jre 21, щупал, когда оно на стадии RC было, вроде норм.
     

  • 1.24, Аноним (24), 13:33, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Я одного не понимаю а нельзя добавить освобождение памяти по освобождению указателя как в с++ unique_ptr ? В чем соль сборщика мусора ?
     
     
  • 2.25, Аноним (25), 13:37, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Те кто этого не понимают обычно уборкой мусора и занимаются
     
  • 2.27, Аноним (26), 13:57, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Плата за скорость разработки. У unique_ptr надо думать, кто будет владеть ссылкой, у shared_ptr проблема с производительностью и циклическими ссылками, а в Яве фигак-фигак и всё давно в продакшн, пока приплюснутые ещё морщат лоп.
     
     
  • 3.61, лютый арчешкольник... (?), 03:33, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >а в Яве фигак-фигак и всё давно в продакшн, пока приплюснутые ещё морщат лоп

    мой юный друг, конечно же ты неправ в своих эпитетах "в жабби они фигак-фигак и в прод".

    то что GC вынесен в JVM позволяет его не реализовывать в каждом проекте. т.е. жирный плюс - нет велосипединга. а GC и в целом JVM пишут монстрилы навроде шипилёва и им подобным мутантам, соответственно никакой там не фигак, а очень даже рокетсаенс ) уж в типичной команде приплюснутых сишников такого уровня (как разрабы JVM) нет и не будет даже в самых наэротических снах )))

     
  • 2.36, Аноним (36), 15:04, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Меньше думаешь об указателях, больше о бизнес логике.
     
  • 2.99, zog (??), 10:52, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    В джаве нет указателей, а есть ссылки, что не одно и то же. Кроме того, для освобождения памяти по аналогии с тем, как это сделано в unique_ptr необходимо разбираться с владением этой ссылки и в итоге получится ещё один Rust. Соль сборщика мусора в том, что программисту не надо думать об освобождении памяти самостоятельно, а следует думать лишь о забывании или обнулении ссылок на неиспользуемые объекты. Кроме того сочетание ссылок и сборщика мусора позволяет эффективно бороться с фрагментацией памяти.
     

  • 1.33, iPony129412 (?), 14:43, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Прекращена поддержка 32-разрядной платформы Windows.

    Не побоюсь этого слова, наконец-то.

     
  • 1.37, Аноним (36), 15:06, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всё жиреет и жиреет. У нас все проекты на 8, есть 11. На 17 ниодного проекта пока, а тут уже 21. Хренофичи лепят как пирожки.
     
     
  • 2.39, Аноним (25), 15:49, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Вот смешняво будет когда ваши деды начнут выходить на пенсию и нужно будет нанимать молодняк. Начинайте собеседование сразу с "У нас 8я версия", чтоб не тратить время.
     
  • 2.44, жявамэн (ok), 16:30, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > На 17 ниодного проекта пока, а тут уже 21.

    ну вот начинайте миграцию с 8 сразу на 21 чо


     
     
  • 3.48, Аноним (48), 17:45, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Пока они мигрируют, там уже java 35 выйдет.
     
  • 3.50, Аноним (50), 18:19, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > начинайте миграцию

    Зачем если итак работает?

     
     
  • 4.83, zog (??), 21:24, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Зачем если итак работает?

    Java 8 и 11 больше не поддерживаются - к ним нет или не будет (11) новых бесплатных обновлений. Серьёзные конторы не хотят сидеть на протухшей платформе и не хотят платить деньги за то, что долгое время получали на халяву.

     
     
  • 5.104, Аноним (104), 15:23, 05/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    И 8, и 11 поддерживаются и будет поддерживаться ещё с десяток лет как минимум. На них сейчас 90% работающих проектов.
     
  • 3.82, zog (??), 21:21, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Некоторые фреймворки и библиотеки ещё 17-ю не осилили, а ты ему сразу 21-ю предлагаешь. А всё почему? Потому что в джаву завезли старый и на самом деле никому ненужный долгострой - модули с его strong encapsulation. Они этот strong encapsulation малыми дозами вводят каждый релиз и то тут то там что-то отвеливается и его потом долго чинят.
     
     
  • 4.102, жявамэн (ok), 15:01, 27/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Некоторые фреймворки и библиотеки ещё 17-ю не осилили, а ты ему сразу
    > 21-ю предлагаешь.

    например?
    спринг осилил 21 жяву для всех живых веток, например

     
  • 2.45, Аноним (45), 16:40, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ADT и паттерн-матчинг - это совсем не хренофичи
     
     
  • 3.103, anonymous (??), 15:54, 29/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Для этого Scala есть.
     
  • 3.106, Аноним (104), 15:33, 05/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Хрено. Нормальным людям это не нужно. Оно слишком сложно.
     
  • 2.49, User (??), 18:05, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Угу. А потом очередной log4j, который апстрим не будет фиксить патамучта нуигонафик эту вашу окаменелость - и?
     
  • 2.54, Аноним (53), 20:22, 20/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Там же для слабонервных написано что 8ка до 2030 будет поддерживаться.
    Можете еще 7 лет в криокамере сидеть.
     
     
  • 3.90, zog (??), 12:57, 22/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > 8ка до 2030 будет поддерживаться

    Будут выходить лишь обновления безопасности. Поддержки как таковой не будет, она закончилась ещё в прошлом году. https://endoflife.date/java

     
     
  • 4.105, Аноним (104), 15:31, 05/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Это oracle jdk. Полно других.
     

  • 1.41, Аноним (-), 16:14, 20/09/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.47, Аноним (47), 17:43, 20/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    String Template мне не нравится совсем. Unnamed Patterns тоже уродливо выглядят.  
     
     
  • 2.98, zog (??), 10:45, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Что конкретно не нравится в String Template?
     

  • 1.58, Golangdev (?), 00:43, 21/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Про то, что Loom aka Virtual threads стали procuction-ready(https://openjdk.org/jeps/444), а также про превью Structured concurrency(https://openjdk.org/jeps/453) ни слова.

    Ноаость слабовата.

     
     
  • 2.67, Аноним (67), 08:56, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Читайте внимательнее, про это в новости упомянуто:

    "Стабилизирована реализация виртуальных потоков, представляющих собой легковесные потоки, значительно упрощающие написание и сопровождение высокопроизводительных многопоточных приложений"

    "Добавлен экспериментальный API для cтруктурированного параллелизма (Structured Concurrency), упрощающий разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока."

     
     
  • 3.78, Golangdev (?), 13:10, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо!
     

  • 1.62, Аноним (62), 04:18, 21/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Угу, теперь ждём, когда Project Valhalla релизнется, в следующем году будет 10 лет с момента, когда выложили первые драфты по JEP-ам, связанным с вальхаллой.
     
  • 1.63, Аноним (63), 05:16, 21/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Уже давно пора появится языку который вытеснит java так же как она когда-то потеснила С
     
     
  • 2.65, leap42 (ok), 05:38, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Уже давно пора появится языку который вытеснит java так же как она
    > когда-то потеснила С

    жабашники активно бегут в Go... спасу от них нет, не протолкнуться 😆

     
     
  • 3.79, Аноним (62), 14:01, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это где они бегут? Gо приколен был только своей темой горутин, когда появился, после того как виртуальные появились в джаве, на гошной бойлерплейтной помойке, похожей на смесь Си с Питоном, пишут только изрядные копрофилы.
     
     
  • 4.80, Аноним (62), 14:03, 21/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Пардоньте, "пишут" заменить на "будут писать"
     
  • 4.87, Аноним (87), 05:19, 22/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Выбирают язык в основном архитекторы. Я сталкивался с тем что это как правило индусы. Так-что мне кажется что никто никуда не бежит куда хочет - им показывают направление или будут лапу сосать.
     
     
  • 5.97, zog (??), 10:43, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Язык выбирают не архитекторы, а всякого рода CTO и VP R&D. Ну и в нормальных компаниях архитекторы - это почти никогда не индусы, а люди, живущие примерно там же, где и основной костяк R&D. Вы наверное на галере для забугорной компании работаете, а это априори не есть хорошо.
     
  • 4.95, zog (??), 10:40, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Это где они бегут?

    Ну вот я хочу уйти из Java backend в Go backend после 15 лет работы. Надоела вся эта декларативная магия современных Java фреймворков, хочется заниматься чистым кодом. А этой магией пусть мастурбируют такие люди как Женя Борисов и компания на jug.ru, которые в реальных проектах уже давно не участвуют.

     
     
  • 5.100, Аноним (62), 21:14, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Угу, а проверять на err=nil каждый вызов i/o функциональности как минимум  и RAII через defer видимо очень читабельно. Даже в Rust подобное сделано правильнее. Чудовищный треш этот Go, спасибо что хоть спустя стопицот лет дженерики завезли. Правда на сравнении интерфейса с nil все равно можно подорваться до сих пор, лол.
     
     
  • 6.101, zog (??), 17:54, 26/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Это гораздо лучше плясок с бубном вокруг декларативной магией в Spring Boot и прочих фрейморках.
     

  • 1.88, Аноним (88), 05:45, 22/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Помню было время java как и flash стояли почти на каждом компе (ну flash точно на каждом) для запуска апплетов в браузере интернет эксплорер
    И что в итоге стало? Как мы до такого дожили?
     
     
  • 2.89, Аноним (89), 07:32, 22/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Флеш был распространеннее, без него смешные видео было не посмотреть. А теперь сам бразуер превратился в VM и он теперь один из способов дистрибуции кросплафторменных приложений (aka Single-page Application).
     

  • 1.92, Геймер (?), 08:40, 23/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Java2me когда новая будет?
     
     
  • 2.94, zog (??), 10:33, 24/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Никогда.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру