En Önemli, Yenilikçi 5 Ekleme: OpenJDK 19

In: Genel


Rağmen OpenJDK 19 bir LTS değil, bence hala önemli bir sürüm.

Java ortamını değiştirecek, oyunun kurallarını değiştiren birkaç özellik içerir. Birçok özellik ilgimi çekiyor, ancak özellikle denemek için sabırsızlandığım beş özellik var. Bunları parçalayalım ve ayrı ayrı konuşalım.

1. JEP 425: Sanal Konular (Önizleme)

Project Loom çatısı altında, JEP 425 Java platformunda yüksek verimli eşzamanlı uygulamaları yazma, koruma ve gözlemleme çabasını önemli ölçüde azaltmayı amaçlayan sanal iş parçacıkları sunar. Bu bir önizleme özelliği. Aşağıdaki örneği göz önünde bulundurun:

public class Main {

    public static void main(String[] args) throws InterruptedException {
        var vThread = Thread.startVirtualThread(() -> {
            System.out.println("Hello from the virtual thread");
        });

        vThread.join();
    }
}

Bu bir önizleme özelliği olduğundan, geliştiricinin şunları sağlaması gerekir: --enable-preview aşağıdaki komutta gösterildiği gibi bu kodu derlemek için bayrak:

javac --release 19 --enable-preview Main.java

Programı çalıştırmak için de aynı bayrak gereklidir:

java --enable-preview Main

Ancak, kişi bunu kullanarak doğrudan çalıştırabilir. kaynak kodu başlatıcısı. Bu durumda, komut satırı şöyle olacaktır:

java --source 19 --enable-preview Main.java

bu JShell seçeneği de mevcuttur ancak önizleme özelliğinin de etkinleştirilmesini gerektirir:

Süre Thread.startVirtualThread(Runnable) sanal bir iş parçacığı oluşturmanın uygun yoludur, yeni API’ler Thread.Builder, Thread.ofVirtual()ve Thread.ofPlatform() sanal ve platform konuları oluşturmak için eklendi.

Bu konuda daha fazla bilgi edinmek istiyorsanız, lütfen şu adrese gidin: GitHub depom.

2. JEP 428: Yapılandırılmış Eşzamanlılık (İnkübatör)

Yapılandırılmış Eşzamanlılık farklı iş parçacıkları üzerinde çalışan birden çok görevi atomik bir işlem olarak ele almanıza olanak tanır ve çok iş parçacıklı programlamayı kolaylaştırır. Sonuç olarak, hata işleme ve iptal etme basitleştirilecek, güvenilirlik artacak ve gözlemlenebilirlik artırılacaktır. Bir örnek görelim:

Response handle() throws ExecutionException, InterruptedException {

   try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
       Future<String> user = scope.fork(() -> findUser());
       Future<Integer> order = scope.fork(() -> fetchOrder());

       scope.join();          // Join both forks
       scope.throwIfFailed(); // ... and propagate errors

       // Here, both forks have succeeded, so compose their results
       return new Response(user.resultNow(), order.resultNow());
   }
}

Bu API, JDK 19 için de hedeflenen JEP 425, Virtual Threads (Önizleme) üzerinde çalışır.

Yukarıdaki kodu aşağıdaki komutta gösterildiği gibi derleyin:

javac --release 19 --enable-preview --add-modules jdk.incubator.concurrent Main.java

Programı çalıştırmak için de aynı bayrak gereklidir:

java --enable-preview --add-modules jdk.incubator.concurrent Main;

Ancak, kaynak kod başlatıcısını kullanarak bunu doğrudan çalıştırabilirsiniz. Bu durumda, komut satırı şöyle olacaktır:

java --source 19 --enable-preview --add-modules jdk.incubator.concurrent Main.java

JShell seçeneği de mevcuttur, ancak önizleme özelliğinin de etkinleştirilmesini gerektirir:

jshell --enable-preview --add-modules jdk.incubator.concurrent

3. JEP 427: Anahtar için Model Eşleştirme (Üçüncü Önizleme)

bu üçüncü önizleme Java programlama diline anahtar ifadeleri ve ifadeleri için bir kalıp eklemektir. Karmaşık veri odaklı sorguların özlü ve güvenli ifadesi için, her biri farklı bir eyleme sahip birden çok modele karşı test yapılmasına olanak tanır. Aşağıdaki örneği göz önünde bulundurun:

package ca.bazlur;

public class PatternMatching {

  public static String transform(Integer status) {

    return switch (status) {
      case 200 -> "Ok";
      case 301 -> "Moved Permanently";
      case 404 -> "Not found";
      case 500 -> "Internal Server Error";
      case Number n when n.intValue() >= 600 -> "Invalid";
      default -> "Valid";
    };
  }

  public static void main(String[] args) {
    System.out.println(transform(200));
    System.out.println(transform(600));
    System.out.println(transform(404));
  }
}

Bu aynı zamanda geliştiricilerin eklemesini gerektiren bir önizleme özelliğidir. --enable-preview.

4. JEP 424: Yabancı İşlev ve Bellek API’si (Önizleme)

kullanarak Yabancı İşlev ve Bellek API’si, Java uygulamaları, JRE’de yerleşik olmayan verilerle konuşabilir ve bunları kullanabilir. JNI’nin güçlükleri ve güvenlik endişeleri olmadan, Java programları artık yerel belleğe erişebilir, yerel işlevleri çağırabilir ve yerel verileri işleyebilir. Örnek:

Linker linker = Linker.nativeLinker();
SymbolLookup stdlib = linker.defaultLookup();
MethodHandle radixSort = linker.downcallHandle(
                             stdlib.lookup("radixsort"), ...);

Bu JEP hakkında daha fazla bilgi edinmek isteyen geliştiriciler yararlanabilir Bu diziler.

5. JEP 405: Kayıt Modelleri (Önizleme)

Amacı Kayıt Kalıpları dili, kayıt değerlerinin yapısını bozmak için kullanılabilecek kayıt kalıplarıyla zenginleştirmektir. “…sağlam, bildirime dayalı ve birleştirilebilir bir veri gezinme ve işleme biçimini etkinleştirmek” için kayıt kalıpları, tür kalıplarıyla birleştirilebilir.

Aşağıdaki örneği ele alalım:

package ca.bazlur;

import java.util.stream.Stream;

public class Main {

  public static void main(String[] args) {
    var s1 = new Circle(5);
    var s2 = new Rectangle(2, 4);
    var s3 = new Triangle(3, 5);

    Stream.of(s1, s2, s3, 42).forEach(e -> {
      var area = switch (e) {
        case Circle c -> "Radius of the circle: " + c.radius + " and area: "+ c.area();
        case Rectangle r -> "Height "+ r.height + ", width: "+ r.width +" and the area of Rectangle: " + r.area();
        case Shape s -> "Area of the Shape: " + s.area();
        case Integer n -> "It is: " + n;
        default -> "not supported";
      };
      System.out.println(area);
    });
  }

  private interface Shape {
    int area();
  }

  record Triangle(int baseLength, int height) implements Shape {

    @Override
    public int area() {
      return baseLength * this.height / 2;
    }
  }

  record Rectangle(int height, int width) implements Shape {

    @Override
    public int area() {
      return height * width;
    }
  }

  record Circle(int radius) implements Shape {

    @Override
    public int area() {
      return (int) (Math.pow(this.radius, 2) * Math.PI);
    }
  }
}

Bu aynı zamanda bir önizleme özelliği olduğundan, geliştiricilerin --enable-preview yukarıdaki örneği derlerken.

Çözüm

İşte aldın. Bunlar en çok beklediğim beş özellik.

Lütfen bu özelliklerin hiçbirinin, ön izleme sürecinden geçmeden bir üretim ortamında kullanılmaması gerektiğini unutmayın. Ancak, bunları denemeniz her zaman önerilir ve bir sorun bulunursa geri bildirim çok takdir edilir. Ancak bu özellik kümesi, gelecek LTS sürümünde görmeyi umduğumuz tek şey.

Bir cevap yazın

Ready to Grow Your Business?

We Serve our Clients’ Best Interests with the Best Marketing Solutions. Find out More

How Can We Help You?

Need to bounce off ideas for an upcoming project or digital campaign? Looking to transform your business with the implementation of full potential digital marketing?

For any career inquiries, please visit our careers page here.
[contact-form-7 404 "Bulunamadı"]