خوب، 2022 شروع شده است. در حالی که بیشتر مردم هنوز در تعطیلات سال نو با شامپاین و اولیویه هستند، ما در مورد روندهای دنیای جاوا صحبت خواهیم کرد. شاید این به شما کمک کند تا شغل خود را تجزیه و تحلیل کنید، یک فناوری جدید یاد بگیرید، یا یک برنامه توسعه برای سال آینده ارائه دهید. متخصص و مدرس زبان جاوا، آندری رودیونوف، و همچنین معمار راه حل در EPAM و رئیس کمیته برنامه Devoxx اوکراین، اولگ تسال-تسالکو در مورد آنچه در سال 2022 و آینده نزدیک در انتظار جاوا است صحبت کردند.
چشم انداز جاوا در سال 2022 چیست؟
امسال انتظار داریم دو نسخه بعدی عرضه شود: JDK 18 (در ماه مارس) و JDK 19 (در ماه سپتامبر). ممکن است برای اکثر توسعه دهندگان جاوا در JDK 18 جالب باشد:
- وب سرور ساده داخلی، بدون پشتیبانی از کانتینر servlet، که می تواند برای نمونه سازی و آزمایش سریع استفاده شود، شبیه به مینی وب سرورهای مشابه در Python، Ruby، PHP.
- تطبیق الگو همچنان در حال بهبود است.
در مورد JDK 19، در حال حاضر یک Early-Access Build وجود دارد، اما هنوز لیست رسمی از آنچه قرار است در آن گنجانده شود وجود ندارد. من می خواهم باور کنم که JDK 19 حداقل شامل اولین نمونه اولیه پایدار Project Loom خواهد بود، که اخیراً مشخصات پیش نویس آن ظاهر شده است و آخرین ساخت آن بر اساس JDK 19 است. در ادامه در مورد Project Loom با جزئیات بیشتر صحبت خواهیم کرد.
جاوا برای چه مناطقی تنها راه حل باقی می ماند و کجا ترجیح داده می شود؟
آندری رودیونوف:
خوشبختانه نمی توانیم بگوییم که جایگزینی برای جاوا برای هیچ یک از زمینه ها وجود ندارد، اما می توانیم در مورد جاوا به عنوان نوعی وسیله طلایی برای توسعه برنامه های کاربردی سازمانی، بک اند و میکروسرویس ها صحبت کنیم. همچنین شایان ذکر است که تعداد فزاینده توزیعهای JDK مختلف از فروشندگان مختلف (به جز اوراکل): آمازون، مایکروسافت، علیبابا، رد هت، بل سافت (که توسط افرادی از مرکز توسعه اوراکل در سن پترزبورگ تأسیس شده است) و دیگران. مجموعه کامل توزیع ها
در اینجا موجود است .
همیشه گزینه های جایگزین وجود دارد، اما جاوا بیشترین کاربرد خود را در باطن در توسعه سازمانی می یابد. اکثر شرکت های بزرگ جاوا را برای سیستم های بزرگ و پیچیده خود انتخاب می کنند. دلایل یکسان است: تعداد توسعه دهندگان و تخصص در بازار، اکوسیستم عظیم و پلت فرم قدرتمند JVM.
چشم انداز سایر زبان های jvm، به ویژه Kotlin، در مقایسه با جاوا چیست؟
آندری رودیونوف:
برای درک اینکه کدام زبانهای JVM محبوب هستند، کافی است اسناد Spring، Micronaut، Vert.x را باز کنید و ببینید که نمونههای کد در کدام زبانها آورده شده است - جاوا و کاتلین رایج خواهند بود. نمی توان گفت که انتقال گسترده پروژه ها به Kotlin وجود دارد، اما محبوبیت آن برای backend همچنان در حال افزایش است و بسیاری از فریم ورک ها سعی می کنند آن را در اکوسیستم خود بگنجانند. در مورد Scala، نسخههای جدیدی منتشر میشوند و بیشتر برای ML، پردازش دادهها و جاهایی که الگوی برنامهنویسی کاربردی راحتتر است، به طور فعال استفاده میشود.
اولگ تسال تسالکو:
سایر زبان های JVM بسیار جذاب هستند و امروزه استفاده از چندین زبان برنامه نویسی برای یک پروژه کاملاً عادی است. به نظر من دلایلی که چرا زبان های جدید JVM نمی توانند جاوا را جایگزین کنند به شرح زیر است:
- آنها آنقدر باحال نیستند که همه آنها را بگیرند و به آنها تغییر دهند.
- آنها در همان بخش جاوا استفاده می شوند.
- جاوا کم کم بهترین ها را از زبان های دیگر می گیرد و بهتر می شود.
آیا کیفیت جاوا به دلیل بازه های کوتاه تر انتشار افت می کند؟
اولگ تسال تسالکو:
فکر میکنم نه. حداقل اکنون می توانم چیزهای مثبت بیشتری را از انتشارات مکرر شناسایی کنم. ما می بینیم که ویژگی های جالب جدید بسیار بیشتر ظاهر می شوند. اکنون لازم نیست 5 سال منتظر بمانید تا چیز جدیدی در زبان ظاهر شود. البته، اکنون نباید انتظار انتشارهای باشکوهی مانند جاوا 8 را داشته باشید، زیرا ویژگی ها اکنون در تکرارهای کوچک ظاهر می شوند.
آیا در نسخه های جدید جاوا ویژگی هایی وجود دارد که برای توسعه دهندگان اهمیت ویژه ای دارد؟
اولگ تسال تسالکو:
نسخه های اخیر جاوا چندین ویژگی جالب مانند تطبیق الگو، کلاس های مهر و موم شده و رکوردها را معرفی کرده اند. من توصیه می کنم به توانایی های آنها نگاه کنید. البته جدیترین و مورد انتظارترین ویژگیها در Project Loom و Project Valhalla برنامهریزی شدهاند، اما فکر میکنم ویژگیهای این پروژهها نیز به تدریج منتشر شود.
چارچوب بهار: آیا به گسترش اکوسیستم خود برای مطابقت با نیازهای مختلف ادامه خواهد داد؟
آندری رودیونوف:
در مورد Spring Framework، توسعه آن بر پشتیبانی از ویژگی های مختلف Spring Cloud و توانایی کامپایل Spring Boot در باینری های بومی متمرکز شده است - پروژه Spring Native که قرار است در آینده بخشی از Spring Core باشد. در این زمینه اسپرینگ به دلیل استفاده فعال از بازتاب و تولید کد پویا از Micronaut و Quarkus عقب ماند. در مورد Spring Framework 6 به شما توصیه می کنم گزارش
Spring 6 and Beyond What's new in Spring Framework 6 را مشاهده کنید؟ از کنفرانس جوکر (از اولگ دوکوکا و الکسی نستروف). مهمترین آنها انتقال به JDK 17، کنار گذاشتن پیکربندی XML و Autowire از طریق تنظیم کننده ها، توسعه بیشتر پشتیبانی Kotlin و پروژه Spring Fu است.
اولگ تسال تسالکو:
بهار، به عنوان محبوب ترین جاوا FW این روزها، نمی خواهد دست از کف دست بردارد. من مطمئن هستم که تیم توسعه تمام تلاش خود را برای توسعه Spring انجام خواهد داد. بهار طاقچه های بیشتری را پر می کند. به عنوان مثال، اسپرینگ با Project Reactor خود کارهای زیادی در منطقه Reactive Streams/Reactive Programming انجام داده است. اکنون آنها پروتکل RSoket را تبلیغ می کنند که امیدوارکننده نیز به نظر می رسد.
در مورد پروژه Loom به ما بگویید: برای چیست، چه مشکلاتی را حل می کند؟
آندری رودیونوف:
Project Loom احتمالاً جالبترین نوآوری است که میتواند به یک تغییر تکتونیکی جدید برای کل پلت فرم JVM و همه زبانها در بالای JVM تبدیل شود. Project Loom ممکن است چندان روی توسعه دهندگان معمولی تأثیر نگذارد، اما قطعاً بر کل اکوسیستم، کتابخانه ها، چارچوب ها و سایر زبان های JVM که از multithreading استفاده می کنند تأثیر می گذارد. Project Loom یک انتزاع رشته جدید را معرفی می کند - رشته های مجازی (مشابه کوروتین ها). اگر قبلاً یک رشته جاوا مستقیماً به یک رشته سیستم عامل (OS) گره خورده بود و ایجاد یک رشته جدید در جاوا منجر به ایجاد یک رشته سیستم عامل جدید می شد، در این صورت با موضوعات مجازی این رابطه یک به یک قطع می شود. هنگام ایجاد یک رشته مجازی جدید، یک رشته سیستم عامل جدید ایجاد نخواهد شد و یکی از رشته های به اصطلاح حامل (نوعی آنالوگ یک مخزن رشته سیستم عامل) برای انجام محاسبات مستقیم مجددا استفاده می شود. بنابراین، چندین رشته مجازی می توانند در بالای یک رشته سیستم عامل اجرا شوند. برای کارهای محاسباتی، این مدل از رشته های مجازی هیچ مزیتی ندارد و سرعت محاسبات را کاهش می دهد، اما برای مسدود کردن عملیات مانند پردازش درخواست های HTTP، انتظار برای پاسخ از پایگاه داده یا میکروسرویس ها، این مدل یک مدل خواهد بود. مزیت قابل توجه واقعیت این است که با مدل threading فعلی، مسدود کردن/انتظار بر روی یک رشته جاوا منجر به بیکاری رشتههای سیستمعامل میشود - این اتلاف منابع بود و نیاز به ایجاد رشتههای سیستم عامل بیشتری داشت. در مدل thread مجازی، مسدود کردن/انتظار روی یک رشته مجازی باعث میشود تا رشته حاملی که رشته مجازی در بالای آن اجرا میشد آزاد شود و رشته مجازی دیگری روی آن اجرا شود. به این ترتیب از رشته های سیستم عامل بهینه تر استفاده می شود و تعداد کمتری از آنها برای انجام کارهای مشابه مورد نیاز خواهد بود. بر این اساس، سازندگان کتابخانهها، فریمورکها و زبانهای JVM باید کد خود را برای رشتههای مجازی تطبیق دهند. بنابراین، یک بازنویسی بزرگ برای آنها در راه است :) علاوه بر مدل رشته مجازی، همچنین برنامه ریزی شده است که یک API جدید برای ساده سازی ارکستراسیون نخ ها - به اصطلاح همزمانی ساختاریافته - معرفی شود. اکنون، برای مثال، همزمانی ساختاریافته به طور فعال در کوروتین های Kotlin و Scala ZIO استفاده می شود. متاسفانه نسخه JDK و حتی سال انتشار Project Loom هنوز مشخص نیست. هنگامی که از معمار اصلی پلتفرم جاوا، برایان گوتز، در مورد تاریخ انتشار سؤال میشود، با عبارتی فلسفی پاسخ میدهد: «وقتی آماده شود، آماده خواهد شد». بنابراین، ما منتظریم و میتوانیم
ساختهای آزمایشی Project Loom را امتحان کنیم .
اولگ تسال تسالکو:
Loom یک پروژه چتر بزرگ است که در آن تیم OpenJDK و Oracle روی نوآوری های Concurrency در جاوا و JVM کار می کنند: رشته های مجازی، فیبرها و ادامه. به احتمال زیاد انتشار این ویژگی ها تدریجی خواهد بود. در حال حاضر فقط ساختهای دسترسی اولیه برای پشتیبانی از رشتههای مجازی وجود دارد. به طور خاص در مورد رشتههای مجازی، هدف اصلی آن سادهسازی مدل توسعه چند رشتهای در جاوا با استفاده از میلیونها رشته سبک وزن با معنایی مشابه رشتههای پلتفرم معمولی است. در زیر هود، این رشتهها در داخل ForkJoinPool مدیریت میشوند و توسط رشتههای پلتفرم استفاده مجدد میشوند.
پیش بینی ها برای توسعه جاوا در دنیای روندهای جهانی - میکروسرویس ها، معماری ابری، بلاک چین، هوش مصنوعی چیست؟
آندری رودیونوف:
اگر در مورد روندهای جهانی صحبت کنیم، آنها تغییر چندانی نکرده اند. مانند قبل، روند اصلی همچنان Kubernetes و زیرساخت های اطراف آن در قالب
Service mesh است .
مش داده همچنین به عنوان نوعی انتزاع برای مدیریت منابع داده و ذخیره سازی های توزیع شده محبوبیت پیدا می کند.
GO TO FULL VERSION