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

این روزها تب و تاب یادگیری زبانهای برنامهنویسی جدید، شدت گرفته است؛ عدهای متاثر از فضای علوم رایانه و مباحث تابعی (Functional)، عدهای دیگر در پی سادگی و خوانایی، عدهای هم به دنبال کارایی و چابکی.
در این بحبوحه شاید یک معرفی صادقانه و به دور از جانبداری که برآمده از علاقهمندی باشد، کمک شایانی به برنامهنویس با تجربه و پرمشغلهای که وقت سرخاراندن را ندارد، کند. این نوشتار قصد دارد به بررسی یکی از زبانهای برنامهنویسی نوظهور بپردازد که نسبت به همنوعان خود بیشترین استفاده در صنعت نرمافزار را تا به امروز داشته است: اسکالا.
اسکالا
نام اسکالا از ترکیب دو واژه Scalable و Language به وجود آمده است. از اهداف اصلی ایجاد آن، ارایه زبانی است برای تولید نرمافزار مقیاسپذیر به روشی چابک و سریع و به دور از مشکلات مرسوم.
اسکالا زبانی کامپایلی / اسکریپتی، با نوع دادهای ایستا است: Type-safe(با شرکت Typesafe اشتباه گرفته نشود!) که روی بستر JVM اجرا میشود. از مزایای این زبان ارایه راهکارهای برنامهنویسی شیگرا و تابعی در کنار یکدیگر است؛ به عبارت دیگر اسکالا تلفیق زبانهای شیگرا هم چون روبی و جاوا با زبانهای تابعی هم چون هَسکل و ارِلنگ است.
از نقطه نظر چابکی و کارایی، عدهای آن را جمع دو دنیای زبانهای پویا (Dynamic-Type) و ایستا (Static-Type) میدانند. یکی از دلایل دیگر که باعث مقبولیت و همچنین کارایی بالای این زبان میشود، دستور زبان منعطف آن است.
اسکالا توسط پروفسور «مارتین اودرسکی» در سال ۲۰۰۳ طراحی شده و به مرور توسط ایشان و جامعه اسکالا بهبود و توسعه داده شده است.
در سال ۲۰۰۷ نسخه ۲ زبان معرفی شد (همزمان با عرضه Go و Clojure) که نظرها را به خود جلب کرد. مارتین اودرسکی خالق Generic های جاوا و از برترین توسعهدهندگان کامپایلر javac نیز هست.
چرا اسکالا
ورود و پیشرفت زبان اسکالا در صنعت نرمافزار فقط به دلیل موجز بودن، راحتی برنامهنویس و انعطاف آن نیست. طبق قانون مور تعداد ترانزیستو رهای یک پردازنده هر دو سال، دو برابر میشوند. به عبارت دیگر ابعاد ترانزیستورها در حال نصف شدن است و این روند در سال ۲۰۲۰ متوقف خواهد شد. هم اکنون نیز کند شدن این روند قابل مشاهده است و به جای اینکه سرعت پردازندهها زیاد شود، تعداد هستههای آنها بیشتر میشود. گواه این امر، تلفنهای هوشمند و تبلتها هستند؛ آنها از پردازندههای چند هستهای بهره میبرند ولی بازه سرعت پردازندهها چند سالی است که تغییر شگرفی نکرده است.
به همین دلیل برنامههایی با قابلیت اجرای همروند و توزیع شده بیش از پیش مورد توجه قرار گرفتند. با افزایش کاربران، بالا رفتن تقاضا و نزدیک شدن به تاریخ نهایی قانون مور، روزبهروز تقاضا برای تولید چنین نرمافزارهایی افزایش مییابد. زبان اسکالا دارای ویژگیهایی است که مختص چنین تقاضاهایی طراحی شده است. از آن جمله میتوان به Functional Programming، Pattern Matching و Immutables اشاره کرد. علاوه بر این، اسکالا حاصل جمع ویژگیهای بسیاری از زبانهای موجود در بازار است. در حال حاضر زبان اسکالا تنها زبانی است که شامل تمامی خصایص زیر است:
- رایگان و متنباز
- استاتیک و شامل بررسی زمان کامپایل (Type-safe)
- شیگرا
- تابعی (Functional)
- موجز و منعطف
- دارای طیف وسیعی از کتابخانهها (امکان استفاده راحت از کتابخانههای جاوا)
- بالغ و آماده استفاده (همین حالا)
هیچ یک از زبانهای Python، Ruby، C#، Java، Go، C، C++، JavaScript و اکوسیستمهای آنها، دارای همه ویژگیهای بالا نیستند. همروندی به شکل Erlang، سرعت و قابلیت اطمینان Java، دستور زبان منعطف Ruby، ویژگیهای تابعی و Type-System نزدیک به Haskell و … اسکالا را تا حدودی بیرقیب کرده است.
زبان اسکالا یک زبان آسان نیست و دارای ویژگیهای زیادی است و این یکی از دلایلی است که افراد گیک و حرفهای را به خود جذب میکند. برنامهنویسان خبرهای هستند که ترجیح میدهند در یک استارآپ نوپا بر روی تکنولوژیهای جدید و جالب کار کنند تا اینکه مثال در گوگل با Python یا در فیسبوک با PHP کار کنند. به همین دلیل، بسیاری از موسسان استارتاپها در انتخاب تکنولوژیهای مدرن و پیشرو، درنگ نمیکنند. استفاده از زبانهایی مثل اسکالا شرایط را برای حضور افراد با انگیزه و خبره در کارهای جدید فراهم میکند.
جذاب، بالغ، رو به رشد
طی سالهای اخیر توجه شرکتها و موسسات بیشتری به اسکالا جذب شده است. بلوغ اسکالا باعث شده تا نه تنها شرکتهای پیشرو در صنعت IT (همچون توئیتر، لینکدین و …) بلکه تعداد زیادی از شرکتهای ریز و درشت که تنها مصرفکنندگان محصولات فناوری هستند نیز به استفاده از این زبان و بستر منحصر به فرد آن رو بیاورند. ابزارهای Build و Test، کتابخانه و چارچوبهای منحصر به فردی هم چون Scalaz، Play، Akka و … در کنار دسترسی به طیف گسترده کتابخانههای جاوا، آن را به یکی از گزینهها برای توسعه انواع محصولات نرمافزاری تبدیل کرده است. هم اینک این زبان در بسیاری از شرکتها/موسسات به طور گستردهای استفاده میشود؛ WalMart (شعبه کانادایی)، خبرگزاری گاردین، سایت خبری سرگرمی The Huffington Post، سایتCoursera ، WhitePages و … از نامآشناترین موسساتی هستند که میتوان نام برد. برخی از شرکتها/موسسات نام برده تمام یا بخشی از نرمافزارهای موجود خود را که با PHP، Ruby و حتی Java بود، با نمونه بازنویسی شده اسکلا، جایگزین کردهاند.
اسکلا نه تکرار مکررات است و نه کتاب ناخوانده! این زبان پاسخی نه شاید جامع، ولی مفید، و پاسخی به نیازهای صنعت نرمافزار است؛ صنعتی رو به رشد، متغیر و تاثیرگذار. حتی اگر اسکالا در آینده جای زبانهای فراگیری مثل جاوا را نگیرد، سطح استانداردهای زبانهای برنامهنویسی را به سطحی میرساند که دیگر بازگشت به گذشته ممکن نیست.
سرعت و کارایی
به لطف JVM، برنام ههای نوشته شده با اسکالا از کارایی بسیار بالایی برخوردارند، مخصوصا هنگامی که JVM به واسطه قابلیت JIT به حداکثر توان محاسباتی سیستم دست پیدا میکند، کارایی آن تفاوت چندانی با زبانهایی هم چون C و ++ C ندارد. شرکت WhitePages با بازنویسی بخشی از سرویسهای Backend خود با اسکالا (که پیشتر با Ruby و Perl نوشته شده بودند) توانست بیش از 90 درصد در هزینههای سختافزاری خود، صرفهجویی کند. سرعت اجرای یک زبان برنامهنویسی هرچند مهم است، اما مهمتر از آن، قابلیتهای زبان در همروندی و توزیعشدگی است. اسکالا به لطف ابزارها و چارچوبهایی همچون Akka، این کار را نهتنها راحت بلکه بسیار جذابتر نیز کرده است.
باید توجه داشت که مشکل اساسی، هزینه سختافزار نیست بلکه با نزدیک شدن به اتمام قانون مور نیاز به افزایش همروندی و توزیعشدگی اجتنابناپذیر است.
شرکت Typesafe
شرکت تایپسیف (Typesafe) بزرگترین حامی و پشتیبان زبان و بستر اسکالا است که تا کنون موفقیتها و جذب سرمایه خوبی داشته است. فعالیت اصلی این شرکت در ارایه خدمات تجاری آموزشی و مشاورهای در زمینه ساخت نرمافزارهای نوین با قدرت پاسخگویی به تعداد کاربران بالاست که در اصطلاح به این نرمافزارها، نرمافزارهای Reactive میگویند. تایپسیف به صورت رسمی به توسعه کامپایلر اصلی اسکالا و ابزارهای مرتبط همچون چهارچوب تولید نرمافزارهای توزیع شده Akka، چهارچوب Play، محیط توسعه (IDE) و … میپردازد (نگران نباشید! همه اینها متنباز هستند).
به این مجموعه ابزارها چهارچوب / بستر Typesafe میگویند. وجود یک سازمان پشتیبان برای ابزارهای متنباز باعث دلگرمی استفادهکنندگان از آ نها میشود و مدیران و موسسان با خیال آسودهتری آنها را انتخاب میکنند.
اسکالا پایهایترین عضو چارچوب/بستر تایپسیف است. از اهداف این چارچوب، همراه شدن با تغییراتی است که روند توسعه نرمافزار را متحول میکنند. حقیقت این است که نیازها و شرایط تولید نرمافزارها تغییر کردهاند. امروزه چابکی و کارایی بالا در فرآیند تولید نرمافزار یک نیاز واقعی است. اما در کنار آن، محصول تولید شده باید مقیاسپذیر و پاسخگو (Responsive) نیز باشد. چارچوب/ بستر تایپسیف سعی در تولید و پشتیبانی ابزارهایی دارد که با معماری Reactive مطابق بوده و همچنین تاثیر مثبتی در کارایی و چابکی فرآیند توسعه داشته باشند.
ابزارهای توسعه و IDE ها
یکی از مهمترین ابزارهای توسعه و ساخت نرمافزار در اسکالا Scala Build Tool است. در SBT مشخصات و ساختار یک پروژه اسکالا با خود زبان اسکالا تعریف میشود. SBT از انعطاف و قدرت زیادی برخوردار است و حتی گاهی اوقات پیچیده به نظر میرسد. اما بیشتر پروژههای اسکالا با استفاده از SBT ساخته میشوند. Activator نیز بر پایه SBT تولید شده است.
از چارچوبهای آزمون اسکالا میتوان به Specs2 و ScalaTest اشاره کرد که بسیار کاربردی و کارآمد هستند. حتی برای بسیاری از برنامهنویسان، نوشتن آزمون به زبان اسکالا دروازه ورود به این زبان بوده است.
سه محیط توسعه قدرتمند Eclipse، IntelliJ IDEA و NetBeans از اسکالا پشتیبانی میکنند. هر چند پشتیبانی NetBeans به خوبی بقیه نیست. نسخه Eclipse که برای اسکالا بهینه شده Scala IDE نام دارد و IDEA نیز با استفاده از پلاگین از این زبان پشتیبانی میکند.
Scala IDE به طور کامل، متنباز و رایگان است و علاوه بر پشتیبانی از اسکالا از چارچوب پلی (Play) نیز به خوبی پشتیبانی میکند.
IDEA متنباز است اما دارای دو نسخه تجاری و رایگان میباشد. نسخه رایگان به طور کامل و حتی بهتر از Scala IDE از زبان اسکالا پشتیبانی میکند اما پشتیبانی کامل از چارچوب پلی در IDEA نیازمند خریداری نسخه تجاری به مبلغ ۱۹۹ دلار (به ازاء هر توسع هدهنده) میباشد.
حرفهایترین و بالاترین کیفیت پشتیبانی از زبان و اکو سیستم اسکالا توسط IDEA مهیا شده است ولی در بین نسخههای کاملا رایگان ScalaIDE پیشتاز است.
هر چند با استفاده از Activator و یک ویرایشگر متنی ساده نیز میتوان یک نرمافزار کامل را توسعه داد اما استفاده از ابزارهای گفته شده میتواند سرعت توسعه را افزایش دهد.
جامعه باز و آزاد اسکالا
نکته جالب برای اکوسیستمهای باز مثل اسکالا این است که معمولا هرگز از تک فرهنگی بودن رنج نمیبرند. شرکت تایپسیف به علت اهداف بلندمدتی که دارد کمی از نوآوری و تغییرات در اسکالا کاسته و در عوض بر روی استحکام و پایداری آن تمرکز کرده است.
مطمئنا برخی از اعضای جامعه اسکالا با این استراتژی موافق نبوده و علاقهمند به ادامه روند نوآوری در اکوسیستم و زبان اسکالا هستند. این افراد دست به ایجاد یک انشعاب به نام Typelevel زدند تا نسخهای از اسکالا با قابلیتهای جدید و مدرن به همراه اکوسیستمی که با این نوآوریها همسان باشد را تولید و نگهداری کنند.
نکته مهم اینکه مارتین اودرسکی (رییس هیأت مدیره تایپسیف) از این حرکت به شدت استقبال و حمایت کرد و اعلام کرد نوآوریهایی که در Typelevel پیادهسازی شود و قابل قبول جامعه باشد در نسخه اصلی Typesafe نیز ادغام خواهد شد و این باعث بهبود کل اکوسیستم خواهد گردید.
جامعه برنامهنویسان و موقعیتهای شغلی علیرغم استفاده بالای اسکالا در پروژههای نرمافزاری، نسبت به رقبای نوظهور خود و تقاضای روزافزون شرکتها (مانند همه زبانهای برنامهنویسی دیگر)، تعداد برنامهنویسان آن به آهستگی رو به افزایش است. به نظر میرسد کمبود برنامهنویسان این زبان سختترین مانع در راه به کارگیری آن است. طبق آماری غیررسمی، تعداد برنامهنویسان اسکالا در ایران به سختی نیاز ۱۰ شرکت نرمافزاری را مرتفع میکند اما این حقیقت مانع استفاده از آن نشده است. سایت نمایشگاه بینالمللی کتاب ( tibf.ir)، از پروژههای انجام شده با اسکالا است.
چرا اسکالا نه؟
مثل همه ابزارها، اسکالا هم با همه خوبیهایی که دارد از ضعفهایی رنج میبرد. اسکالا زبان سادهای است اما این سادگی به معنی آسان بودن آن نیست. تعدد ویژگیهای اسکالا باعث میشود تا برنامهنویس نتواند در مدت زمان کم به تمامی آنها مسلط شود و همین امر باعث دشواری فرایند یادگیری زبان میشود. تعداد کم برنامهنویسان اسکالا (نسبت به تقاضا و موقعیتهای شغلی موجود) هم تا حدودی متاثر از همین حقیقت است. ولی نکتهای که در این بین باعث خوشحالی است، این است که اغلب برنامهنویسان اسکالا از دانش فنی واقعا بالایی برخوردارند. هر چند کیفیت همیشه جای کمیت را نخواهد گرفت.
یک مثال از عدم موفقیت اسکالا Yammer است که در سال ۲۰۱۱ اعلام کرد که از Scala به Java مهاجرت میکند. دلایل آنها برای این کار، پیچیدگی و عدم بلوغ این زبان برنامهنویسی بود. در حقیقت در اختیار نداشتن برنامهنویسان باتجربه اسکالا باعث شد تا این شبکه اجتماعی در میانه راه، مسیر خودش را به سمت جاوا تغییر بدهد. شرکت WhitePages هم در مهاجرت از Ruby و Perl به اسکالا با مشکلات نیروی انسانی درگیر بود، ولی با این حال آنها در استفاده از اسکالا موفق بودند.
چند نکته در رابطه با نمودار
Erlang زبا ن جدیدی نیست؛ اما از آن جا که اخیرا بیشتر مورد توجه قرار گرفته است، در این نمودار لحاظ شده است.
محور عمودی نمودار براساس تعداد کل شغلهای ارایه شده در سایت indeed.com و سایتهای همکار بوده است. واضح است که جامعیت دادهها قطعی نیست. هر چند در سایتهای تخصصیتری هم چون careers.stackoverflow.com هم نتایج مشابهی به چشم میخورد اما باید توجه داشت که دادههای مربوط به پروژههای موجود در گیتهاب میتواند این نمودار را (از جهت محبوبیت بین برنامهنویسان) تا حدودی تغییر دهد، به طور مثال Docker از ابزارهای فوقالعادهای است که با زبان Go تولید شده است و یقینا میتواند نکته مثبتی برای انتخاب آن باشد.
متاسفانه در این نمودار ممکن نبود که از واژه Go به جای Golang استفاده بشود؛ در هنگام استفاده از کلیدواژه Go، موقعیتهای شغلی با واژههای Go-live یا go (به معنی رفتن) به تعداد بسیار بالا در نتایج نشان داده میشد. از آن جایی که عموما از واژه Golang برای اشاره به زبان برنامهنویسی Go استفاده میشود، آمار مربوط به Go با ضریب تقریبی بیش از ۷۰ درصد میتواند صحیح قلمداد شود.
با زبانهای برنامهنویسی ازدواج نکنید!
شاید تعجب برانگیز باشد ولی این مطلب بسیار مهم است. معمولا این حقیقت که «هر گل یک بویی دارد» نادیده گرفته میشود و برنامهنویسان با تعصبی به دور از واقعبینی، از انتخاب خودشان سرسختانه دفاع میکنند.
با این حال هدف این نوشتار نه تبلیغ ، بلکه تنها معرفی اسکالا به خلاصهترین، گویاترین و صادقانهترین شکل ممکن بود. اسکالا با تمام خوبیها و کاستیهایش مانند هر زبان دیگری بهترین زبان برنامهنویسی نبوده و نخواهد بود، اما بدون شک قدم مثبتی در صنعت برنامهنویسی است؛ صنعتی که نیازمند تغییرات سازنده است.
منبع: نشریه «سلام دنیا»، شماره دوم – نوشته رضا سامعی، امیر کریمیدرباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتThis site uses Akismet to reduce spam. Learn how your comment data is processed.
دیدگاهتان را بنویسید