۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۱۱ دلیل که جاوای جدید شبیه جاوای قدیمی نیست

جاوا آن زبانی نیست که قبلا بود و این بیشتر چیز خوبی است. در اینجا یازده روشی که جاوا برای رویارویی با چالش‌های آینده در حال تکامل است آورده شده است.

جاوا آن زبانی نیست که قبلا بود و این بیشتر چیز خوبی است. در اینجا یازده روشی که جاوا برای رویارویی با چالش‌های آینده در حال تکامل است آورده شده است.

آیا جاوا هنوز قدیمی است؟ نوع زبان برنامه نویسی مورد استفاده توسط تایمرهای قدیمی که در مورد پنل های جلویی با چراغ های چشمک زن و روزهای فلاپی دیسک صحبت می کنند؟ یا هنوز هم با آخرین پیشرفت‌های زبان برای کدنویسی بصری و عملکرد عالی، هنوز هم پیشرفته است؟ شاید جاوا جایی در این بین باشد: زبانی بالغ، اما در قلب جوان.

نزدیک به ۳۰ سال پیش در ۲۳ می ۱۹۹۵ جاوا رسما وارد جهان شد. این به عنوان یک فناوری توانمند به نام “بلوط” برای یک جعبه تنظیم بالا آغاز شد که Sun Microsystems تصور می کرد به زودی اتاق نشیمن آمریکایی را مستعمره می کند. به هر حال، این طرح در ابتدا اجرا نشد. اما این زبان به یکی از پایه‌های اصلی نرم‌افزار مدرن تبدیل شد که روی همه چیز از تراشه‌های حسگر کوچک گرفته تا جعبه‌های سرور بزرگ اجرا می‌شود.

از آن زمان، ایده جاوا به طرز چشمگیری تغییر کرده است. Sun و Oracle کار قابل توجهی در پیوند دادن ویژگی‌هایی انجام داده‌اند که بدون ایجاد اختلال در عملکرد اصلی، زبان را تازه نگه می‌دارد. شاید جاوا فقط یکی از آن زبان‌هایی باشد که به کار خود ادامه می‌دهد.

چیزی که ما با اطمینان می دانیم این است که بسیاری از ویژگی های موجود در چادر بزرگی به نام “جاوا” با آنچه در ابتدا تصور می شد متفاوت است – اغلب به شدت. برنامه نویسان در حال ایجاد کدهایی هستند که افراد در سال های ۱۹۹۵، ۲۰۰۵ یا حتی ۲۰۱۵ آن را نمی شناسند، اما کدهای قدیمی همچنان اجرا می شوند. این یک تنظیم با کیفیت بالا است. Oracle، شرکتی که Sun را در سال ۲۰۱۰ خریداری کرد، اکنون نسخه های جدید را به طور منظم ارائه می دهد و ویژگی هایی را اضافه می کند که زبان جاوا را مرتبط نگه می دارد.

در اینجا یازده روشی که جاوا تغییر کرده است، بیشتر برای بهتر شدن آورده شده است.

۱۰ روش برنامه نویسی جاوا بهتر از گذشته است (و یکی از دلایلی که اینطور نیست)

  1. رشته های مجازی
  2. همزمانی ساختاریافته
  3. داده های تغییرناپذیر
  4. جمع آوری زباله
  5. تطابق الگو
  6. نحو ساده شده
  7. کلاس های مهر و موم شده
  8. کارکردهای خارجی و حافظه
  9. API Vector
  10. پردازش تهی بهبود یافته
  11. رایگان مانند … مجوز پولی؟

رشته های مجازی

نسخه اصلی جاوا به توسعه دهندگان این فرصت را داد تا اشیاء Thread خود را ایجاد کنند و نحوه اجرای کد در محیط های چند رشته ای و چند هسته ای را کنترل کنند. در حالی که بهتر از هیچ بود، برنامه نویسان به سرعت متوجه شدند که اشیاء Thread نسبتاً بزرگ هستند و زمان زیادی برای ایجاد و تخریب نیاز دارند. ایجاد یک پول دائمی رشته در شروع یک برنامه به یک راه حل معمول برای رشته های ناهموار تبدیل شد.

همه چیز در جاوا ۱۹ با ورود رشته های مجازی تغییر کرد. اکنون، JVM بسیاری از کارهای مربوط به انجام منابع سیستم را در برنامه های جاوا انجام می دهد. برنامه نویسان مشخص می کنند که چه زمانی موازی سازی در دسترس است و زمان اجرا JVM کد را به طور همزمان در جایی که می تواند اجرا کند. رشته‌های مجازی یک موهبت برای معماری‌های مدرن مانند سرویس‌های میکرو هستند که توسعه و پشتیبانی آن‌ها آسان‌تر است.

Angular 16 برای بهبود رندر سمت سرور

همزمانی ساختاریافته

نخ‌های سبک‌تر تازه شروع کار هستند. جاوا یک مدل انتزاعی برای موازی سازی اضافه می کند که پردازش همزمان بارهای کاری را برای برنامه نویسان و JVM آسان تر می کند. مدل همزمانی ساختاریافته جدید به برنامه نویس این فرصت را می دهد که حجم کاری جاوا را به کارها تقسیم کند، که سپس در scopes گروه بندی می شوند. دامنه‌ها در الیاف جمع‌آوری می‌شوند که با هم در یک رشته کار می‌کنند.

هدف این است که به توسعه‌دهندگان جاوا یک مدل استاندارد برای ساخت برنامه‌های موازی ارائه دهیم، بنابراین نیازی به استدلال عمیق در مورد آن نداشته باشند. همزمانی ساختاریافته همچنین تشخیص فرصت‌ها برای اجرای همزمان و نگاشت آن‌ها به هسته‌های پردازنده را برای ماشین مجازی آسان‌تر می‌کند.

داده های تغییرناپذیر

در ابتدا، رشتهها در سنگ ثابت شدند. هنگامی که یک رشته ایجاد شد، هرگز نمی‌توان آن را تغییر داد. فراخوانی تابعی مانند toLowerCase یک رشته کاملاً جدید ایجاد می کند. این امر مدیریت امنیت و همگام سازی در Thread ها را برای JVM ساده تر کرد.

اکنون، برنامه نویسان جاوا می توانند با فراخوانی «سوابق.” این امر ایمنی چند رشته ای، حافظه پنهان و همگام سازی را ساده می کند. کد نام و انواع فیلدها را فهرست می کند و JVM بقیه را مدیریت می کند. روش‌های رایج مانند برابر، hashCode و toString به‌طور خودکار ایجاد می‌شوند. بقیه زمان‌ها، JVM تضمین می‌کند که Record‌ها تغییرناپذیر هستند، که بسیاری از جزئیات برنامه را ساده می‌کند و کد در حال اجرا را سرعت می‌بخشد.

جمع آوری زباله

جاوا همیشه بسیاری از جزئیات تخصیص و احیای حافظه را مدیریت کرده است، ویژگی ای که بسیاری از برنامه نویسان از واگذاری آن به JVM خوشحال هستند. با این حال، گاهی اوقات، زباله‌گیر اصلی آنقدر مکث می‌کند که کاربران در صورت تاخیر در عملکرد متوجه می‌شوند.

امروزه، برنامه نویسان بین چهار جمع کننده زباله انتخاب دارند که از الگوریتم های مختلف جمع آوری زباله استفاده می کنند و برای انواع مختلف برنامه ها تخصصی هستند:

توسعه‌دهندگان به یک روش واحد برای جمع‌آوری زباله گیر نکرده‌اند و مجبور نیستند به راه‌حل‌های دیگری مانند شبیه‌سازی مدیریت حافظه خود با استفاده مجدد از اشیا متوسل شوند. اکنون چهار انتخاب اصلی وجود دارد و هر کدام گزینه‌هایی را برای تنظیم و آزمایش بیشتر ارائه می‌دهند.

تطابق الگو با سوئیچ

تیم جاوا همچنین زبان را در برخی از پایین‌ترین سطوح نحوی ارتقا داده است و به توسعه‌دهندگان گزینه‌های بیشتری برای نوشتن منطقی تمیزتر و گویاتر می‌دهد. کلمه کلیدی switch که برای ایجاد پشته‌های شرطی if-then-else استفاده می‌شود، اکنون تطبیق الگو، به این معنی که منطق برای تعیین موارد مختلف به عبارات اساسی مانند برابر محدود نمی شود.

کد جاوا که با این الگوها نوشته شده است مخصوصاً مختصر است و می‌تواند نه تنها در مقدار داده‌ها بلکه نوع شیء آن را متمایز کند. همه انواع مرجع و اشاره گر تهی را می توان استفاده کرد. البته، منطق سنتی تر با معناشناسی سقوط از طریق هنوز پشتیبانی می شود، بنابراین کدهای قدیمی به آرامی اجرا می شوند.

نحو ساده شده

در ابتدا، نوشتن جاوا با نوشتن C یا C++ تفاوت چندانی نداشت. براکت‌های فرفری و نیم‌کولون‌ها در جاوا تقریباً همان کاری را انجام می‌دهند که در C. حلقه‌ها با فرم کلاسیک سه قسمتی ساخته شده بودند. اگرچه روده های آن ارتباط عمیقی با Lisp داشتند، نحو اصلی جاوا تفاوت چندانی با C نداشت.

اگرچه، افزوده‌های جدیدتر، همه از سادگی زبان‌های برنامه‌نویسی مانند Ruby و Python وام گرفته‌اند. حلقه‌ها نیازی به هجی کردن تمام جزئیات ندارند، زیرا کامپایلر اکنون می‌تواند آنها را زمانی که در فهرست یا آرایه‌ای حلقه می‌زنید، درک کند. توابع ناشناس و عبارات لامبدا نیز گزینه‌های خوبی برای برنامه‌نویسانی هستند که می‌خواهند ضربه‌های کلید را ذخیره کنند.

برخی از کلمات و نشانه‌های اضافی C هنوز وجود دارد، اما برنامه‌نویسان جاوا امروزی می‌توانند ساختارهای پیچیده را با کاراکترهای کمتر بیان کنند.

کلاس های مهر و موم شده

از ابتدا، JVM برای جلوگیری از بسیاری از حفره های امنیتی رایج که برنامه نویسان ممکن است به اشتباه در برنامه های خود ایجاد کنند، طراحی شده بود. جدیدترین نسخه ها گزینه های بیشتری را اضافه کرده اند. برای مثال، کلاس‌های مهر و موم شده، به سازنده کلاس اجازه می‌دهند تا دقیقاً مشخص کند که کدام کلاس‌ها می‌توانند آن را گسترش دهند. این باعث می‌شود شخص دیگری با استفاده از کتابخانه نتواند کلاس را گسترش دهد و برخی از عملکردهای اصلی را اضافه یا لغو کند.

کلاس‌های مهر و موم شده نیز کمی سریع‌تر از کلاس‌های سنتی اجرا می‌شوند، زیرا بهینه‌سازی و خط‌بندی تهاجمی‌تری را امکان‌پذیر می‌کنند. آنها همچنین می توانند ارسال روش را ساده کنند.

کارکردهای خارجی و حافظه

ماشین مجازی جاوا به گونه‌ای طراحی شده است که یک باغ دیواری یا یک جعبه شنی امن باشد. ماشین مجازی از کد محافظت می کند و از بسیاری از حملات عمومی که هنگام اجرای کد به صورت بومی امکان پذیر است جلوگیری می کند.

برای برنامه نویسان آگاه، رابط اصلی جاوا (JNI) کمی یک درب پشتی بود. تیم جاوا می‌دانست که برخی از توسعه‌دهندگان نیاز به اتصال به کتابخانه‌ها و پشته‌های نوشته شده به زبان‌های دیگر دارند و برخی فراخوان‌های سیستمی ضروری هستند. بنابراین آنها این سوراخ را در زره JVM با یک هشدار ساده در مورد خطرات استفاده از آن باز کردند.

اکنون، Foreign Function & Memory API را داریم که در حال حاضر یک JEP در پیش‌نمایش سوم است. این API ارتباط با خارج را آسان تر و ایمن تر می کند. اکنون بسیاری از کارها را می توان با جاوا خالص نوشت و فرصت هایی را برای برنامه نویسان معمولی جاوا ایجاد کرد تا بتوانند به حافظه عمومی سیستم متصل شوند. این پیشنهاد همچنین نرده‌های محافظ بهتری مانند بررسی نوع اضافه می‌کند تا برخی از بدترین حملات احتمالی سرریز را مسدود کند.

این API انجام وظایف سطح پایین و پردازش داده‌ها در کدگذاری سیستم را برای کد جاوا آسان‌تر می‌کند. این یک راه امن‌تر برای برنامه‌نویسان جاوا است که بتوانند از جعبه شنی خارج شوند.

API Vector

کلاس Vector اصلی که برای بسیاری از برنامه نویسان قدیمی جاوا شناخته شده بود، بیشتر بود. از یک ساختار داده و کمتر یک ابزار ریاضی. این یک راه حل منعطف و هماهنگ برای پنهان کردن اشیا بود که تفاوت زیادی با List نداشت.

Vector API بسیار بیشتر است. این ابزاری برای نوع پردازش داده‌های ریاضی است که با استفاده از الگوریتم‌های هوش مصنوعی از ماتریس‌ها و بردارها کمابیش مانند دانشمندان فیزیکی و ریاضیدانان رایج‌تر می‌شود. عناصر منفرد می توانند انواع ابتدایی باشند و بسیاری از عملیات های ریاضی پایه مانند محصولات نقطه ای پشتیبانی می شوند.

یک راه خوب برای دیدن تفاوت بین کلاس Vector و API این است که ببینید روش add چه می کند. در کلاس اصلی، مانند سایر کلاس‌های مجموعه، یک شی را در انتهای ساختار داده چسباند. در API، از آن برای افزودن ریاضی عناصر منفرد استفاده می‌شود، بیشتر شبیه به انتظار یک مهندس.

Vector API همچنین وعده می‌دهد که قدرت محاسباتی عظیم برخی از پردازنده‌های جدیدتر SIMD را باز کند و برنامه‌نویسان جاوا را قادر می‌سازد تا کدی را ایجاد کنند که می‌تواند در بسیاری از بردارهای طولانی تغییر کند.

پردازش تهی بهتر

آیا آن شی یک اشاره گر تهی است؟ بسیاری از کدهای جاوا به بررسی، بررسی مجدد و سپس بررسی سه گانه اشیا اختصاص داده شده است. برای ساده کردن کد و کمی سرعت بخشیدن به کارها، جاوا به آرامی ویژگی هایی را اضافه می کند که نشانگرهای پوچ را به روشی زیباتر مدیریت می کند. برای مثال API جریان، می تواند جریان های طولانی از داده ها را پردازش کند و در صورت آمدن مقدار تهی گاه به گاه قطع نمی شود. بسته بندی کلاس Optional ممکن است یک شی واقعی را در خود نگه دارد یا نه، و به کد اجازه می دهد به خوبی جریان یابد. و اگر همچنان می‌خواهید بی‌طل بودن را بررسی کنید، اپراتور null-safe (?.) وجود دارد که به روشی بسیار مختصر، null را آزمایش می‌کند.

رایگان مانند … مجوز پولی؟

جاوا همیشه تقریباً رایگان بوده است، حداقل برای برنامه نویسان. سان از همان ابتدا می خواست توسعه دهندگان را با ابزارها و سخت افزارهای رایگان جذب کند و در سال ۱۹۹۷ این شرکت گامی جسورانه برای منبع باز کردن بسیاری از بخش های زبان و ماشین مجازی آن برداشت. تا همین اواخر، توسعه دهندگان می توانستند کم و بیش یک بار بنویسند و بدون پرداخت یک سکه در هر جایی اجرا کنند.

اکنون، تصویر تیره‌تر می‌شود. بسیاری از نسخه های جاوا از Oracle رایگان هستند، اما برخی از آنها نیاز به مجوز با شرایط عجیب و غریب دارند. به نظر می رسد که اوراکل از برنامه نویسان می خواهد که از آزادی ایجاد بدون محدودیت پولی لذت ببرند، اما همچنین می خواهد از شرکت هایی که درآمدهای بلندمدت و قابل توجهی از جاوا ایجاد می کنند مالیات یا اجاره دریافت کند. در عمل، این به معنای پرداخت هزینه برای چیزی است که Oracle ویژگی های اشتراک جاوا را می نامد. بنابراین، جاوا هنوز رایگان است، مگر اینکه بخواهید آن را برای استفاده تجاری ارتقا دهید.