آشنایی با ویژگی های جدید نسخه 18 جاوا

شنبه 21 اسفند 1400

از تاریخ 24 فوریه نسخه 18 جاوا یا کیت توسعه جاوا که به اختصار JDK نامیده می شود وارد نسخه نهایی خود شده است. نسخه جدید جاوا استاندارد که قرار است در تاریخ 22 مارس سال 2022 منتشر شود دارای 9 ویژگی جدید خواهد بود. دقت داشته باشید که ارتقا به نسخه جدید جاوا استاندارد هر شش ماه یک بار صورت می گیرد. نسخه قبلی یعنی JDK 17 در سپتامبر منتشر شده بود.

 آشنایی با ویژگی های جدید نسخه 18 جاوا

صفحه رسمی OpenJDK ویژگی های زیر را به عنوان هدف رسمی نسخه 18 جاوا معرفی کرده است:

یک رابط فراهم کننده سرویس، یک وب سرور ساده، سومین انکوباسیون از vector API، قطعه کدها، پیاده سازی مجدد core reflection، UTF-8 charset، دومین انکوباسیون از تابع خارجی و API مموری، پیش نمایش دوم از تطبیق الگو برای عبارت های switch و همینطور منسوخ شدن قابلیت finalization.

نسخه 18 جاوا

در حالی که جاوا 17 یک نسخه پشتیبانی بلند مدت یا همان LTS بود که حداقل 8 سال اوراکل از آن پشتیبانی می کرد نسخه 18 جاوا یک نسخه کوتاه مدت خواهد بود که فقط به مدت شش ماه پشتیبانی خواهد شد. build های دسترسی اولیه از نسخه 18 کیت توسعه جاوا را می توان در سیستم عامل هایی مانند لینوکس، ویندوز و مک مورد استفاده قرار داد و به آنها دسترسی پیدا کرد که این کار را می توان از طریق java.net انجام داد.

منسوخ شدن finalization برای حذف در نسخه بعدی جاوا

Finalizer دارای نقص هایی است که باعث بروز مشکلات زیادی در امنیت، عملکرد، قابلیت اطمینان و نگهداری اپلیکیشن هایی که از آن استفاده می کنند می شود. علاوه بر این باید دقت داشته باشید که Finalizer دارای مدل برنامه نویسی سخت و پیچیده ای است. این قابلیت در حال حاضر به طور پیش فرض فعال است اما می توان آن را غیر فعال کرد تا آزمایش های اولیه تسهیل شود. این ویژگی به طور پیش فرض در نسخه آینده زبان برنامه نویسی جاوا حذف خواهد شد و در نسخه 18 جاوا نیز غیر فعال و منسوخ شده است. این پیشنهاد خواستار یک گزینه خط فرمان برای غیر فعال کردن finalization و منسوخ کردن تمام finalizer ها و متدهای finalization در API استاندارد جاوا است. هدف این پیشنهاد شامل کمک به توسعه دهندگان برای درک بهتر خطرات finalization و آماده کردن توسعه دهندگان برای حذف نهایی آن است.

نکاتی درباره منسوخ شدن finalization در نسخه 18 جاوا

یکی دیگر از اهداف منسوخ شدن این ویژگی در نسخه 18 جاوا فراهم کردن ابزارهای ساده برای کمک به تشخیص میزان اتکا به finalization است. این ویژگی که در نسخه اول جاوا معرفی شده بود برای جلوگیری از نشت منابع مورد استفاده قرار می گرفت. این ویژگی در واقع شامل یک کلاس بود که می توانست یک finalizer را تعریف کند که بدنه متد داخل آن می توانست هر منبعی را آزاد کند. garbage collector می توانست finalizer یک شی غیرقابل دسترس را به راحتی زمان بندی کند تا قبل از این که حافظه شی را اصلاح کند آن را فراخوانی کند. در عوض باید دقت داشته باشید که متد finalize می تواند اکشن هایی مانند فراخوانی قابلیت close در اشیا را نیز انجام دهد. به نظر می رسد که این یک شبکه امن و بسیار موثر برای جلوگیری از نشت منابع است ولی دارای نقص هایی است که از جمله آنها می توان به تاخیرهای غیر قابل پیش بینی اشاره کرد. این نقص باعث می شود تا زمان زیادی بین زمانی که یک شی غیرقابل دسترس می شود تا زمانی که finalizer آن را فراخوانی می کند صرف شود. این مسئله نیز می تواند چالش ها و مشکلات جدی را برای توسعه دهندگان به وجود بیاورد. به همین علت است که به توسعه دهندگان توصیه می شود که از تکنیک های جایگزین برای جلوگیری از نشت منابع استفاده کنند که از جمله آنها می توان به دستورات try-with-resources اشاره کرد.

تعریف یک SPI برای هاست در نسخه 18 جاوا

برای SPI رزولوشن آدرس اینترنتی پیشنهاد شده است که در نسخه 18 جاوا یک SPI برای هاست و name address resolution تعریف شود که این مسئله باعث می شود تا Inet.Address بتواند از resolver هایی به جز resolver داخلی پلتفرم ها استفاده کند. انگیزه هایی که برای اضافه شدن این ویژگی در نسخه 18 جاوا وجود دارد شامل فعال سازی بهتر Project Loom برای همزمانی و مدل های برنامه نویسی جدید در جاوا، یکپارچه سازی پروتکل های جدید شبکه در این زبان برنامه نویسی، سفارشی سازی و فعال کردن ساده تست ها می باشد. علاوه بر این باید دقت داشته باشید که این پیشنهاد شامل تعریف یک resolver جایگزین برای کیت توسعه جاوا نیز می باشد.

پیش نمایش دوم از قابلیت تطبیق الگو در دستورات switch

با اضافه شدن این ویژگی جدید به نسخه 18 جاوا تطبیق الگو برای عبارات و دستورات switch که همراه با پسوندهای زبان الگوها است را راحت تر می کند و به میزان زیادی باعث بهبود این عملیات می شود. دقت داشته باشید که پیش نمایش اول آن در نسخه 17 کیت توسعه جاوا معرفی شده بود. گسترش قابلیت تطبیق الگو برای دستور switch به یک عبارت اجازه می دهد تا در برابر تعدادی الگوی مختلف تست شود که هر یک از این الگوها دارای عملکرد مخصوص به خود هستند. بنابراین کوئری های پیچیده مبتنی بر داده می توانند به صورت کاملا یکنواخت و ایمن اعمال شوند.

پیاده سازی مجدد قابلیت core reflection

پیاده سازی مجدد core reflection با کنترل کننده های متد در واقع lang.reflect.Method، کانستراکتور و کنترل کننده متد java.lang.invoke  را مجددا پیاده سازی می کند. داشتن این مدیریت کننده متد به عنوان یک مکانیزم اساسی در عملیات reflection هزینه های نگهداری و توسعه API های java.lang.reflect و java.lang.invoke را به میزان زیادی کاهش می دهد. به همین علت است که اضافه شدن این ویژگی به نسخه 18 جاوا می تواند مزایای بسیار زیادی را برای توسعه دهندگان این زبان برنامه نویسی به همراه داشته باشد.

اضافه شدن یک وب سرور ساده به نسخه 18 جاوا

با پیشنهاد اضافه شدن یک وب سرور ساده به نسخه 18 جاوا یک ابزار خط فرمان برای راه اندازی یک وب سرور کوچک فراهم می شود که تنها فایل های استاتیک را نگهداری خواهد کرد. دقت داشته باشید که در این جا هیچ عملکرد CGI یا عملکردی مشابه servlet در دسترس نخواهد بود. این ابزار می تواند برای نمونه سازی، کدگذاری ad-hoc و تست کردن به خصوص در محیط های آموزشی بسیار مفید و کاربردی باشد. اهداف این طرح در واقع شامل ارائه یک فایل سرور HTTP out-of-the-box و استاتیک است که راه اندازی آن بسیار ساده و آسان می باشد و حداقل عملکرد را به شما ارائه می دهد. این فایل سرور می تواند انرژی مورد نیاز صرف شده توسط توسعه دهندگان را به میزان زیادی کاهش دهد و کیت توسعه جاوا را برای شما قابل دسترس کند. علاوه بر این باید دقت داشته باشید که یک پیاده سازی پیش فرض از طریق خط فرمان را نیز به همراه یک API کوچک برای شما فراهم می کند که در صورت نیاز می توانید از آن استفاده کنید. با استفاده از آن شما می توانید برنامه های خود را به راحتی ایجاد کرده و سفارشی سازی کنید. این قابلیت در واقع یک سرور با قابلیت های فوق العاده پیشرفته را در اختیار شما قرار خواهد داد.

incubation دوم از یک تابع خارجی و API مموری

در این قابلیت در نسخه 18 جاوا یک API ارائه می شود که از طریق آن برنامه های جاوا می توانند با کد و برنامه های خارج از زمان اجرا جاوا ارتباط و تعامل داشته باشند. با فراخوانی توابع خارجی ( در واقع کد خارج از موتور مجازی جاوا) و با دسترسی ایمن به حافظه خارجی( حافظه ای که توسط موتور مجازی جاوا مدیریت نمی شود) این API به برنامه های جاوا اجازه می دهد تا کتابخانه های نیتیو و محلی را فراخوانی کرده و داده های محلی را بدون خطر JNI( رابط بومی جاوا) پردازش کنند. هدف از اضافه شدن این ویژگی این است که JNI را با یک مدل توسعه برتر و خالص جاوا جایگزین کنیم. دقت داشته باشید که این API در نسخه 17 جاوا نیز incubation شده بود و در نسخه 18 جاوا برخی از اصلاحات روی آن صورت گرفته  و بسیاری از مشکلات آن نیز برطرف شده است.

vector API از ویژگی های جدید در نسخه 18 جاوا

vector API که یکی از ویژگی های نسخه 18 جاوا است برای سومین بار در JDK18، incubate شده است که این اتفاق قبلا در نسخه های 16 و 17 نیز رخ داده بود. این ویژگی در واقع پیشنهاد محاسبات برداری را ارائه می دهد که در زمان اجرا به دستورالعمل های برداری بهینه روی معماری های پشتیبانی شده در پردازنده مرکزی کامپایل می شوند و عملکرد بسیار بهتری را ارائه می دهند. محاسبات اسکالر عملیات برداری درجه ای از موازی سازی را بیان می کند که کار بیشتری را در یک چرخه واحد در CPU انجام می دهد و در نتیجه باعث بهبود قابل توجهی در عملکرد خواهد شد.

هدف از vector API در نسخه جدید زبان برنامه نویسی جاوا

هدف از ارائه vector API در نسخه 18 جاوا ارائه راهی برای نوشتن الگوریتم های پیچیده در جاوا با استفاده از HotSpot auto-vectorizer و البته یک مدل کاربری که عملیات vectorization را قابل پیش بینی تر کند می باشد. نکته بسیار جذابی که درباره نسخه جدید JDK وجود دارد پشتیبانی از پلتفرم ARM Scalar Vector Extension است که عملیات بردارسازی را به میزان زیادی بهبود داده است و از عملیات های مختلفی روی سخت افزار نیز پشتیبانی می کند. استفاده از این ابزار برای توسعه دهندگان جاوا می تواند بسیار مفید باشد و عملکرد برنامه های آنها را به میزان زیادی بهبود دهد.

تعیین UTF-8 به عنوان charset در APIهای استاندارد نسخه 18 جاوا

UTF-8 یک استاندارد رمزگذاری کاراکتر برای ارتباطات الکترونیکی است که امروزه به عنوان charset استاندارد در دنیای وب نیز شناخته می شود. charset در واقع قابلیت کدگذاری کاراکتر تمام کاراکترهای موجود در دنیای وب می باشد. با توجه به این تغییر صورت گرفته در نسخه 18 جاوا API های این زبان برنامه نویسی که به charset پیش فرض وابسته بودند در تمام پیاده سازی ها، سیستم عامل ها، پیکربندی ها و ... بدون هیچ مشکلی کار می کنند. این پیشنهاد برای تعریف API های جدید با استاندارد جاوا در نظر گرفته شده است و طرفداران آن انتظار دارند که اپلیکیشن های مختلفی که در محیط های متفاوت طراحی می شوند تاثیر چندانی از این تغییر charset پیش فرض نگیرند و مشکلی برای آنها به وجود نیاید. یکی از اصلی ترین دلایل آنها برای این موضوع این است که سیستم عامل مک، بسیاری از توزیع های لینوکس و اپلیکیشن های سمت سرور در حال حاضر از UTF-8 پشتیبانی می کنند. با این حال ممکن است در محیط های دیگر خطراتی وجود داشته باشد که واضح ترین آنها این است که اپلیکیشن هایی که به charset پیش فرض وابسته بودند زمانی که قصد داشته باشند داده های تولید شده در زمان هایی که charset پیش فرض مشخص نبوده است را پردازش کنند ممکن است دچار خطاهایی شوند. نکته ای که باید به آن دقت داشته باشید این است که خرابی داده ها در این شرایط ممکن است توجه چندانی را به خود جلب نکند. انتظار می رود تاثیر اصلی بر روی کاربران سیستم عامل ویندوز و در مناطق آسیایی و احتمالا برخی از محیط هایی که سرورهای آنها در مناطق آسیایی قرار دارند باشد.

Code snippet ها در داکیومنت سازی API در جاوا

این ویژگی بسیار مهم و جذاب در نسخه 18 جاوا شامل یک تگ @snippet برای Doclet استاندارد JavaDoc می باشد که از آن برای ساده سازی قرار دادن مثال هایی از کد در داکیومنت های ساخته شده برای API ها در جاوا استفاده می شود. از جمله اهداف بسیار زیادی که برای این ویژگی در نظر گرفته شده است می توان به مواردی مانند تسهیل اعتبارسنجی fragment های سورس کد با فراهم کردن دسترسی API به این fragment ها اشاره کرد. بهینه سازی هایی که روی JavaDoc صورت گرفته است و ابزارهای مرتبطی که در این زمینه طراحی و تولید شده اند می توانند این دستیابی و دسترسی را به میزان زیادی ساده تر کنند. از دیگر اهدافی که برای اضافه کردن این ویژگی در نظر گرفته شده است نیز می توان به موارد زیر اشاره کرد:

-          فعال کردن قابلیت استایل دهی مدرن مانند هایلایت کردن سینتکس

-          اتصال خودکار نام ها به تعریفی که دارند

-          فعال سازی پشتیبانی بهتر IDE برای ایجاد و ویرایش snippet ها

این ویژگی را نیز می توان از جمله مهمترین ویژگی های نسخه 18 زبان برنامه نویسی جاوا دانست که توسعه دهندگان می توانند از آن برای ساده تر شدن عملیات های کدنویسی و داکیومنت نویسی پروژه های خود استفاده کنند. 

برنامه نویسان

نویسنده 3346 مقاله در برنامه نویسان
  • Java
  • 426 بازدید
  • 0 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید