اسکالا

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Scala
Scala logo.png
گونه پارادایم‌های برنامه‌نویسی: برنامه‌نویسی تابعی، برنامه‌نویسی شیءگرا، برنامه‌نویسی دستوری
طراح(ها) مارتین اودرسکی
توسعه‌دهنده(ها) آزمایشگاه متدهای برنامه‌نویسی مؤسسه پلی‌تکنیک فدرال لوزان
سکو ماشین مجازی جاوا، LLVM
تاثیر گرفته از ارلنگ، هسکل (زبان برنامه‌نویسی)،[۱] جاوا (زبان برنامه‌نویسی)، لیسپ،[۲] Pizza،[۳] Standard ML, OCaml، اسکیم، اسمال‌تاک
تاثیر گذاشته بر Fantom، Ceylon
وب‌گاه www.scala-lang.org

اسکالا (به انگلیسی: Scala) یک زبان برنامه‌نویسی شیءگرا و تابعی است. نام اسکالا آمیزه‌ای است از "scalable" و "language" به معنی زبان مقایس‌پذیر، از اهداف اصلی ایجاد زبان اسکالا، ارائه زبانی است برای تولید نرم‌افزار مقیاس‌پذیر به روشی چابک و سریع، و به دور از مشکلات مرسوم. اسکالا تلفیق زبان‌های شی‌گرا همچون روبی و جاوا با زبان‌های تابعی همچون Haskell و Erlang است. از نقطه نظر چابکی و کارایی، عده‌ای اسکالا را جمع دو دنیای زبان‌های پویا (Dynamic-Type) و ایستا (Static-Type) می‌دانند. یکی از دلایل دیگری که باعث مقبولیت و همچنین کارایی بالای این زبان می‌شود، دستور زبان (Syntax) منعطف آن است. اسکالا توسط پروفسور مارتین اودرسکی که خالق Genericهای جاوا و از برترین توسعه دهندگان کامپایلر javac می‌باشد، در سال ۲۰۰۳ طراحی و به مرور توسط ایشان و جامعه اسکالا بهبود و توسعه داده شده است.[۴]

جیمز استراچن (به انگلیسی: James Strachan) سازندهٔ زبان برنامه‌نویسی Groovy در توصیفی اسکالا را ادامه‌دهندهٔ احتمالی جاوا دانسته است.[۵]

ویژگی‌ها[ویرایش]

ورود و پیشرفت زبان اسکالا در صنعت نرم‌افزار فقط به دلیل موجز بودن، راحتی برنامه‌نویس و انعطاف آن نیست. طبق قانون مور تعداد ترانزیستورهای یک پردازنده، هر دو سال، دو برابر می‌شوند. به عبارت دیگر ابعاد ترانزیستورها در حال نصف شدن است و این روند در سال ۲۰۲۰ متوقف خواهد شد. هم اکنون نیز کند شدن این روند قابل مشاهده است و به جای اینکه سرعت پردازنده‌ها زیاد شود، تعداد هسته‌های آن‌ها بیشتر می‌شود. شاهد این امر تلفن‌های هوشمند و تبلت‌ها هستند؛ آن‌ها از پردازنده‌های چند هسته‌ای بهره می‌برند ولی بازه سرعت پردازنده‌ها چند سالی است که تغییر شگرفی نکرده است. به همین دلیل برنامه‌هایی با قابلیت اجرای همروند (Concurrent) و توزیع شده (Distributed) بیش از پیش مورد توجه قرار گرفتند. با افزایش کاربران و تقاضا و نزدیک شدن به اتمام قانون مور، روز به روز تقاضا برای تولید چنین نرم‌افزارهایی افزایش می‌یابد. زبان اسکالا دارای ویژگی‌هایی است که مختص چنین تقاضاهایی طراحی شده است. از آن جمله می‌توان به Functional Programming، Pattern Matching، Immutables اشاره کرد. علاوه بر این، اسکالا حاصل جمع ویژگی‌های بسیاری از زبان‌های موجود در بازار است. در حال حاضر زبان اسکالا تنها زبانی است که شامل تمامی خصایص زیر می‌باشد:

  • رایگان و متن باز
  • استاتیک و چک زمان کامپایل (Type-safe)
  • شی گرا (Object Oriented)
  • تابعی (Functional)
  • موجز و منعطف
  • دارای طیف وسیعی از کتابخانه‌ها (امکان استفاده راحت از کتابخانه‌های جاوا)
  • بالغ و دارای ابزارهای توسعه گوناگون

هیچ‌یک از زبان‌های Python، Ruby، C#، Java، Go، C/C++، JavaScript و اکو سیستم‌های آن‌ها، دارای همه ویژگی‌های بالا نیستند.

طی سال‌های اخیر توجه شرکت‌ها و موسسات بیشتری به سمت اسکالا جذب شده است. بلوغ اسکالا باعث شده تا نه تنها شرکت‌های پیشرو در صنعت IT (همچون Twitter، LinkedIn و ...) بلکه شرکت‌های ریز و درشت بسیاری که تنها مصرف کنندگان محصولات فناوری هستند نیز به استفاده از این زبان و بستر منحصر به فرد آن رو بیاورند. ابزارهای Build و Test، کتابخانه و چارچوب‌های منحصر به فردی همچون Scalaz، Play، Akka و ... در کنار دسترسی به طیف گستردهٔ کتابخانه‌های جاوا، اسکالا را به یکی از بهترین گزینه‌ها برای تولید انواع محصولات نرم‌افزاری تبدیل کرده. هم اینک اسکالا در بسیاری از شرکت‌ها/موسسات به طور گسترده‌ای استفاده می‌شود؛ WalMart (شعبهٔ کانادایی)، خبرگذاری Guardian، سایت خبری سرگرمی HuffingPost، سایت Coursera ،WhitePages و ... از نام آشناترین موسساتی هستند که می‌توان نام برد. برخی از شرکت‌ها/موسسات نام برده تمام یا بخشی از نرم‌افزارهای موجود خود را که با PHP، Ruby ، ... و حتی Java بود، با نمونهٔ بازنویسی شده با اسکلا جایگزین کردند.

سرعت و کارایی[ویرایش]

به لطف JVM، برنامه‌های نوشته شده با اسکالا از کارایی بسیار بالایی برخودارند، بلاخص هنگامی که JVM به واسطهٔ قابلیت JIT به حداکثر توان محاسباتی سیستم دست پیدا می‌کند، تفاوت چندانی با زبان‌هایی همچون C و ++C ندارد. شرکت 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 ایجاد کرده‌ایم.

منابع[ویرایش]

  1. Fogus, Michael (6 August 2010). "MartinOdersky take(5) toList". Send More Paramedics. Retrieved 2012-02-09. 
  2. "Scala Macros". 
  3. Martin Odersky et al. , An Overview of the Scala Programming Language, 2nd Edition
  4. مجلهٔ «سلام دنیا» شمارهٔ دو. November 2014. 
  5. ویکی‌پدیای فارسی
  6. مجلهٔ «سلام دنیا» شمارهٔ دو. November 2014.