פרדיגמות | תכנות פונקציונלי, תכנות מונחה-עצמים, תכנות אימפרטיבי |
---|---|
תאריך השקה | 20 בינואר 2004 |
מתכנן | מרטין אודרסקי |
מפתח | מרטין אודרסקי, אקול פוליטכניק פדרל בלוזאן |
טיפוסיות | סטטית, חזקה, הסקת טיפוסים, מבנית |
מימושים | JVM, LLVM |
הושפעה על ידי | Eiffel, Erlang, Haskell, Java, Lisp, Pizza, Standard ML, OCaml, Scheme, Smalltalk |
רישיון | BSD-3 |
סיומת | scala. |
http://www.scala-lang.org | |
סקאלה (Scala) היא שפת תכנות מרובת פרדיגמות, אשר תוכננה כ-"better Java", כלומר "גרסה טובה יותר" של שפת Java. סקאלה פועלת על גבי המכונה הווירטואלית של ג'אווה (JVM) ושומרת על תאימות גבוהה עם ג'אווה המאפשרת לה לעבוד עם קוד ג'אווה.
סקאלה משלבת מאפיינים של תכנות פונקציונלי יחד עם מודל התכנות מונחה-עצמים של ג'אווה, תוך שהיא "מנקה" את מה שלעיתים קרובות נחשב כחסרונות הקיימים בשפת ג'אווה (דברים כגון type erasure, אופן הטיפול בחריגות ומערכת טיפוסים לא אחידה), ומוסיפה מספר מאפיינים חדשים המאפשרים כתיבת קוד נקי, תמציתי ואקספרסיבי יותר.
השם Scala הוא הלחם בסיסים של המילים האנגליות "scalable" (סילומי) ו-"language" (שפה), ומטרתו לרמז על כך שהשפה תוכננה לגדול ביחד עם הדרישות של המשתמשים בה. ג'יימס סטראצ'ן, המפתח של שפת התכנות Groovy, הגדיר את סקאלה כיורשת אפשרית לשפת Java.
הפצת התוכנה של סקאלה, כולל המהדר וספריות התוכנה נעשית תחת רישיון BSD.
הפיתוח של סקאלה החל ב-2001 במכון הטכנולוגי של לוזאן (EPFL) על ידי מרטין אודרסקי. אודרסקי עבד קודם לכן על ג'אווה גנרית ו-javac, מהדר הג'אווה של חברת סאן. סקאלה שוחררה לשוק בסוף 2003 / תחילת 2004 על פלטפורמת ג'אווה, וביוני 2004 גם לפלטפורמת NET. גרסה שנייה של השפה, 2.0, שוחררה במארס 2006. התמיכה ב-NET. הופסקה רשמית ב-2012. ב-17 בינואר 2011 זכה הצוות של סקאלה במענק מחקר לחמש שנים בסך של 2.3 מיליון יורו ממועצת המחקר האירופית (ERC). ב-12 במאי 2011 הקימו אודרסקי ושותפיו את חברת Typesafe, שמספקת תמיכה מסחרית בסקאלה, כמו גם הדרכה עולמית בשפה ושירותים שונים. Typesafe, ששינתה מאז את שמה ל Lightbend, גייסה עד כה כ-52 מיליון דולר, בין היתר מ-IBM ואינטל קפיטל.
סקאלה פועלת על גבי הפלטפורמה של ג'אווה (המכונה הווירטואלית של ג'אווה) וקיימת תאימות בינה לבין תוכניות ג'אווה קיימות. תוכניות סקאלה יכולות לרוץ גם על טלפונים חכמים שמריצים את מערכת ההפעלה אנדרואיד. קיים מימוש אלטרנטיבי גם עבור פלטפורמת דוט-נט.
לסקאלה יש את אותו מודל הידור כמו בג'אווה ו-סי שארפ (separate compilation, dynamic class loading), כך שקוד סקאלה יכול לקרוא לספריות ג'אווה (או לספריות דוט-נט במימוש המתאים).
הביצועים של סקאלה שווי ערך לאלה של ג'אווה. המהדר של סקאלה יוצר bytecode זהה כמעט לגמרי לזה שנוצר על ידי המהדר של ג'אווה. למעשה, קוד בשפת סקאלה יכול לעבור "הידור-לאחור" (decompiled) לקוד ג'אווה קריא, למעט כמה פעולות constructor ייחודיות. מבחינת ה-JVM, קוד סקאלה וקוד ג'אווה הם זהים. ההבדל היחיד הוא בספריית runtime אחת בשם scala-library.jar
.
כמו ג'אווה, סקאלה היא שפת תכנות מונחית-עצמים בה נהוגה טיפוסיות חזקה, המשתמשת במערכת טיפוסים סטטית. בשפה נעשה שימוש בתחביר של סוגריים מסולסלים המזכיר את שפת C, והיא עוברת הידור ל-Java bytecode, מה שמאפשר לקוד סקאלה לרוץ על גבי ה-JVM, ומאפשר קריאה חופשית לספריות ג'אווה מתוך קוד של סקאלה ולהפך, מבלי הצורך ב"שכבת דבק" כלשהי בין השתיים.
שלא כמו בג'אווה, סקאלה מוסיפה מאפיינים רבים הקיימים בשפות תכנות פונקציונליות כמו Standard ML ,Scheme ו-Haskell. ביניהם:
כמו ב-#C, אבל שלא כמו ב-Java, סקאלה מספקת מערכת טיפוסים אחידה, שבה כל הטיפוסים, כולל טיפוסים פרימיטיביים כמו integer ו-boolean הם אובייקטים היורשים מהמחלקה Any
. כמו כן, סקאלה כוללת עוד כמה מאפיינים הקיימים ב-#C אבל לא קיימים ב-Java. ביניהם:
בנוסף לכך סקאלה כוללת כמה מאפיינים מתקדמים במערכת הטיפוסים שלה, שקיימים בשפות תכנות מעטות אחרות, אם בכלל.
לעיתים קרובות סקאלה מושווית עם Groovy ו-Clojure, שתי שפות תכנות הבנויות גם הן מעל ה-JVM. ההבדלים העיקריים הם:
זוהי דוגמה לתוכנית 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!")'
Java (פלטפורמת תוכנה) | ||
---|---|---|
פלטפורמה | Java (שפת תכנות) • Java Card • Java ME • Java EE • Java SE • Java Virtual Machine | |
טכנולוגיות | Java applet • Java Web Start • Java Servlet • JavaServer Pages • JavaFX • JavaServer Faces | |
מושגים | איסוף זבל • Cross-platform • Java Bytecode • Java Development Kit • Javadoc • Java Classloader • Java Class Library JIT Compiler • HotSpot • JavaBeans • Enterprise JavaBeans • JNI • JAR • POJO • Web container • Java annotation | |
ממשקי תכנות יישומים | Swing • AWT • SWT • Java 3D • Java 2D • JMS • JDBC • JAXP • JPA • RMI • JNDI | |
שפות ל-JVM | Scala • Clojure • Groovy • JRuby • Jython | |
תשתיות תוכנה וכלים של חברות צד שלישי |
אפאצ'י טומקט • Apache Maven • Apache Ant • Apache Struts JUnit • Hibernate • Spring Framework • JBoss • Google Web Toolkit • BEA WebLogic • IBM WebSphere | |
סביבות פיתוח משולבות | Eclipse • NetBeans • IntelliJ | |
חברות | סאן מיקרוסיסטמס • אורקל | |
אישים | ג'יימס גוסלינג • ביל ג'וי • אריק שמידט |