اسکالا کیست؟ توضیح بده.
اسکالا یک زبان برنامه‌نویسی شیءگرا و تابعی است. نام اسکالا آمیزه‌ای است از "scalable" و "language" به معنی زبان مقیاس‌پذیر، از اهداف اصلی ایجاد زبان اسکالا، ارائه زبانی است برای تولید نرم‌افزار مقیاس‌پذیر به روشی چابک و سریع، و به دور از مشکلات مرسوم. اسکالا تلفیق زبان‌های شی‌گرا همچون روبی و جاوا با زبان‌های تابعی همچون Haskell و Erlang است. از دیدگاه چابکی و کارایی، عده‌ای اسکالا را جمع دو دنیای زبان‌های پویا (Dynamic-Type) و ایستا (Static-Type) می‌دانند. یکی از دلایل دیگری که باعث مقبولیت و همچنین کارایی بالای این زبان می‌شود، دستور زبان (Syntax) منعطف آن است. اسکالا توسط پروفسور مارتین اودرسکی که خالق Genericهای جاوا و از برترین توسعه دهندگان کامپایلر javac می‌باشد، در سال ۲۰۰۳ طراحی و به مرور توسط ایشان و جامعه اسکالا بهبود و توسعه داده شده‌است.جیمز استراچن سازندهٔ زبان برنامه‌نویسی Groovy در توصیفی اسکالا را ادامه‌دهندهٔ احتمالی جاوا دانسته‌است.ویژگی‌ها.ورود و پیشرفت زبان اسکالا در صنعت نرم‌افزار فقط به دلیل موجز بودن، راحتی برنامه‌نویس و انعطاف آن نیست. طبق قانون مور تعداد ترانزیستورهای یک پردازنده، هر دو سال، دو برابر می‌شوند. به عبارت دیگر ابعاد ترانزیستورها در حال نصف شدن است و این روند در سال ۲۰۲۰ متوقف خواهد شد. هم‌اکنون نیز کند شدن این روند قابل مشاهده است و به جای اینکه سرعت پردازنده‌ها زیاد شود، تعداد هسته‌های آن‌ها بیشتر می‌شود. شاهد این امر تلفن‌های هوشمند و تبلت‌ها هستند؛ آن‌ها از پردازنده‌های چند هسته‌ای بهره می‌برند ولی بازهٔ سرعت پردازنده‌ها چند سالی است که تغییر شگرفی نکرده‌است. به همین دلیل برنامه‌هایی با قابلیت اجرای همروند (Concurrent) و توزیع شده (Distributed) بیش از پیش مورد توجه قرار گرفته‌اند. با افزایش کاربران و تقاضا و نزدیک شدن به اتمام قانون مور، روز به روز تقاضا برای تولید چنین نرم‌افزارهایی افزایش می‌یابد. زبان اسکالا دارای ویژگی‌هایی است که مختص چنین تقاضاهایی طراحی شده‌است. از آن جمله می‌توان به Functional Programming, Pattern Matching, Immutables اشاره کرد. علاوه بر این، اسکالا حاصل جمع ویژگی‌های بسیاری از زبان‌های موجود در بازار است. در حال حاضر زبان اسکالا دارای خصایص زیر می‌باشد:هیچ‌یک از زبان‌های Ruby, Java, Go, C, JavaScript و اکو سیستم‌های آن‌ها، دارای همه ویژگی‌های بالا نیستند.اسکالا پدری به نام Haskell دارد. همچنین تشابهات زیادی با Erlang و #F دارا می‌باشد.سی شارپ و پایتون نیز دارای قابلیت‌هایی کم و بیش نزدیک به اسکالا می‌باشند ولی شرایط اجرای متفاوتی دارند.طی سال‌های اخیر توجه شرکت‌ها و مؤسسات بیشتری به سمت اسکالا جذب شده‌است. بلوغ اسکالا باعث شده تا نه تنها شرکت‌های پیشرو در صنعت IT (همچون Twitter, LinkedIn و …) بلکه شرکت‌های ریز و درشت بسیاری که تنها مصرف‌کنندگان محصولات فناوری هستند نیز به استفاده از این زبان و بستر منحصر به فرد آن روی بیاورند. ابزارهای Build و Test، کتابخانه و چارچوب‌های منحصر به فردی همچون Scalaz, Play, Akka و … در کنار دسترسی به طیف گستردهٔ کتابخانه‌های جاوا، اسکالا را به یکی از بهترین گزینه‌ها برای تولید انواع محصولات نرم‌افزاری تبدیل کرده. هم اینک اسکالا در بسیاری از شرکت‌ها/مؤسسات به‌طور گسترده‌ای استفاده می‌شود؛ WalMart (شعبهٔ کانادایی)، خبرگزاری Guardian، سایت خبری سرگرمی HuffingPost، سایت Coursera ,WhitePages و … از نام آشناترین مؤسساتی هستند که می‌توان نام برد. برخی از شرکت‌ها/مؤسسات نام برده تمام یا بخشی از نرم‌افزارهای موجود خود را که با PHP, Ruby، … و حتی Java بود، با نمونهٔ بازنویسی شده با اسکلا جایگزین کردند.یکی از قابلیت‌های اسکالا این است که می‌تواند به‌طور جداگانه بر روی هر دایرکتوری دلخواه نصب شود و حتی نسخه‌های مختلف آن نیز می‌تواند در دایرکتوری‌های مختلف نصب شود و در واقع نصب آن به صورت System-wide نیست.اسکالا جزو زبان‌های برنامه‌نویسی دشوار برای یادگیری است و هدف از ایجاد اسکالا طراحی یک جاوای بهینه‌تر بوده‌است و در این زبان‌ها سعی شده Syntax تا حد ممکن نزدیک به زبان جاوا باقی بماند و صرفاً منحنی یادگیری این زبان‌ها نسبت به زبان جاوا کمی بهتر شود.سرعت و کارایی.به لطف JVM، برنامه‌های نوشته شده با اسکالا از کارایی بسیار بالایی برخودارند، بالاخص هنگامی که JVM به واسطهٔ قابلیت JIT به حداکثر توان محاسباتی سیستم دست پیدا می‌کند. شرکت WhitePages با بازنویسی بخشی از سرویس‌های Backend خود با اسکالا (که پیشتر، با Ruby و Perl نوشته شده بودند) توانست بیش از ۹۰٪ در هزینه‌های سخت افزای خود صرفه جویی کند. سرعت اجرای یک زبان برنامه‌نویسی هرچند مهم است، اما مهم‌تر از آن قابلیت‌های زبان در همروندی (Concurrency) و توزیع شدگی (Distribution) است. اسکالا به لطف ابزارها و چارچوب‌هایی همچون Akka، این کار را نه تنها راحت بلکه بسیار جذاب‌تر نیز کرده‌است.ابزارهای توسعه.شرکت Typesafe بزرگ‌ترین حامی و پشتیبان زبان و پلتفرم اسکالا است که تاکنون موفقیت‌ها و جذب سرمایه خوبی داشته‌است. فعالیت اصلی این شرکت در ارائه خدمات تجاری آموزشی و مشاوره‌ای در زمینه ساخت نرم‌افزارهای نوین با قدرت پاسخگویی به تعداد کاربران بالاست که در اصطلاح به این نوع نرم‌افزارها، نرم‌افزارهای Reactive می‌گویند. Typesafe به صورت رسمی به توسعهٔ کامپایلر اصلی اسکالا و ابزارهای مرتبط همچون چارچوب تولید نرم‌افزارهای توزیع شدهٔ Akka، چارچوب Play، محیط توسعه (IDE) و … می‌پردازد. به این مجموعه ابزارها، چارچوب/بستر Typesafe می‌گویند.اسکالا پایه‌ای‌ترین عضو چارچوب/بستر Typesafe است. از اهداف این چارچوب همراه شدن با تغییراتی است که روند توسعه نرم‌افزار را متحول می‌کنند. حقیقت این است که نیازها و شرایط تولید نرم‌افزارها تغییر کرده‌اند. امروزه چابکی (Agility) و کارایی بالا (Productivity) در فرایند تولید نرم‌افزار یک نیاز واقعی است. اما در کنار آن، محصول تولید شده باید مقیاس‌پذیر (Scalable) و پاسخگو (Responsive) نیز باشد. چارچوب/بستر Typesafe سعی در تولید و پشتیبانی ابزارهایی دارد که با معماری Reactive مطابق بوده و همچنین تأثیر مثبتی در کارایی و چابکی فرایند توسعه داشته باشند.جامعه باز و آزاد اسکالا.شرکت Typesafe به علت اهداف بلند مدتی که دارد مقداری از ارائه نوآوری و تغییرات در اسکالا کاسته و در عوض بر روی استحکام و پایداری آن تمرکز کرده، مطمئناً برخی از اعضای جامعه اسکالا با این استراتژی موافق نبوده و علاقه‌مند به ادامه روند نوآوری در اکو سیستم و زبان اسکالا هستند. از آنجایی که این زبان متن باز است این افراد دست به ایجاد یک انشعاب به نام Typelevel زدن تا نسخه‌ای از اسکالا با قابلیت‌های جدید و مدرن به همراه اکو سیستمی که با این نو آوری‌ها همسان باشد را تولید و نگهداری کنند.نکته مهم اینکه مارتین اودرسکی (رئیس هیئت مدیره Typesafe) از این حرکت به شدت استقبال و حمایت کرد و اعلام کرد نوآوری‌هایی که در Typelevel پیاده‌سازی شود و قابل قبول جامعه باشد در نسخه اصلی Typesafe نیز ادغام خواهد شد و این باعث بهبود کل اکو سیستم خواهد بود.نمونهٔ Hello world.در اینجا یک Hello World به زبان اسکالا قرار داده‌شده‌است: object HelloWorld extends App { println("Hello, world!")در مقایسهٔ با جاوا در این برنامهٔ ساده، نیازی به تعریف کلاس نداشتیم و چیزی نیز به‌عنوان static معرفی نشده‌است؛ در اصل با به‌بکاربردن کلمهٔ کلیدی object در اینجا ما یک Singleton ایجاد کرده‌ایم.