ماشین مجازی جاوا، پلتفرم چندپارادایمی است: از آن برای ارتقای برنامهنویسیتان استفاده کنید
جاوا یک زبان دستوری است؛ به این معنی که برنامههای جاوا به ماشینمجازی جاوا دقیقا میگویند چه کاری انجام دهد و چه زمانی انجامش دهد. در محاسبات کامپیوتری همه چیز بر اساس انتزاعیسازی است. زبان جاوا به عنوان یک زبان شیگرا معرفی میشود و انتزاعیسازیهای جاوا شامل اشیا، متدها و ارسال و دریافت پیام از طریق فراخوانی متدهاست. در طی سالها برنامهنویسها با استفاده از اشیا، متدها، حالت (state) قابل تغییر و حلقهها، سیستمهای بزرگ و بزرگتری ساختهاند اما اینجاست که شکاف آغاز میشود. بسیاری از سیستمها با تستهای با کیفیت، «به خوبی توسعه داده شدهاند» ولی هنوز گاهی برنامهنویسها برای حل مشکلات از روشهایی استفاده میکنند که «به هک شبیه است» تا راه حل اصولی!
با آمدن جاوا ۸، جاوا دستخوش تغییرات انقلابی شد. ارجاع به متدها، عبارات لامبدا، متد پیشفرض در interfaceها، فانکشنهای مرتبه بالا، حلقههای ضمنی و … به زبان اضافه شدند. جاوا ۸ روشی متفاوت برای فکر کردن به الگوریتمها معرفی کرد.
روش دستوری (imperative) و روش اعلانی (declarative) دو روش کاملا متفاوت برای توصیف الگوریتم هستند. در دهههای 80 و 90 میلادی تصور میشد این طرز فکرها، کلا جدا از هم و تطبیقناپذیر هستند. به طوری که ما شاهد کشمکشهایی هم بین برنامهنویسی شیگرا و فانکشنال بودیم. Smalltalk و ++C قهرمانان شیگرا، و هسکل قهرمان تابعی بود. بعدها ++C شیگرایی خالص را کنار گذاشت و خود را به عنوان یک زبان چندپارادایمی مطرح کرد. از آن به بعد جاوا به عنوان سردمدار زبانهای شیگرا ادامهداد تا نهایتا با جاوا ۸، این زبان هم تبدیل به یک زبان چندپارادایمی شد.
در اوایل دهه ۹۰ میلادی، ماشین مجازی جاوا ساختهشد تا جاوا بتواند مستقل از سکو اجرا شود. بد نیست تاریخچه جاوا را از زمانی که پروژه green و زبان برنامهنویسیای که Oak نام داشت را با هم مرور کنیم. جاوا ابتدا برای ساخت پلاگینهای وب بود اما به سرعت جای خود را در بین اپلیکیشنهای سمت سرور پیدا کرد. کدهای جاوا به کد مستقل از سختافزاری به نام جاوا بایتکد، کامپایل میشود و یک مفسر بایتکد را اجرا میکند. کامپایلر just in time در ماشینمجازی جاوا، اجرای سریعتر کدها را بدون تغییر شیوه کلی کار ماشینمجازی جاوا مقدور میسازد.
قبلا در مورد بایتکد جاوا و معماری ماشین مجازی جاوا در جاواکاپ مطالبی را مطالعه کردهایم.
از آنجا که رفتهرفته ماشینمجازی جاوا همهگیر شد، زبانهای برنامهنویسی دیگری هم ساخته شدند که به بایتکد جاوا کامپایل میشوند: Groovy و JRuby و Clojure زبانهای داینامیک و Scala و Ceylon و Kotlin زبانهای استاتیکی هستند که از ماشینمجازی جاوا برای اجرا استفاده میکنند. زبان اسکالا، در اواخر دهه 2000 میلادی نشان داد که برنامهنویسی شیگرا و فانکشنال، میتوانند در یک زبان چندپارادایمی ادغام شوند. Groovy و JRuby از ابتدا چندپارادایمی ساخته شدند و کاتلین تلاشی برای ساخت یک زبان برای دهه 2010 و 2020 میلادی روی ماشینمجازی جاوا با استفاده از تجربیات جاوا و اسکالا و Groovy است.
برای بهترین استفاده از ماشینمجازی جاوا، باید زبان برنامهنویسی مناسب را برای مسئله پیدا کنیم. البته به این معنی نیست که از یک زبان برای کل مسئله استفاده کنیم، بلکه ما میتوانیم از زبانهای محتلفی برای قسمتهای مختلف پروژه استفاده کنیم. همه اینها با وجود ماشین مجازی جاوا میّسر میشود. مثلا جاوا و کاتلین برای قسمتهایی که با کد استاتیک خوب بیان میشوند، Groovy و Clojure برای قسمتهایی که با کد داینامیک خوب بیان میشوند. نوشتن کد دینامیک در جاوا دردناک است(!) پس برای مسئله خود ابزار مناسبی انتخاب کنید چراکه همه زبانهای برنامهنویسیِ بر پایه ماشینمجازی جاوا، میتوانند به خوبی با هم تعامل کنند.
این مطلب ترجمهٔ این مطلب از وبسایت medium در تاریخ ۲۰ اسفند ۹۸ است.
.
.
.
با ما همراه باشید
آدرس کانال تلگرام: JavaCupIR@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers