JavaRush /جاوا بلاگ /Random-UR /جاوا 14: نیا کیا ہے؟

جاوا 14: نیا کیا ہے؟

گروپ میں شائع ہوا۔
دنیا کے مسائل دنیا کے مسائل ہیں، اور نیا جاوا شیڈول پر ہے۔ یعنی ہر چھ ماہ میں ایک بار۔ جاوا 14 کا ریلیز ورژن 17 مارچ کو جاری کیا گیا تھا، اور اس نے ڈویلپرز کے لیے زبان میں کئی دلچسپ اختراعات متعارف کروائی تھیں۔ ان میں ریکارڈجاوا 14: نیا کیا ہے؟  - 1 کی ورڈ کے لیے تجرباتی معاونت ، " مثال کے طور پر " آپریٹر میں پیٹرن کی مماثلت کے لیے سپورٹ، زیادہ صارف دوست NullPointerExceptions ، ٹیکسٹ بلاکس کی توسیع شدہ "پیش نظارہ" ، ایک اپ ڈیٹ شدہ ڈیفالٹ سوئچ ، اور بہت کچھ۔ آئیے آپ کو یاد دلاتے ہیں کہ جاوا میں تمام اختراعات توسیعی تجاویز ( JEP, Java Enhancement Proposals ) سے شروع ہوتی ہیں۔ ڈویلپر تبدیلیاں تجویز کرتے ہیں، ان کا جائزہ "آفیشل" جاوا کے والدین کے ذریعے لیا جاتا ہے، اور پھر ان میں سے کچھ تبدیلیوں کو قبول کیا جاتا ہے، جس کے بعد وہ JDK کا حصہ بن جاتے ہیں۔ اور اب - ترتیب میں ہر چیز کے بارے میں.

JEP 359: ریکارڈز

ریکارڈز، جسے Records بھی کہا جاتا ہے، JDK 14 کے لیے پیش نظارہ موڈ میں دستیاب ہیں، اور یہ جاوا کے لیے بالکل نئی چیز ہے۔ درحقیقت، ہمارے سامنے ایک نئی قسم ہے جو والہلہ پروجیکٹ کے دوران تیار کی گئی تھی ۔ ریکارڈز گنتی کی طرح ہوتے ہیں اور آپ کو اپنے کوڈ کو آسان بنانے کی اجازت دیتے ہیں۔ بنیادی طور پر، وہ ان کلاسوں کی جگہ لے لیتے ہیں جن میں ریاست ہے لیکن کوئی رویہ نہیں۔ سیدھے الفاظ میں، فیلڈز ہیں، کوئی طریقہ نہیں۔ کلاسز کے معاملے میں، ہمیں بعض اوقات بہت زیادہ دہرائے جانے والے کوڈ لکھنے پڑتے ہیں جو ہمیشہ ضروری نہیں ہوتے: کنسٹرکٹرز، ایکسیسرز، برابر()، ہیش کوڈ()، ٹو اسٹرنگ()، وغیرہ۔ اس بار بار کوڈ سے بچنے کے لیے، جاوا پلان ریکارڈ استعمال کرنے کے لیے۔ یہاں کلاسک ورژن ہے:
final class Triangle {
 	public final int x;
public final int y;
public final int z;

    public Triangle(int x, int y, int z) {
         this.x = x;
         this.y = y;
    this.z = z;
    }
    // equals, hashCode, toString
آئیے جاوا 14 پر جائیں اور ریکارڈ استعمال کریں:
public record Triangle(int x, int y, int z){}
بس۔ براہ کرم نوٹ کریں کہ ریکارڈنگز فی الحال پیش نظارہ کی شکل میں موجود ہیں، لہذا انہیں عملی طور پر آزمانے کے لیے آپ کو jdk14 ڈاؤن لوڈ کرنے اور کمانڈ درج کرنے کی ضرورت ہے:
javac —enable-preview —release 14 Triangle.java
ریکارڈز کلاسز ہیں، حدود کے باوجود۔ وہ دوسری کلاسوں میں توسیع یا فیلڈز کا اعلان نہیں کر سکتے ہیں (سوائے پرائیویٹ فائنل کے جو ریاست کے اعلان کے اجزاء سے مطابقت رکھتے ہیں)۔ ریکارڈ واضح طور پر حتمی ہیں اور خلاصہ نہیں ہوسکتے ہیں۔ ریکارڈز باقاعدہ کلاسوں سے مختلف ہیں کہ وہ اپنے API کو اس کی نمائندگی سے الگ نہیں کرسکتے ہیں۔ لیکن آزادی کے نقصان کی تلافی درستگی میں اضافہ سے کی جاتی ہے۔ ریکارڈ کے اجزاء بھی واضح طور پر حتمی ہیں۔

JEP 305: مثال کے لیے پیٹرن میچنگ (پیش نظارہ)

پیٹرن میچنگ فیچر ، جاوا 14 میں پیش نظارہ میں متعارف کرایا گیا ہے، کسی چیز کی قسم کی جانچ اور آپریٹر کی مثال میں اس کی تبدیلی کو یکجا کرنے کے لیے ڈیزائن کیا گیا ہے۔ دوسرے الفاظ میں، جاوا 14 سے پہلے، مثال کے طور پر، درج ذیل کوڈ ہوتا:
Object object = Violin;

if (object instanceof Instrument) {
    Instrument instrument = (Instrument) object;
    System.out.println(instrument.getMaster());
}
جیسا کہ آپ دیکھ سکتے ہیں، ہمیں اعتراض کو اس کلاس میں ڈالنا چاہیے جس کے طریقے ہم استعمال کرنا چاہتے ہیں۔ اب جاوا 14 اور منسلک پیٹرن میچنگ فیچر آپ کو کوڈ کو درج ذیل تک کم کرنے کی اجازت دیتا ہے۔
Object object = Violin;

if (object instanceof Instrument instrument){
    System.out.println(instrument.getMaster());
}

JEP 343: پیکیجنگ ٹول (انکیوبیٹر)

JDK 8 کے پاس جاوا پیکجر ٹول تھا جو JavaFX کے لیے ڈیزائن کیا گیا تھا۔ تاہم، JDK 11 کی ریلیز کے ساتھ JavaFX کی جاوا سے علیحدگی کے بعد، مقبول javapackager اب دستیاب نہیں رہا۔ Javapackager ایک پیکیجنگ ٹول تھا۔ اس نے جاوا ایپلی کیشنز کو اس طرح پیک کرنے کی اجازت دی کہ وہ دوسرے تمام "نارمل" پروگراموں کی طرح انسٹال ہو سکیں۔ مثال کے طور پر، ونڈوز کے صارفین کے لیے exe فائلیں بنائیں اور جاوا ایپلی کیشن کو انسان کی طرح لانچ کریں - ایک ڈبل کلک کے ساتھ۔ بلاشبہ، اس طرح کے ٹول کی شدید کمی ہے، اس لیے JEP 343 نے ایک نیا ٹول متعارف کرایا، jpackage ، جو جاوا ایپلیکیشن کو پلیٹ فارم کے لیے مخصوص پیکیج میں پیک کرتا ہے جس میں تمام ضروری انحصار شامل ہیں۔ ایک مخصوص پلیٹ فارم کے لیے معاون پیکیج فارمیٹس:
  • لینکس: ڈیب اور آر پی ایم
  • میکوس: پی کے جی اور ڈی ایم جی
  • ونڈوز: MSI اور EXE

JEP 345: G1 کے لیے NUMA-Aware میموری ایلوکیشن

JEP 345 مکمل طور پر NUMA (نان یونیفارم میموری تک رسائی) سپورٹ کو نافذ کرنے کے لیے کام کرتا ہے۔ یہ متفاوت میموری تک رسائی کے فن تعمیرات ہیں، ایک مائیکرو پروسیسر کلسٹر کو ایک ملٹی پروسیسر سسٹم میں ترتیب دینے کا ایک طریقہ جس میں میموری کو مقامی طور پر تقسیم کیا جا سکتا ہے: ہر پروسیسر کور کو تھوڑی مقدار میں مقامی میموری ملتی ہے، جبکہ دوسرے کور کو اس تک رسائی حاصل ہوتی ہے۔ JEP 345 اس طرح کے فن تعمیر سے فائدہ اٹھانے کے لیے G1 کوڑا اٹھانے والے کو لیس کرنے کا ارادہ رکھتا ہے۔ دیگر چیزوں کے علاوہ، یہ نقطہ نظر بہت طاقتور مشینوں پر کارکردگی کو بہتر بنانے میں مدد کرتا ہے۔

JEP 349: JFR ایونٹ اسٹریمنگ

Java Flight Recorder (JFR) اب OpenJDK کا حصہ ہے اور اس لیے آزادانہ طور پر دستیاب ہے۔ JDK 14 JFR ایونٹس (JDK Flight Recorder) کی آن دی فلائی ٹریکنگ کے لیے ایک API شامل کرتا ہے، خاص طور پر فعال اور غیر فعال ایپلی کیشنز کی مسلسل نگرانی کو منظم کرنے کے لیے۔ وہی واقعات ریکارڈ کیے جاتے ہیں جیسا کہ نان سٹریمنگ آپشن کے لیے، 1% سے کم کے اوور ہیڈ کے ساتھ۔ اس طرح ایونٹس کو اسی وقت اسٹریم کیا جائے گا جیسے نان اسٹریمنگ آپشن۔ تاہم، JEP 349 کو متعلقہ صارف کے لیے ہم وقت ساز کال بیکس کی اجازت نہیں دینی چاہیے۔ یہاں تک کہ انٹرمیڈیٹ میموری میں محفوظ کردہ ریکارڈز سے ڈیٹا تک رسائی کے قابل نہیں ہونا چاہئے۔ تکنیکی طور پر، jdk.jfr ماڈیول میں jdk.jfr.consumer پیکیج کو واقعات تک غیر مطابقت پذیر رسائی کے لیے فعالیت کے ساتھ بڑھایا جائے گا۔

JEP 352: نان وولٹائل میپڈ بائٹ بفرز

جیسا کہ آپ جانتے ہیں، Java NIO (New IO) File API JDK 1.4 کے بعد سے ہے، اور پھر پاتھ نامی ایک نیا اضافہ متعارف کرایا گیا۔ پاتھ ایک انٹرفیس ہے جو java.io.File کلاس کو فائل یا ڈائرکٹری کی نمائندگی کے طور پر بدل دیتا ہے جب ہم Java NIO میں کام کرتے ہیں۔ JEP 352 نے MappedByteBuffer کو فائل ڈیٹا کے ایک حصے کو نان ولیٹائل میموری (NVM) میں لوڈ کرنے کے لیے بڑھایا ہے۔ یہ کمپیوٹر میموری، جس میں بجلی بند ہونے پر بھی ڈیٹا ضائع نہیں ہوگا (اکثر پڑھنے کے لیے میموری کہا جاتا ہے)، ڈیٹا کو مستقل طور پر ذخیرہ کرنے کے لیے استعمال کیا جاتا ہے۔ یہ جاوا بڑھانے کی تجویز JDK API کے لیے ایک نیا ماڈیول اور کلاس فراہم کرتی ہے: jdk.nio.mapmode ماڈیول، جو NVM کے حوالے سے میپڈ بائٹ بفرز (MappedByteBuffer) بنانے کے لیے نئے موڈز (READ_ONLY_SYNC, WRITE_ONLY_SYNC) پیش کرتا ہے۔

JEP 358: مددگار NullPointerExceptions

NullPointerExceptions اب زیادہ پروگرامر دوست ہوں گے۔ اس لحاظ سے کہ استثنیٰ کی تفصیل پہلے کی نسبت بہت زیادہ معلوماتی ہوگی۔ اس کی وجہ یہ ہے کہ JVM کو پروگرام بائی کوڈ ہدایات کا زیادہ درست تجزیہ کرنا سکھایا گیا ہے، اور یہ اس بات کی نشاندہی کر سکتا ہے کہ کون سا متغیر صفر کی قدر کی طرف جاتا ہے۔ ہم کہتے ہیں کہ ہمارے پاس کوڈ ہے:
a.getMessage().getUserInfo().getName()
تازہ ترین جاوا میں سے کسی میں، ہمیں معمول کی خرابی کا لاگ ملے گا، جو اس سوال کا جواب نہیں دیتا ہے کہ بالکل null کون ہے:
Exception in thread "main" java.lang.NullPointerException
	at Main.main(Main.java:12)
اور اگر آپ اس پیش نظارہ خصوصیت کو آزمانے کا فیصلہ کرتے ہیں تو جاوا 14 آپ کو کیا دے گا:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "UserInfo().getName()" because the return value of "Message().getUserInfo()" is null
	at Main.main(Main.java:12)
یہ سلسلہ بہت زیادہ قابل فہم ہے اور آپ کو زیادہ تیزی سے غلطی سے نمٹنے کی اجازت دیتا ہے۔

JEP 361: سوئچ ایکسپریشنز (معیاری)

اپ ڈیٹ کردہ سوئچ آپریٹر پچھلے جاوا 12 اور 13 میں دستیاب تھا، لیکن صرف ایک پیش نظارہ خصوصیت کے طور پر، یعنی یہ ڈیفالٹ کے طور پر فعال نہیں تھا۔ اب JDK 14 میں ہر چیز باکس سے باہر کام کرتی ہے۔ جاوا 14 نے سوئچ بلاک کی ایک نئی آسان شکل کو کیس L -> ... لیبلز کے ساتھ متعارف کرایا ہے۔ نیا فارم کچھ معاملات میں کوڈ کو آسان بناتا ہے۔ یہاں ایک دو مثالیں ہیں۔ ہم کہتے ہیں کہ ہمارے پاس ایک اینوم ہے جو ہفتے کے دنوں کی وضاحت کرتا ہے۔ ہم کلاسک کوڈ لکھ سکتے ہیں (جاوا 14 سے پہلے):
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
اور یہاں جاوا 14 کا استعمال کرتے ہوئے ایک آپشن ہے:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
آپ ملٹی لائن بلاکس بھی لکھ سکتے ہیں اور نئے یلڈ کلیدی لفظ کے ساتھ ایک قدر واپس کر سکتے ہیں:
int result = switch (s) {
    case "Working from Home" -> 1;
    case "Working from Office" -> 2;
    default    -> {
        System.out.println("Neither Home nor Office… Cafe? Car? Park?...");
        yield 0;
    }
};
نئے سوئچ کا استعمال کرتے وقت ذہن میں رکھنے کے لیے چند اور اہم چیزیں ہیں ۔ خاص طور پر، آپ کو یاد رکھنے کی ضرورت ہے کہ اختیارات مکمل ہونے چاہئیں۔ یعنی، تمام ممکنہ اقدار کے لیے ایک متعلقہ سوئچ لیبل ہونا چاہیے۔ چونکہ yeld اب ایک کلیدی لفظ ہے، اس لیے جاوا 14 میں yeld نامی کلاس ممکن ہے۔ عام طور پر، اگر آپ اپ ڈیٹ کردہ سوئچز کو استعمال کرنے کا طریقہ سیکھنا چاہتے ہیں، تو JEP 361 پر جائیں اور مطالعہ کریں۔ وہاں بہت ساری دلچسپ معلومات ہیں۔

JEP 362: سولاریس اور اسپارک پورٹس کو فرسودہ کریں۔

یہ ممکن نہیں ہے کہ ہمارے بہت سے قارئین کو سولاریس آپریٹنگ سسٹم کے بارے میں یاد ہو ۔ یہ UNIX پر مبنی آپریٹنگ سسٹم، جو جاوا کے والدین سن مائیکرو سسٹم نے بنایا تھا، بنیادی طور پر SPARC فن تعمیر پر سرورز کے لیے استعمال کیا گیا تھا... فی مربع سینٹی میٹر بہت زیادہ غیر مانوس الفاظ؟ کوئی بڑی بات نہیں: JEP 362 Solaris/SPARC، Solaris/x64، اور Linux/SPARC پلیٹ فارمز کے لیے سپورٹ ختم کرتا ہے۔ یعنی، ان کی بندرگاہیں اب فرسودہ ہیں، اور مستقبل میں وہ غالباً OpenJDK سے ہٹا دی جائیں گی۔ تاہم، جاوا کے پرانے ورژن (JDK 14 سے پہلے) Solaris/SPARC، Solaris/x64 اور Linux/SPARC بندرگاہوں میں ترمیم کے بغیر کام کرنا چاہیے۔ اگر آپ تاریخ کے شائقین ہیں اور ماضی کے دور کی ٹیکنالوجیز میں دلچسپی رکھتے ہیں تو ویکیپیڈیا پر جائیں اور SPARС فن تعمیر کے بارے میں پڑھیں ۔

JEP 363: کنکرنٹ مارک سویپ (CMS) گاربیج کلیکٹر کو ہٹا دیں۔

CMS کوڑا کرکٹ جمع کرنے والے (کنکرنٹ مارک سویپ) کو ہٹانے کا ہدف بنایا گیا ہے کیونکہ دو سال پہلے اسے متروک کے طور پر نشان زد کیا گیا تھا اور اسے برقرار نہیں رکھا گیا تھا۔ تاہم، CMS GC کا استعمال کرتے ہوئے جاوا کے پرانے ورژن کے صارفین سانس چھوڑ سکتے ہیں - اس JEP کا مقصد پہلے JDK ریلیز سے بلڈر کو ہٹانا نہیں ہے۔ اس کے علاوہ، ParallelScavenge اور SerialOld کوڑا کرکٹ جمع کرنے والے الگورتھم ("-XX:+UseParallelGC -XX:-UseParallelOldGC" اختیارات کے ساتھ چل رہا ہے) کے امتزاج کو فرسودہ کر دیا گیا ہے۔

JEP 364: ZGC macOS پر اور JEP 365: ZGC ونڈوز پر

ایک دلچسپ کچرا جمع کرنے والا ہے جسے Z Garbage Collector (ZGC) کہا جاتا ہے ۔ یہ غیر فعال موڈ میں کام کرتا ہے، اور کچرا جمع کرنے کی وجہ سے ہونے والی تاخیر کو کم کرنے کی کوشش کرتا ہے: ZGC استعمال کرتے وقت رکنے کا وقت 10 ms سے زیادہ نہیں ہوتا ہے۔ یہ چھوٹے ڈھیروں اور وشال کے ساتھ کام کر سکتا ہے (وہ جو بہت سے ٹیرا بائٹس لیتے ہیں)۔ JEP 364 اور JEP 365 عملی طور پر جڑواں ہیں۔ JEP 364 Z کوڑا کرکٹ جمع کرنے والے کو MacOS میں لاتا ہے۔ JEP کا حصہ غیر استعمال شدہ ڈیوائس میموری کو آزاد کرنے کے لیے کلکٹر کی فعالیت کو بھی بیان کرتا ہے، جیسا کہ JEP 351 میں بیان کیا گیا ہے ، یہ Java 13 کے ساتھ ہوتا ہے۔ macOS پر ZGC کا نفاذ دو حصوں پر مشتمل ہے:
  • macOS پر ملٹی میپنگ میموری سپورٹ
  • مسلسل میموری ریزرویشن کے لیے ZGC سپورٹ
JEP 365 ZGC کے لیے پہلے سے ونڈوز پر اور تجرباتی موڈ میں بھی مدد فراہم کرتا ہے۔ یہ مندرجہ ذیل ہے:
  • ملٹی میپنگ میموری سپورٹ
  • ایک مخصوص ایڈریس اسپیس میں صفحہ فائل کی بنیاد پر میموری میپنگ کے لیے معاونت
  • ڈھیر کے صوابدیدی حصوں کی نقشہ سازی اور ان میپنگ کے لیے معاونت
  • ڈھیر کے صوابدیدی حصوں کا ارتکاب کرنے اور غیر کمٹمنٹ کرنے کے لیے معاونت

JEP 366: ParallelScavenge + SerialOld GC امتزاج کو مسترد کریں

یہ JEP متوازی اسکاوینج اور سیریل اولڈ گاربیج اکٹھا کرنے والے الگورتھم کے امتزاج کو مسترد کرتا ہے۔ کمانڈ لائن پیرامیٹرز -XX: + UseParallelGC -XX: -UseParallelOldGC کا استعمال کرتے ہوئے اس مجموعہ کو دستی طور پر فعال کرنا تھا۔ مصنفین کا خیال ہے کہ یہ مجموعہ بہت مخصوص ہے، لیکن اس کے لیے اہم دیکھ بھال کی کوشش کی بھی ضرورت ہے۔ لہذا اب -XX: UseParallelOldGC آپشن کو فرسودہ کر دیا گیا ہے اور اگر استعمال کیا جائے تو ایک انتباہ ظاہر ہوگا۔

JEP 367: Pack200 ٹولز اور API کو ہٹا دیں۔

Pack200 ایک آرکائیو فارمیٹ ہے جو مرتب شدہ جاوا کلاس فائلوں کو ذخیرہ کرنے کے لیے موزوں ہے۔ اس ٹول کو جاوا 11 سے فرسودہ نشان زد کر دیا گیا ہے۔ اب pack200، unpack200 اور Pack200 API ٹولز کو java.util.jar پیکیج سے ہٹانے کا باضابطہ اعلان کیا گیا ہے ۔ یہ ٹیکنالوجی جاوا 5 میں بہت محدود بینڈوڈتھ (موڈیمز، یہ کہنا اور یاد رکھنا خوفناک ہے، 56k) اور ہارڈ ڈرائیوز پر اسٹوریج کی ناکافی جگہ سے نمٹنے کے ایک ذریعہ کے طور پر واپس متعارف کرایا گیا تھا۔ کچھ عرصہ قبل جاوا 9 نے نئی کمپریشن اسکیمیں متعارف کروائی تھیں۔ ڈویلپرز کو jlink استعمال کرنے کی ترغیب دی جاتی ہے ۔

JEP 368: ٹیکسٹ بلاکس (دوسرا پیش نظارہ)

ٹیکسٹ بلاکس پہلی بار جاوا 13 میں نمودار ہوئے۔ یہ ملٹی لائن سٹرنگ لٹریلز ہیں جو زیادہ تر فرار کے سلسلے کی ضرورت کو روکتے ہیں، خود بخود سٹرنگ کو فارمیٹ کرتے ہیں، اور اگر ضرورت ہو تو ڈویلپر کو اسٹرنگ کو فارمیٹ کرنے کی بھی اجازت دیتے ہیں۔ یہ کارآمد خصوصیت اب جاوا 14 (دوسرا پیش نظارہ) میں دستیاب ہے۔ ٹیکسٹ بلاکس کا بنیادی مقصد مبہم ملٹی لائن لٹریلز کو سنبھالنا بہتر بنانا ہے۔ یہ SQL سوالات، HTML اور XML کوڈ، اور JSON کو پڑھنے اور لکھنے کو بہت آسان بناتا ہے۔ ٹیکسٹ بلاکس کے بغیر HTML کی مثال:
String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, JavaRush Student</p>\n" +
              "    </body>\n" +
              "</html>\n";
ٹیکسٹ بلاکس کے ساتھ اسی کی نمائندگی کیسے کریں:
String html = """
              <html>
                  <body>
                      <p>Hello, JavaRush Student</p>
                  </body>
              </html>
              """;
ابتدائی حد بندی تین ڈبل اقتباس حروف (""") کی ایک ترتیب ہے، اس کے بعد صفر یا اس سے زیادہ خالی جگہیں، اور پھر ایک لائن ڈیلیمیٹر۔ مواد افتتاحی حد بندی کے لائن ڈیلیمیٹر کے بعد پہلے حرف سے شروع ہوتا ہے۔ اختتامی حد بندی ہے تین ڈبل اقتباس حروف کی ترتیب " _ ) کا انتخاب کیا گیا تھا تاکہ حروف کو فرار کیے بغیر دکھایا جا سکے، اور سٹرنگ لٹریل سے ٹیکسٹ بلاک کو بصری طور پر الگ کیا جا سکے۔ 2019 کے اوائل میں، JEP 355 نے JEP 326 (Raw String literals) کے تسلسل کے طور پر ٹیکسٹ بلاکس کی تجویز پیش کی، لیکن وہ واپس لے لیے گئے۔ اس سال کے آخر میں، JDK 13 نے ٹیکسٹ بلاک کا پیش نظارہ فیچر متعارف کرایا، اور اب Java 14 نے فرار ہونے کے دو نئے سلسلے شامل کیے ہیں۔ یہ ایک لائن ٹرمینیٹر ہے، ڈینویٹڈ \، اور دوسرا سنگل اسپیس کے لیے ہے، ڈینوٹڈ /s۔ ٹیکسٹ بلاکس کے بغیر نئی لائنیں استعمال کرنے کی ایک مثال:
String literal = "This is major Tom to Ground Control " +
"I am stepping through the door... " +
"Wait… What???";
اور اب فرار کی ترتیب کے ساتھ \<line-terminator>:
String text = """
                This is major Tom to Ground Control \
                I am stepping through the door... \
                WaitWhat???\
                """;
فرار کی ترتیب \s کا استعمال ٹریلنگ وائٹ اسپیس کے حساب سے کیا جاتا ہے، جسے مرتب کرنے والے نے بطور ڈیفالٹ نظر انداز کر دیا ہے۔ یہ اس سے پہلے والی تمام خالی جگہ کو محفوظ رکھتا ہے۔ مثال:
String text1 = """
               line1
               line2 \s
               line3
               """;

String text2 = "line1\nline2 \nline3\n";
text1اور text2ایک جیسے ہیں.

JEP 370: غیر ملکی میموری تک رسائی API (انکیوبیٹر)

بہت سے مشہور جاوا لائبریریوں اور پروگراموں کو بیرونی میموری تک رسائی حاصل ہے۔ مثال کے طور پر، Ignite، MapDB، Memcached اور Netty ByteBuf API۔ ایسا کرنے سے، وہ کوڑے کو جمع کرنے کے ساتھ منسلک لاگت اور غیر متوقع صلاحیت سے بچ سکتے ہیں (خاص طور پر جب بڑے کیشز پیش کرتے ہیں)، ایک سے زیادہ پروسیسز میں میموری کا اشتراک کرتے ہیں، اور میموری میں فائلوں کی نقشہ بندی کرکے میموری کے مواد کو سیریلائز اور ڈی سیریلائز کرسکتے ہیں (مثال کے طور پر، mmap کا استعمال کرتے ہوئے)۔ تاہم، جاوا API کے پاس اب بھی بیرونی میموری تک رسائی کے لیے کوئی مناسب حل نہیں ہے۔ JDK 14 میں Foreign-Memory Access API کا ایک پیش نظارہ شامل ہے، جو Java ایپلیکیشنز کو نئے MemorySegment، MemoryAddress، اور MemoryLayout تجریدات کا استعمال کرتے ہوئے JVM ہیپ سے باہر میموری کے علاقوں تک محفوظ اور مؤثر طریقے سے رسائی کی اجازت دیتا ہے۔

نتائج

لہذا آپ کو کیا لگتا ہے؟ جاوا 13 کے مقابلے میں، نیا جاوا 14 مختلف شعبوں میں بہت زیادہ اہم اصلاحات پیش کرتا ہے۔ زیادہ تر امکان ہے کہ، ڈویلپرز کے لیے سب سے اہم اپ ڈیٹ کردہ سوئچ، توسیعی استثناء NullPointerExceptions اور ریکارڈز ہوں گے۔ یا نہیں؟... جاوا 14 کے نئے فیچرز کو آزمانا نہ بھولیں، یہ ابتدائی افراد کے لیے بھی بہت مفید ہے۔ آپ کی تعلیم کے ساتھ گڈ لک!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION