جاوا SE 17 ریلیز

چھ ماہ کی ترقی کے بعد، اوریکل نے جاوا SE 17 (جاوا پلیٹ فارم، سٹینڈرڈ ایڈیشن 17) جاری کیا، جو اوپن سورس اوپن جے ڈی کے پروجیکٹ کو حوالہ کے نفاذ کے طور پر استعمال کرتا ہے۔ کچھ متروک خصوصیات کو ہٹانے کے استثنا کے ساتھ، Java SE 17 جاوا پلیٹ فارم کی پچھلی ریلیز کے ساتھ پسماندہ مطابقت برقرار رکھتا ہے - زیادہ تر پہلے لکھے جاوا پروجیکٹ نئے ورژن کے تحت چلنے پر بغیر کسی تبدیلی کے کام کریں گے۔ Java SE 17 (JDK، JRE اور Server JRE) کی انسٹال کرنے کے لیے تیار بلڈز لینکس (x86_64، AArch64)، Windows (x86_64) اور macOS (x86_64، AArch64) کے لیے تیار ہیں۔ OpenJDK پروجیکٹ کے ذریعے تیار کیا گیا، Java 17 ریفرنس کا نفاذ GPLv2 لائسنس کے تحت مکمل طور پر اوپن سورس ہے، جس میں GNU ClassPath استثناء تجارتی مصنوعات کے ساتھ متحرک لنکنگ کی اجازت دیتا ہے۔

Java SE 17 کو لانگ ٹرم سپورٹ (LTS) ریلیز کے طور پر درجہ بندی کیا گیا ہے، جو 2029 تک اپ ڈیٹس حاصل کرتی رہے گی۔ پچھلے جاوا 16 سنگ میل کی ریلیز کے لیے اپ ڈیٹس بند کر دیے گئے ہیں۔ Java 11 کی پچھلی LTS برانچ کو 2026 تک سپورٹ کیا جائے گا۔ اگلی LTS ریلیز ستمبر 2024 کو شیڈول ہے۔ آئیے ہم آپ کو یاد دلاتے ہیں کہ جاوا 10 کی ریلیز کے ساتھ ہی، پروجیکٹ نے ایک نئے ترقیاتی عمل کی طرف رخ کیا، جس کا مطلب نئی ریلیزز کی تشکیل کے لیے ایک چھوٹا سا دور ہے۔ نئی فعالیت اب ایک مسلسل اپ ڈیٹ شدہ ماسٹر برانچ میں تیار کی گئی ہے، جس میں ریڈی میڈ تبدیلیاں شامل ہیں اور جس سے ہر چھ ماہ بعد برانچز کی جاتی ہیں تاکہ نئی ریلیز کو مستحکم کیا جا سکے۔

جاوا 17 میں نئی ​​خصوصیات شامل ہیں:

  • "سوئچ" ایکسپریشنز میں پیٹرن کی مماثلت کا تجرباتی نفاذ تجویز کیا گیا ہے، جو "کیس" لیبلز میں قطعی اقدار کے استعمال کی اجازت نہیں دیتا ہے، بلکہ ایک ہی وقت میں اقدار کی ایک سیریز کا احاطہ کرنے والے لچکدار ٹیمپلیٹس کو استعمال کرنے کی اجازت دیتا ہے، جس کے لیے پہلے بوجھل استعمال کرنا ضروری تھا۔ "اگر... اور" اظہار کی زنجیریں۔ اس کے علاوہ، "سوئچ" میں NULL اقدار کو سنبھالنے کی صلاحیت ہے۔ اعتراض o = 123L; اسٹرنگ فارمیٹ = سوئچ (o) { کیس انٹیجر i -> String.format("int %d", i); کیس Long l -> String.format("long %d", l)؛ کیس Double d -> String.format("double %f", d)؛ کیس String s -> String.format("String %s", s); پہلے سے طے شدہ -> o.toString(); };
  • مہر بند کلاسز اور انٹرفیسز کے لیے مستحکم سپورٹ، جو دیگر کلاسز اور انٹرفیسز کے ذریعے عمل درآمد کو وراثت، توسیع یا اوور رائیڈ کرنے کے لیے استعمال نہیں کیا جا سکتا۔ مہر بند کلاسز رسائی میں ترمیم کرنے والوں کے مقابلے سپر کلاس کے استعمال کو محدود کرنے کا ایک زیادہ اعلانیہ طریقہ بھی فراہم کرتی ہیں، جس کی بنیاد پر توسیع کے لیے اجازت دی گئی ذیلی کلاسوں کو واضح طور پر درج کرنا ہے۔ پیکیج com.example.geometry؛ عوامی مہربند کلاس شیپ پرمٹس com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • ویکٹر API کا دوسرا پیش نظارہ تجویز کیا گیا ہے، جو ویکٹر کیلکولیشنز کے لیے فنکشن فراہم کرتا ہے جو x86_64 اور AArch64 پروسیسرز پر ویکٹر ہدایات کا استعمال کرتے ہوئے عمل میں لایا جاتا ہے اور آپریشنز کو ایک سے زیادہ اقدار (SIMD) پر بیک وقت لاگو کرنے کی اجازت دیتا ہے۔ اسکیلر آپریشنز کے آٹو ویکٹرائزیشن کے لیے HotSpot JIT کمپائلر میں فراہم کردہ صلاحیتوں کے برعکس، نیا API متوازی ڈیٹا پروسیسنگ کے لیے واضح طور پر ویکٹرائزیشن کو کنٹرول کرنا ممکن بناتا ہے۔
  • فارن فنکشن اور میموری API کا ایک پیش نظارہ شامل کیا گیا، جو ایپلیکیشنز کو جاوا رن ٹائم سے باہر کوڈ اور ڈیٹا کے ساتھ تعامل کرنے کی اجازت دیتا ہے۔ نیا API آپ کو غیر JVM فنکشنز کو مؤثر طریقے سے کال کرنے اور غیر JVM کے زیر انتظام میموری تک رسائی کی اجازت دیتا ہے۔ مثال کے طور پر، آپ بیرونی مشترکہ لائبریریوں سے فنکشنز کو کال کر سکتے ہیں اور JNI استعمال کیے بغیر پروسیس ڈیٹا تک رسائی حاصل کر سکتے ہیں۔
  • macOS رینڈرنگ انجن جو Java 2D API کو طاقت دیتا ہے، جو بدلے میں Swing API کو طاقت دیتا ہے، کو میٹل گرافکس API استعمال کرنے کے لیے ڈھال لیا گیا ہے۔ macOS پلیٹ فارم ڈیفالٹ کے طور پر OpenGL کا استعمال جاری رکھتا ہے، اور میٹل سپورٹ کو فعال کرنے کے لیے "-Dsun.java2d.metal=true" کی ترتیب اور کم از کم macOS 10.14.x چلانے کی ضرورت ہوتی ہے۔
  • macOS/AArch64 پلیٹ فارم کے لیے ایک پورٹ شامل کیا گیا (نئے Apple M1 چپس پر مبنی ایپل کمپیوٹرز)۔ بندرگاہ کی ایک خاص خصوصیت W^X (Write XOR Execute) میموری پروٹیکشن میکانزم کے لیے سپورٹ ہے، جس میں لکھنے اور عمل کرنے کے لیے بیک وقت میموری کے صفحات تک رسائی حاصل نہیں کی جا سکتی۔ (کوڈ کو لکھنے کے غیر فعال ہونے کے بعد ہی عمل میں لایا جاسکتا ہے، اور میموری کے صفحے پر لکھنا صرف عمل درآمد کے غیر فعال ہونے کے بعد ہی ممکن ہے)۔
  • فلوٹنگ پوائنٹ ایکسپریشنز کے لیے صرف سخت ایف پی سیمنٹکس استعمال کرنے پر واپس لوٹا گیا۔ جاوا 1.2 کی ریلیز کے بعد سے دستیاب "ڈیفالٹ" سیمنٹکس کے لیے سپورٹ کو بند کر دیا گیا ہے، جس میں بہت پرانے x87 ریاضی کے کوپروسیسر والے سسٹمز پر کام کرنے کے لیے آسانیاں شامل ہیں (SSE2 ہدایات کی آمد کے بعد، اضافی سیمنٹکس کی ضرورت ختم ہو گئی)۔
  • سیوڈورنڈم نمبر جنریٹرز کے لیے نئی قسم کے انٹرفیس لاگو کیے گئے ہیں، اور بے ترتیب نمبروں کی بہتر نسل کے لیے اضافی الگورتھم لاگو کیے گئے ہیں۔ ایپلی کیشنز کو سیوڈورنڈم نمبر بنانے کے لیے الگورتھم کا انتخاب کرنے کا موقع دیا جاتا ہے۔ بے ترتیب آبجیکٹ اسٹریمز بنانے کے لیے بہتر سپورٹ۔
  • اہم APIs جیسے sun.misc.Unsafe کے استثناء کے ساتھ، تمام JDK انٹرنلز کی سخت انکیپسولیشن کو نافذ کیا گیا۔ سخت انکیپسولیشن کوڈ سے داخلی کلاسز، طریقوں اور فیلڈز تک رسائی کی کوششوں کو روکتا ہے۔ پہلے، "--illegal-access=permit" آپشن کا استعمال کرتے ہوئے سخت انکیپسولیشن موڈ کو غیر فعال کیا جا سکتا تھا، لیکن اب اسے فرسودہ کر دیا گیا ہے۔ وہ ایپلیکیشنز جن کو داخلی کلاسز، طریقوں اور فیلڈز تک رسائی کی ضرورت ہوتی ہے انہیں --add-opens آپشن یا مینی فیسٹ فائل میں Add-Opens وصف کا استعمال کرتے ہوئے واضح طور پر ان کی وضاحت کرنی چاہیے۔
  • ایپلی کیشنز کو ڈیٹا ڈی سیریلائزیشن فلٹرز کی وضاحت کرنے کی صلاحیت دی جاتی ہے، جو سیاق و سباق کے لحاظ سے حساس اور متحرک طور پر مخصوص ڈی سیریلائزیشن آپریشنز کی بنیاد پر منتخب کیے جا سکتے ہیں۔ مخصوص فلٹرز پوری ورچوئل مشین (JVM-wide) پر لاگو ہوتے ہیں، یعنی نہ صرف خود ایپلیکیشن کا احاطہ کرتا ہے بلکہ ایپلی کیشن میں استعمال ہونے والی تھرڈ پارٹی لائبریریوں کا بھی احاطہ کرتا ہے۔
  • Swing نے javax.swing.filechooser.FileSystemView.getSystemIcon طریقہ شامل کیا ہے تاکہ ہائی ڈی پی آئی اسکرینوں پر UI کو بہتر بنانے کے لیے بڑے آئیکن لوڈ کیے جائیں۔
  • java.net.DatagramSocket API علیحدہ java.net.MulticastSocket API کی ضرورت کے بغیر ملٹی کاسٹ گروپس سے منسلک ہونے کے لیے معاونت فراہم کرتا ہے۔
  • IGV (آئیڈیل گراف ویژولائزر) کی افادیت کو بہتر بنایا گیا ہے، جو ہاٹ سپاٹ VM C2 JIT کمپائلر میں انٹرمیڈیٹ کوڈ کی نمائندگی کا انٹرایکٹو ویژولائزیشن فراہم کرتا ہے۔
  • JavaDoc میں، javac compiler کے ساتھ مشابہت کے ساتھ، جب کوئی ایرر آؤٹ پٹ ہوتا ہے، تو سورس فائل میں دشواری والی لائن کی تعداد اور ایرر کا مقام اب اشارہ کیا جاتا ہے۔
  • سسٹم کریکٹر انکوڈنگ (UTF-8, koi8-r, cp1251, وغیرہ) کے نام کی عکاسی کرتے ہوئے, native.encoding پراپرٹی کو شامل کیا گیا۔
  • java.time.InstantSource انٹرفیس کو شامل کیا گیا ہے، جو ٹائم زون کے حوالے کے بغیر وقت میں ہیرا پھیری کی اجازت دیتا ہے۔
  • java.util.HexFormat API کو ہیکساڈیسیمل نمائندگی میں تبدیل کرنے اور اس کے برعکس شامل کیا گیا۔
  • کمپائلر میں ایک بلیک ہول موڈ شامل کیا گیا ہے، جو ڈیڈ کوڈ کے خاتمے کے آپریشنز کو غیر فعال کرتا ہے، جو کارکردگی کے ٹیسٹ کے دوران استعمال کیا جا سکتا ہے۔
  • غیر مطابقت پذیر موڈ میں لاگز کو ریکارڈ کرنے کے لیے رن ٹائم میں "-Xlog:async" اختیار شامل کیا گیا۔
  • محفوظ کنکشن قائم کرتے وقت، TLS 1.3 بطور ڈیفالٹ فعال ہوتا ہے (پہلے TLS 1.2 استعمال کیا جاتا تھا)۔
  • پہلے اعلان کردہ متروک ایپلٹ API (java.applet.Applet*, javax.swing.JApplet)، جو براؤزر میں جاوا ایپلی کیشنز کو چلانے کے لیے استعمال کیا جاتا تھا، کو ہٹانے کے لیے سلیٹڈ کے زمرے میں منتقل کر دیا گیا ہے (سپورٹ کے خاتمے کے بعد مطابقت ختم ہو گئی براؤزرز کے لیے جاوا پلگ ان کے لیے)۔
  • سیکیورٹی مینیجر، جو طویل عرصے سے اپنی مطابقت کھو چکا ہے اور براؤزر پلگ ان کی حمایت ختم ہونے کے بعد لاوارث نکلا ہے، کو ہٹانے کے لیے مقرر کردہ زمرے میں منتقل کر دیا گیا ہے۔
  • RMI ایکٹیویشن میکانزم کو ہٹا دیا گیا ہے، جو پرانا ہے، جاوا 8 میں ایک آپشن کے زمرے میں شامل ہے اور جدید پریکٹس میں تقریباً کبھی استعمال نہیں ہوتا ہے۔
  • ایک تجرباتی کمپائلر جو ہاٹ اسپاٹ جے وی ایم کے لیے جاوا کوڈ کی متحرک تالیف کے لیے جے آئی ٹی (صرف وقت میں) کو سپورٹ کرتا ہے، ساتھ ہی ورچوئل مشین کو شروع کرنے سے پہلے مشین کوڈ میں کلاسوں کی متوقع تالیف (AOT، وقت سے پہلے) کا طریقہ۔ کو SDK سے ہٹا دیا گیا ہے۔ کمپائلر جاوا میں لکھا گیا تھا اور گرال پروجیکٹ کے کام پر مبنی تھا۔ واضح رہے کہ کمپائلر کی دیکھ بھال کے لیے بہت زیادہ محنت درکار ہوتی ہے، جو کہ اس وقت جائز نہیں ہے جب ڈویلپرز کی طرف سے کوئی مطالبہ نہ ہو۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں