Ruby

רובי (Ruby) היא שפת תכנות דינמית מונחית-עצמים המשלבת תחביר דומה לפרל ותכונות דומות ל־Smalltalk. רובי פותחה על ידי יוקיהירו מאטסומוטו ביפן באמצע שנות התשעים. השפה הושפעה בעיקר מהשפות פרל, Smalltalk, אייפל ו־Lisp. היא נחשבת לאחת מ-20 שפות התכנות הנפוצות ביותר.

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

המימוש הסטנדרטי של גרסה 1.8.7 של רובי כתוב ב-C כמפרש בעל מעבר אחד. ארגון ממשלתי יפני מפתח כעת את המפרט של השפה. עד כה הארגון פרסם טיוטה של המפרט, שעדיין לא אושר כסטנדרט תעשייתי. קיימים מספר מימושים חלופיים של השפה, כגון YARV, JRuby, IronRuby, MacRuby. כל אחד מהמימושים בוחר בדרך שונה - חלקם מספקים הידור Just-in-time, או אף הידור Ahead-of-Time. גרסה 1.9 משתמשת ב-YARV שבסופו של דבר יחליף את המפרש הנוכחי האיטי יותר.

== היסטוריה ==
השפה נוצרה ב-24 בפברואר 1993 בידי יוקיהירו מאטסומוטו שניסה ליצור שפה חדשה שתאזן בין תכנות פונקציונלי ותכנות אימפרטיבי. מאטסומוטו אמר "רציתי שפת סקריפטים עם יותר כוח מפרל ויותר מונחית עצמים מפייתון. בגלל זה החלטתי לעצב שפה משלי", וכן "אני מקווה שרובי תעזור לכל מתכנת בעולם להיות פרודוקטיבי, ליהנות מתכנות ולהיות שמח. זו המטרה העיקרית של רובי".

=== פרסום ראשון ===
הגרסה הראשונה של השפה, רובי 0.95, פורסמה בניוזגרופס יפניים ב-21 בדצמבר 1995. עוד שלוש גרסאות של רובי פורסמו ביומיים לאחר מכן. בשלב זה בפיתוח כבר היו תכונות רבות מגרסאות מאוחרות יותר כמו פיתוח מונחה עצמים, מחלקות עם הורשה, מיקסינים, איטרטורים, קלוז'רים, טיפול בחריגות ואיסוף זבל.

=== רובי 1.0 ===
גרסה 1.0 פורסמה ב-25 בדצמבר 1996.

לאחר פרסום גרסה 1.3 ב-1999 רשימת התפוצה הראשונה בשפה האנגלית החלה את דרכה. בספטמבר 2000 הספר הראשון באנגלית על רובי - Programming Ruby - פורסם.

=== Ruby On Rails ===
בשנת 2005 השפה התפרסמה במקומות רבים בעקבות פרסום Ruby on Rails - ספריית פיתוח לאפליקציות אינטרנט שנכתבה ברובי, Ruby on Rails התקבלה באהדה רבה אצל מפתחי תוכנה ובחודש אוגוסט 2006 חברת אפל הודיעה כי תשווק את המחשבים שלה עם סביבת פיתוח מותאמת החל מאוקטובר 2007.

גרסה 2.3 יצאה לעולם ב-15 במרץ 2009, עם שיפורים רבים למנגנון ה־MVC, יצירה מהירה של אפליקציות Web על ידי שימוש ב-gems.

גרסה 3.1 יצאה באוגוסט 2011 ובה החידושים: אפשרות לביטול Migrations למסד הנתונים, Assets Pipeline, הפיכת ספריית jQuery ברירת מחדל ותמיכה ב־Coffeescript ו-SaaS.

גרסה 3.2 יצאה בינואר 2012 וזוהי הגרסה האחרונה אשר תומכת ברובי 1.8.

גרסה 4.0 יצאה ביוני 2013 והביאה עימה שיפורי ביצועים ניכרים אשר היוו בעיה בגרסאות הקודמות, בין השיפורים ניתן למצוא: TurboLinks, תמיכה בשידורים חיים וכן נוספה גישה חדשה לטיפול ב-Mass Assignment Security.

=== רובי 1.9 ===
גרסה זו הציגה מספר שינויים חשובים מגרסה 1.8, ביניהם:

* משתנים החשופים רק לבלוק בו הם נמצאים.
* תחביר נוסף לביטויי למבדה:
<syntaxhighlight lang="ruby">
 fun = ->(a,b) { puts a + b }
</syntaxhighlight>
* קידוד תווים המותאם לכל מחרוזת.
* ממשק חדש לסוקטים שתומך ב-IPv6.

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

מכיוון שרובי היא שפה מונחית עצמים טהורה ניתן ליישם בה שיטות (methods) של עצמים, אך לא שגרות (procedures). יחד עם זאת, השפה מאפשרת תכנות פרוצדורלי על ידי כתיבה של מתודות או אפילו קטעי קוד אימפרטיביים שלא בכפוף למחלקה (class) או עצם (object) והקוד מקושר באופן אוטומטי למחלקה Object, שהיא מחלקת העל של כל העצמים בשפה, ולכן ניתן לקראה מכל מקום בתוכנית.

שפת רובי מאפשרת ירושה בשיטה של ירושה בודדת (Single Inheritance) אבל מאפשרת להרחיב מחלקות, בנוסף למנגנון הירושה, על ידי מנגנון בשם Mixin המאפשר למחלקה "לרשת" קטעי קוד מרכיבים מסוג מודול שאינם מחלקות, או הוספת שיטות באופן דינמי למחלקות שהוגדרו בעבר, או אפילו הוספת שיטות באופן דינמי לעצמים מאותחלים. 

רובי מכילה שילוב של כמה מרכיבים המקלים על תכנות, ובהם שילוב של ביטויים רגולריים, כחלק מתחביר השפה, בנוסף לממשק מונחה עצמים, זאת בדומה לשפות מונחות עצמים אחרות כגון Python ו־Java.

המפרש של רובי מופץ כתוכנה חופשית, תחת רישיון כפול: ה־GPL ורישיון Ruby.

== תכונות ==
* תכנות מונחה עצמים טהור
* ירושה בודדת עם מערכת הרחבת מחלקות מתוחכמת
* טיפול בחריגות (Exception Handling)
* תמיכה ב־Iterators (באמצעות העברת בלוקי קוד)
* תמיכה ב־Closures
* תחביר שילוח שיטות המאפשר תמיכה בהעמסת אופרטורים (Operator Overloading)
* איסוף זבל (Garbage Collection)
* ריבוי נימים (multithreading) בכל הפלטפורמות
* ספרייה סטנדרטית רחבה

== קישורים חיצוניים ==

* 

* [http://www.ruby-lang.org אתר הבית של Ruby]

==הערות שוליים==

קטגוריה:שפות תכנות מונחות עצמים
קטגוריה:תוכנה חופשית