دیروز یه مصاحبه خوب خوندم با طراح ارشد کاتلین Mikhail Zarechenskii (میخائیل زارچنسکی) با محوریت اینکه زبان کاتلین تا کجا از جاوا فاصله خواهد گرفت؟! من جاوا کار یا کاتلینکار نیستم، ولی هم علاقه شخصی زیادی به چنین مباحثی دارم، هم به عنوان معمار نرمافزار نیاز دارم تا درک بهتری از کامپایلرها، زبانها، و دغدغههای لایههای پایینتر داشته باشم. لذا چون برام جالب بود ترجمه کردم و اینجا میگذارم 🙂
عموم افراد کاتلین رو به عنوان زبانی که توسط JetBrains توسعه داده شده و برای توسعه اندروید به کار میره میشناسن. کاتلین در سال ۲۰۱۱ و تحت لایسنس آپاچی ۲.۰ به عنوان یه جایگزین برای جاوا روی JVM شروع به کار کرد. ولی بعدتر تونست به پلتفرمهای مختلفی مثل جاوااسکریپت، موبایل، اجرای نیتیو و وب اسمبلی گسترش پیدا کنه.
میخائیل زارچنسکی، طراح ارشد کاتلین، در مصاحبه با DevClass درباره رابطه با جاوا، و آینده کاتلین صحبت کرده.
میگه: “کاتلین به عنوان یه جایگزین برای جاوا ظاهر شد و اون موقع میخواستیم مشکلاتی مثل داستان nullability و check exceptions و invariant arrays و این جور چیزها رو حل کنیم.”
“تو این سالها کاتلین پیشرفت کرده؛ الان داستان مالتیپلتفرم رو داریم و میتونیم روی پلتفرمهای مختلف مثل iOS و اندروید کد بزنیم. کاتلین نوتبوک داریم، Compose داریم که یه فریمورک برای نوشتن UI با کاتلینه، و build.gradle.kts داریم که میشه باهاش اسکریپتهای گریدل رو با کاتلین نوشت. ولی هنوز JVM و جاوا خیلی خیلی برامون مهمن؛ در واقع حیاتی هستن. ما همچنان میخوایم با جاوا سازگار باشیم چون کاملاً میفهمیم که جاوا تا سالهای سال باهامون میمونه و نمیخوایم کاملاً جایگزینش بشیم. این نه ممکنه و نه هدف ماست.”
تو بعضی موارد، کاتلین منتظر ویژگیهای جدید جاوا یا JVM هست. به قول زارچنسکی: “خیلی دوست دارم جاوا پروژه Valhalla رو زودتر منتشر کنه چون همه کاربرای JVM ازش سود میبرن.”
پروژه Valhalla قراره value type ها و چیزای دیگه رو به JVM اضافه کنه.
زارچنسکی میگه: “پروژه Valhalla و value class ها خیلی خوب با کاتلین جور درمیان، چون خیلی از برنامهها با ریاضیات سروکار دارن.” این ممکنه به کاتلین اجازه بده operator overloading داشته باشه که “مجبور نباشی .plus بنویسی و بتونی مستقیم از + یا علامتهای استاندارد دیگه استفاده کنی. این یکی از نقاط قوت کاتلینه، پس مشتاقیم value type ها رو تو JVM ببینیم تا بتونیم این ویژگی رو اضافه کنیم و کاتلین رو حتی بیانگرتر کنیم.”
تیم کاتلین با کمیتههایی که جاوا رو توسعه میدن همکاری میکنن؟ زارچنسکی میگه: “بستگی به ویژگی داره. ما ارتباط داریم و چیزهایی مثل value class ها رو از نزدیک دنبال میکنیم چون اصولاً یه ویژگی JVM هست… باید طراحیمون رو تطبیق بدیم و از تصمیمات طراحی مطلع باشیم تا JVM بتونه value class ها رو برای کاتلین هم بهینه کنه.”
جاوا اخیراً virtual thread ها رو که بخشی از پروژه Loom است رو پیادهسازی کرده. این چه تأثیری روی coroutine های کاتلین که اونا هم برای برنامهنویسی همزمان استفاده میشن داره؟
زارچنسکی میگه: “هدفهاشون یکم متفاوته. پروژه Loom هنوز از Thread API استفاده میکنه – همون API ای که سالهاست با همه مزایا و معایبش داریم. تو کاتلین ما همزمانی ساختاریافته داریم، با رابطه والد-فرزندی بین coroutine ها. پس ارتباط بینشون، لغو کردنشون یا مدیریت خطا وقتی یکیشون exception میندازه راحتتره. اگه همزمانی ریزدانه میخوای و میخوای یه برنامه جدید بنویسی، شاید coroutine های کاتلین بهتر باشن.”
اضافه میکنه: “یکی از معایب coroutine های کاتلین اینه که اگه یه تابع suspend داری، عملا Thread API هنوز داره از thread فیزیکی استفاده میکنه! میخوایم پروژه Loom رو برای coroutine های کاتلین فعال کنیم، پس اگه مجبوری از thread استفاده کنی، میتونی از virtual thread استفاده کنی… اونوقت بهترینهای هر دو دنیا رو داری.”
گوگل، کاتلین رو به عنوان زبان اصلی توسعه اندروید پذیرفت و باعث تقویتش شد. این بیشترین کاربردش رو شکل میده؟
زارچنسکی میگه: “بیشترین استفاده هنوز تو اندرویده، ولی حدود ۴۰ تا ۴۵ درصد کاربرای کاتلین دارن برنامههای سمت سرور مینویسن. و میبینیم که داستان مالتیپلتفرم هم داره رشد میکنه.”
پیادهسازی رسمیای برای پروتکل Language Server) LSP) برای کاتلین توسط JetBrains وجود نداره. این پروتکل توسط IDEهای غیر JetBrains مثل Visual Studio Code استفاده میشه تا پشتیبانی هوشمند زبان برنامهنویسی، اشکالزدایی و چیزای دیگه رو تو ادیتور فعال کنن. این عمدیه تا توسعهدهندهها رو تو خانواده IDEهای JetBrains نگه دارن یا ممکنه در آینده تغییر کنه؟
زارچنسکی میگه: “داستان LSP خیلی جالبه و فکر میکنم یه جایی برامون ضروری میشه. دوست داریم یه LSP درست و حسابی برای کاتلین داشته باشیم چون اگه کاتلین بتونه تو IDEهای مختلف با پشتیبانی خوب ارائه بشه، به نفع کاتلینه. ولی طراحی LSP طوریه که مثلاً نمیذاره بین جاوا و کاتلین ارتباط برقرار بشه. یکی از ویژگیهای کلیدی ما قابلیت همکاری بینشونه، ولی اگه از جاوا کاتلین رو صدا بزنی، نمیتونی از LSP جاوا بری تو LSP کاتلین. پس ما یه LSP درست و حسابی از JetBrains نداریم. حداقل دو تا پیادهسازی متنباز هست، و دیدم کسایی که اونا رو توسعه میدن شروع کردن روی یه نسخه جدید کار کردن که از API نسخه K2 استفاده میکنه، چون API خوبی برای تحلیل داره.
امیدوارم موفق بشه و یه LSP درست و حسابی برای کاتلین داشته باشیم. ولی مشکلات قابلیت همکاری همچنان وجود خواهند داشت.”
K2 کامپایلر جدید کاتلینه که اخیراً منتشر شده.
قراره تا در آینده چه چیزهایی تو کاتلین بیاد؟ زارچنسکی میگه: “ویژگیهای کلیدیای که اضافه خواهد شد، immutability و یه error model جدیده.” و اضافه میکنه که انتظار داره یه موج جدید از ویژگیهای جدید به کاتلین اضافه کنند، “چون کار K2 تموم شده و الان وقت دارن تا روی خود زبان کار کنند.” جزئیات بیشتر تو کنفرانس بعدی کاتلین که برای می ۲۰۲۵ تو کپنهاگ برنامهریزی شده اعلام میشه.