Scala

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Scala
Scala logo.png
פרדיגמות תכנות פונקציונלי, תכנות מונחה-עצמים, תכנות אימפרטיבי
מתכנן מרטין אודרסקי
גרסה אחרונה 2.9.2 (14 באפריל 2012)
טיפוסיות סטטית, חזקה, הסקת טיפוסים, מבנית
מימושים JVM, CLR
הושפעה על ידי Eiffel, Erlang, Haskell, Java, Lisp, Pizza, Standard ML, OCaml, Scheme, Smalltalk
אתר http://www.scala-lang.org
סיומת scala.

סקאלה (Scala) היא שפת תכנות מרובת פרדיגמות, אשר תוכננה כ-"better Java", כלומר "גרסה טובה יותר" של שפת Java. סקאלה פועלת על גבי המכונה הווירטואלית של ג'אווה (JVM) ושומרת על תאימות גבוהה עם ג'אווה המאפשרת לה לעבוד עם קוד ג'אווה.

סקאלה משלבת מאפיינים של תכנות פונקציונלי יחד עם מודל התכנות מונחה-עצמים של ג'אווה, תוך שהיא "מנקה" את מה שלעתים קרובות נחשב כחסרונות הקיימים בשפת ג'אווה (דברים כגון type erasure, אופן הטיפול בחריגות ומערכת טיפוסים לא אחידה), ומוסיפה מספר מאפיינים חדשים המאפשרים כתיבת קוד נקי, תמציתי ואקספרסיבי יותר.

השם Scala הוא הלחם בסיסים של המילים האנגליות "scalable" (סילומי) ו-"language" (שפה), ומטרתו לרמז על כך שהשפה תוכננה לגדול ביחד עם הדרישות של המשתמשים בה. ג'יימס סטראצ'ן, המפתח של שפת התכנות Groovy, הגדיר את סקאלה כיורשת אפשרית לשפת Java.

הפצת התוכנה של סקאלה, כולל המהדר וספריות התוכנה נעשית תחת רישיון BSD.

תוכן עניינים

פלטפורמות [עריכה]

סקאלה פועלת על גבי הפלטפורמה של ג'אווה (המכונה הווירטואלית של ג'אווה) וקיימת תאימות בינה לבין תוכניות ג'אווה קיימות. תוכניות סקאלה יכולות לרוץ גם על טלפונים חכמים שמריצים את מערכת ההפעלה אנדרואיד. קיים מימוש אלטרנטיבי גם עבור פלטפורמת דוט-נט.

לסקאלה יש את אותו מודל קומפילציה כמו בג'אווה ו-סי שארפ (separate compilation, dynamic class loading), כך שקוד סקאלה יכול לקרוא לספריות ג'אווה (או לספריות דוט-נט במימוש המתאים).

הביצועים של סקאלה שווי ערך לאלה של ג'אווה. המהדר של סקאלה יוצר bytecode זהה כמעט לגמרי לזה שנוצר על ידי המהדר של ג'אווה. למעשה, קוד בשפת סקאלה יכול לעבור "הידור-לאחור" (decompiled) לקוד ג'אווה קריא, למעט כמה פעולות constructor ייחודיות. מבחינת ה-JVM, קוד סקאלה וקוד ג'אווה הם זהים. ההבדל היחיד הוא בספריית runtime אחת בשם scala-library.jar.

השוואה עם Java ו-#C [עריכה]

כמו ג'אווה, סקאלה היא שפת תכנות מונחית-עצמים חזקה, המשתמשת במערכת טיפוסים סטטית. בשפה נעשה שימוש בתחביר של סוגריים מסולסלים המזכיר את שפת C, והיא עוברת הידור ל-Java bytecode, מה שמאפשר לקוד סקאלה לרוץ על גבי ה-JVM, ומאפשר קריאה חופשית לספריות ג'אווה מתוך קוד של סקאלה ולהפך, מבלי הצורך ב"שכבת דבק" כלשהי בין השתיים.

שלא כמו בג'אווה, סקאלה מוסיפה מאפיינים רבים הקיימים בשפות תכנות פונקציונליות כמו Standard ML ,Scheme ו-Haskell. ביניהם:

  • פונקציות אנונימיות (anonymous functions)
  • הסקת טיפוסים (type inference)
  • list comprehensions (ידוע בסקאלה כ-for-comprehensions)
  • אתחול עצל (lazy initialization)
  • תמיכה נרחבת בקוד ללא side effects
  • pattern matching
  • case classes
  • delimited continuations
  • higher-order types
  • תמיכה טובה יותר ב-covariance and contravariance

כמו ב-#C, אבל שלא כמו ב-Java, סקאלה מספקת מערכת טיפוסים אחידה, שבה כל הטיפוסים, כולל טיפוסים פרימיטיביים כמו integer ו-boolean הם אובייקטים היורשים מהמחלקה Any. כמו כן, סקאלה כוללת עוד כמה מאפיינים הקיימים ב-#C אבל לא קיימים ב-Java. ביניהם:

  • העמסת אופרטורים
  • פרמטרים אופציונליים
  • named parameters
  • מחרוזות גלם (raw strings)
  • אין checked exceptions

בנוסף לכך סקאלה כוללת כמה מאפיינים מתקדמים במערכת הטיפוסים שלה, שקיימים בשפות תכנות מעטות אחרות, אם בכלל.

היסטוריה [עריכה]

הפיתוח של סקאלה החל בשנת 2001 במכון הטכנולוגי הפדרלי של שווייץ (EPFL) על ידי מרטין אודרסקי. סקאלה הושקה בסוף שנת 2003 עבור הפלטפורמה של ג'אווה, וביוני 2004 יצאה גרסה לפלטפורמת דוט-נט. גרסה 2 של השפה יצאה במרץ 2006.

בשנת 2011 זכה צוות הפיתוח של סקאלה במענק מחקר ל-5 שנים על סך 2.3 מיליון אירו מטעם מועצת המחקר האירופאית.

תוכנית Hello world לדוגמה [עריכה]

זוהי דוגמה לתוכנית Hello world שנכתבה בשפת סקאלה:

 object HelloWorld extends App {
 println("Hello, world!")
 }

שלא כמו בתוכנית stand-alone דומה בשפת ג'אווה, בסקאלה אין צורך להצהיר על מחלקה (class), ואין צורך להגדיר שום דבר כסטטי (static); במקום זאת משתמשים באובייקט סינגלטון שנוצר באמצעות המילה השמורה object. כאשר התוכנית נשמרת בקובץ בשם HelloWorld.scala, ניתן להדר אותה משורת הפקודה:

$ scalac HelloWorld.scala

וכדי להריץ אותה:

$ scala -classpath . HelloWorld

תהליך זה דומה לתהליך ההידור והרצה של קוד ג'אווה. ואכן, מודל ההידור וההרצה של סקאלה זהה לזה של ג'אווה, ובכך מאפשר תאימות שלה עם כלי בניה של ג'אווה כדוגמת Ant.

גרסה קצרה יותר של תוכנית Hello world בסקאלה:

println("Hello, world!")

אם התוכנית נשמרת בקובץ בשם HelloWorld2.scala, ניתן להריץ אותה כסקריפט מבלי להדר אותה מראש, באמצעות הפקודה:

$ scala HelloWorld2.scala

כמו כן, ניתן להזין פקודות ישירות למפרש של סקאלה באמצעות השימוש בדגל e-:

$ scala -e 'println("Hello, World!")'

קישורים חיצוניים [עריכה]