לואה (שפת תכנות)

לואה
Lua
מדריך השפה מאת רוברטו ירוסלמשי
מדריך השפה מאת רוברטו ירוסלמשי
פרדיגמות תכנות מונחה דגמי אב, תכנות אימפרטיבי, תכנות פרוצדורלי, תכנות פונקציונלי
תאריך השקה 1993 עריכת הנתון בוויקינתונים
מתכנן רוברטו ירוסלמשי, לואיז הנריק דה פיגרדו, ו־ולדמר סלס
מפתח אוניברסיטה הקתולית (PUC Rio) שבריו דה ז'ניירו
טיפוסיות דינמית
מימושים Lua, LuaJIT
ניבים Metalua, Idle, GSL Shell
הושפעה על ידי C++, CLU, Modula-2, Scheme, SNOBOL
השפיעה על GameMonkey, Io, JavaScript, Julia, MiniD, Red, Ring, Ruby, Squirrel, MoonScript
רישיון רישיון MIT
סיומת .lua
https://www.lua.org
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

לוּאה (Lua, מפורטוגזית: ירח) היא שפת תכנות דינמית שפותחה על ידי רוברטו ירוסלמשי, לואיז הנריק דה פיגרדו, ו־ולדמר סלס בשנת 1993 באוניברסיטה הקתולית (PUC Rio) שבריו דה ז'ניירו.[א 1][1] הגרסה הציבורית הראשונה של לואה פורסמה בשנת 1994.[1][2][3][4] לואה משמשת בעיקר כשפת תכנות מוטמעת בתוכניות אחרות.[א 1][1] המפרש הסטנדרטי של השפה כתוב בשפת C ומופץ כתוכנה חופשית ברישיון MIT בקשת רחבה של פלטפורמות.[א 1][1]

היסטוריה

TECGRAF

TECGRAF היא המעבדה לגרפיקה ממוחשבת של האוניברסיטה הקתולית שבריו דה ז'ניירו.[1] המעבדה נוסדה בשנת 1987.[1] המעבדה פיתחה ספריות ממשק גרפיות ומנהלי התקנים גרפיים כדי לספק ללקוחות שלה תוכנות עם ממשקים ידידותיים למשתמש.[1]

בין השנים 1977–1992 לברזיל הייתה מדיניות מסחר שהקשתה מאוד על ייבוא מוצרי חומרה ותוכנה מתוך מחשבה לאומנית שברזיל יכולה וחייבת לפתח חומרה ותוכנה משלה.[1] על רקע מצב זה המעבדה TECGRAF נאלצה לפתח את הספריות והשפות המקוריות שלה במקום להישען על מוצרים טכנולוגיים קיימים.[1]

אחת מהלקוחות הכי חשובים של TECGRAF היה חברת הנפט הברזילאית פטרוברז.[1] TECGRAF פיתחה סך הכול שלוש שפות תכנות עבור הצרכים של פטרוברז.[1] שתי שפות התכנות הראשונות, DEL ו־SOL, הובילו לפיתוחה של לואה.[1]

DEL

Data-entry Languageראשי תיבות: DEL, בעברית: שפה לקליטת נתונים) הייתה שפת תכנות הצהרתית קטנה שפותחה על ידי TECGRAF עבור פטרוברז.[1] בשנת 1992 פטרוברז פנתה ל־TECGRAF בבקשה לפתח לה ממשק משתמש ידידותי עבור המהנדסים בחברה שנאלצו עד כה להשתמש בכרטיסים מנוקבים כדי להזין נתונים מספריים למחשבים.[1] DEL הייתה שפה מוצלחת מאוד אך די מוגבלת; בעקבות זאת, נדרשו עוד ועוד יכולות חדשות לשפה כגון בקרת זרימה, מה שהוביל את המעבדה למסקנה שנדרש פיתוח של שפת תכנות חדשה.[1]

SOL

Simple Object Language (בראשי תיבות SOL, בעברית: שפת עצמים פשוטה) הייתה שפת תכנות הצהרתית עם טיפוסיות חזקה שפותחה על ידי TECGRAF עבור פטרוברז.[1] SOL הושפעה רבות מ־BibTeX ו־UIL, שפה ששימשה לעיצוב ממשקים גרפיים במערכות יוניקס.[1] הפיתוח של SOL הושלם בשנת 1993, אך השפה מעולם לא הושקה בפועל.[1] בפטרוברז כבר דרשו תמיכה בתכנות פרוצדורלי; בעקבות כך, TECGRAF החליטו להחליף את שתי השפות באחת שתתן מענה מקיף לכל הדרישות של פטרוברז, וכך נולדה לואה.[1]

PUC Rio Lua

הפיתוח של לואה החל בשנת 1993 על ידי מדען המחשב רוברטו ירוסלמשי, המתמטיקאי לואיז הנריק דה פיגרדו, ומהנדס התוכנה ולדמר סלס; השלושה עבדו יחד ב־TECGRAF.‏[1] משמעות השם "Lua" בפורטוגזית היא ירח; השם נבחר בעקבות שמה של שפת התכנות SOL שקדמה ללואה, מכיוון שמשמעות המילה "Sol" בפורטוגזית היא שמש.[1] לואה ירשה מ־SOL את יעודה כשפה לתיאור נתונים, ומ־DEL את יעודה כשפה משובצת.[1] בנוסף ל־SOL ו־DEL, לואה הושפעה גם ממודולה־2, CLU, Scheme, C++, ו־SNOBOL.[1] מודולה־2 תרמה את רוב התחביר והמילים השמורות בשפה.[1] Scheme הייתה מקור להשראה עבור הסמנטיקה בשפה; לדוגמה, התייחסות לפונקציות כערכים והמעבר ההדרגתי לתחום הכרזה לקסיקלי.[1] CLU נתנה השראה לריבוי החזרות והקצאות מפונקציות.[1] ++C נתנה השראה למשתנים מקומיים.[1] SNOBOL נתנה השראה לטבלאות בשפה.[1]

Lua 1.0–1.1

בשנת 1993 הסתיים הפיתוח של Lua 1.0, אבל גרסה זו לא שוחררה לציבור באותו הזמן.[1][2][3] המנתח הלקסיקלי הראשון של השפה פותח באמצעות Lex ו־Yacc.[1]

בשנת 1994 שוחררה Lua 1.1 וזמן קצר לאחר מכן פורסם המאמר שהציג לראשונה את השפה לקהל הרחב.[1][2][3][4] גרסה זאת הייתה חופשית לשימוש אקדמי אך לא לשימוש מסחרי.[1][2] בגרסה זו פותח מנתח לקסיקלי חדש לשפה שהכפיל את מהירות הניתוח התחבירי.[1]

Lua 2.1–2.5

בשנת 1995 פורסמה Lua 2.1.[1][2][3] בגרסה זו הופיע לראשונה התחביר שאפשר חיקוי של תכנות מונחה עצמים בשפה, ונוסף מנגנון למצבי נסיגה.[1][3][5] החל מגרסה זאת היישום המרכזי של לואה הפך להיות חופשי גם לשימוש מסחרי.[1][3] בגרסה הקודמת, לואה הציעה שלוש דרכים ליצירת טבלאות: בסוגריים עגולים () לטבלה ריקה, בסוגריים מרובעים [] למערך מספרים, ובסוגריים מסולסלים {} לרשומה.[1] בגרסה זו התחביר ליצירת טבלאות אוחד לסוגריים מסולסלים ופעולת ההשוואה שונתה מ־= ל־== כדי לאפשר את האיחוד בתחביר הטבלאות.[1] באותה שנה פורסמה Lua 2.2, בגרסה זו התחביר לפונקציות הורחב ונוסף ממשק חדש לניפוי שגיאות.[1][3]

בשנת 1996 פורסמה Lua 2.5.[1][2][3] בגרסה זו נוספו ממשק בשפה לחיפוש ביטויים במחרוזות, ואפשרות לריבוי פרמטרים בפונקציות באמצעות ....[1][3]

Lua 3.0–3.2

בשנת 1997 פורסמה Lua 3.0.[1][2][3] בגרסה זו הטיפוסיות של פונקציות שהוגדרו בלואה ופונקציות שהוגדרו בשפת C אוחדה לטיפוסיות אחת עבור שני סוגי הפונקציות.[1] בגרסה זו המנגנון למצבי נסיגה בשפה התחיל לקבל פרמטר נוסף לסוג האירוע: תג.[1]

בשנת 1998 פורסמה Lua 3.1.[1][2][3] בגרסה זו לואה אימצה תחום הכרזה לקסיקלי חלקי, פונקציות אנונימיות, וייצוג מספרים בשפה באמצעות נקודה צפה באורך כפול.[1][3] לאור המחסור בלולאת for, חוסר שביעות רצון מלולאות while, ומחלוקת על התחביר האפשרי עבור לולאת for, הוחלט בסוף לספק פונקציה כללית מסדר גבוה מהצורה foreach(t, print) שתבצע עבודה בלולאה מתוך פרמטר של פונקציה.[1] החל מגרסה זו, ניתן להגדיר מפתח בטבלה באמצעות סוגריים מרובעים כך: t={["key"]=value}.[1] באותה שנה הושק הסמליל הנוכחי של השפה.[2][6]

בשנת 1999 פורסמה Lua 3.2.[1][2][3] בגרסה זו נוספה ספרייה חדשה בשפה לניפוי שגיאות,[1] ומטא פונקציות חדשות עבור טבלאות.[3] גרסה זו נחשבה לאחת הגרסאות היציבות של לואה, רבים דילגו כליל על Lua 4.0 ועברו מ־Lua 3.2 הישר אל Lua 5.0.[1]

Lua 4.0–4.1

בשנת 2000 פורסמה Lua 4.0.[1][2][3] מגרסה זו ניפוי השגיאות בשפה הפך להיות זמין בכל רגע נתון בזמן ריצה ונוספו לולאות מסוג for.[1][3] כמו כן, נוספה בשפה ספרייה לאינטראקציה עם מערכות הפעלה וממשק ה־C של השפה ידע להתמודד עם ריבוי מצבים.[1]

בשנת 2001 פורסמה גרסת אלפא של Lua 4.1.[1] גרסה זאת הייתה בפועל Lua 5.0 תוך כדי הליך הפיתוח שלה; הקפיצה במספר ל־5.0 התרחשה בשנת 2002 לאחר פיתוח מנגנון חדש לניהול מודולריות בשפה.[1]

Lua 5.0–5.4

בשנת 2003 פורסמה Lua 5.0.[1][2][3] בגרסה זו לואה אימצה תחום הכרזה לקסיקלי מלא וזנחה את מנגנון היקף המשתנים הקודם, נוספו שגרות המשך, תהליכונים, מטא טבלאות, משתנים בוליאניים, מיטוב לרקורסיית זנב, טבלאות עם ייחוס משתנים חלש (ייחוס מתירני לאיסוף זבל), והרחבות נוספות.[1][3] החל מגרסה זו לואה שוחררה תחת רישיון MIT.[1][3] החל מגרסה זו, ניתן לערבב בטבלאות באופן חופשי בין רשומות ופריטים.[1] באותה שנה פורסמה המהדורה הראשונה של מדריך השפה.[1][2] בחודש יולי באותה שנה Lua 1.0 שוחררה לציבור לרגל חגיגת עשור לשפה.[1]

בשנת 2005 פורסמה הגרסה הראשונה של המהדר LuaJIT.[7]

בשנת 2006 פורסמה Lua 5.1.[1][2][3] בגרסה זו הופיע מנגנון חדש לאיסוף זבל, תחביר חדש למודולריות, מנגנון חדש לריבוי פרמטרים בפונקציות, קינון הערות ומחרוזות בעזרת [==[...]==], שתי פעולות חדשות: אורך ומודולו, מטא טבלאות לכל הטיפוסים, והרחבות נוספות.[1][3] באותה שנה פורסמה המהדורה השנייה של מדריך השפה.[2]

בשנת 2011 פורסמה Lua 5.2.[2][3] בגרסה זו נוספה ספרייה לפעולות על סיביות (פעולות ביטים), יכולת קידוד UTF-8 במחרוזות, פעולת goto, והרחבות נוספות.[3]

בשנת 2012 ויקיפדיה אימצה את לואה כשפת תסריט לתבניות.[2][8]

בשנת 2013 פורסמה המהדורה השלישית של מדריך השפה.[2]

בשנת 2015 פורסמה Lua 5.3.[2][3] בגרסה זו נוסף טיפוס חדש למספרים שלמים, נוספו סימנים חדשים לשפה לפעולות על ביטים,[א 2] ספרייה חדשה למחרוזות בקידוד UTF-8,[א 3] ותמיכה במערכות מסוג 32 ביטים ו־64 ביטים.[3]

בשנת 2016 פורסמה המהדורה הרביעית של מדריך השפה.[2]

בשנת 2020 פורסמה Lua 5.4.[2][3] בגרסה זו מנגנון חדש לאיסוף זבל, תמיכה במשתנים קבועים באמצעות <const> ותחביר חדש לסגירת משתנים.[3]

דוגמאות

שלום עולם!

print("Hello world!")
local function GCD(a, b)
    while a ~= b do
        if a > b then
            a = a - b
        else
            b = b - a
        end
    end
    return a
end

עצרת

שגרה רקורסיבית נאיבית לחישוב עצרת בלי אופטימיזציה:

local function factorial(n)
    if n == 0 then
        return 1
    end
    return n * factorial(n - 1)
end

שגרה רקורסיבית לחישוב עצרת עם אופטימיזציה:

local cache = {
    [0] = 0,
    [1] = 1
}
local function factorial(n)
    if not cache[n] then
        cache[n] = n * factorial(n - 1)
    end
    return cache[n]
end

עיצוב

עקרונותיה המעצבים של לואה הם בהירות תחבירית, הצעת מנגנונים בסיסיים במקום מבני שפה מורכבים למקרים ייחודיים, והשימוש בטבלה כמבנה נתונים אוניברסלי.[1] מאפיינים בולטים נוספים של השפה הם ניידות בין מערכות הפעלה וסוגי מעבדים שונים (מפרש השפה כתוב בשפת C והוא שוקל פחות ממגה בייט אחד), תכנות פונקציונלי, ויעילות ביצועית בזמן ובזיכרון.[א 1][1] היסטורית, לואה עוצבה להיות שפה מוטמעת לתיאור נתונים.[א 4][1] לואה מצוידת במנגנון אוטומטי לאיסוף זבל.[א 1][1] בלואה, משתנים שלא יוגדרו במפורש כמשתנים מקומיים באמצעות local יוגדרו להיות משתנים גלובליים.[א 5][א 6] גישה למשתנים לא קיימים אינה נחשבת לשגיאה בשפה, אלא משתנה לא קיים תמיד יחזיר ערך nil.[א 5]

סמנטיקה

מבחינה סמנטית, לואה שואבת השראה משפת התכנות Scheme.[1] ההשפעה של Scheme על לואה הייתה ניכרת באופן הדרגתי עם ההתפחות של לואה, במיוחד עם הופעתן של פונקציות אנונימיות ותחום הכרזה לקסיקלי ב־Lua 3.1.[1] באופן דומה ל־Scheme, למשתנים אין טיפוסיות, אלא רק לערכים יש טיפוסיות; משתנים לעולם לא מעתיקים מבנה נתונים בהקצאה, אלא רק מעתיקים את המצביע לאותו מבנה נתונים; לפונקציה אין מעמד מיוחד בשפה, היא ככל שאר טיפוסי הנתונים וניתן להקצות אותה למשתנה כלשהו; למעשה לכל המבנים בשפה יש מעמד שווה, ואת כולם ניתן להקצות לתוך משתנים.[1] עם זאת, קיים הבדל סמנטי מרכזי בין לואה ל־Scheme, בכך שטבלאות הן מבנה הנתונים היחידי בלואה, ומהן המתכנת מרכיב מבני נתונים מורכבים יותר כגון מחסניות, קבוצות, ורשימות.[1]

טיפוסי נתונים

בלואה, למשתנים אין טיפוסיות, אלא רק לערכים יש טיפוסיות.[א 5] ניתן לבדוק את הטיפוסיות של הערכים באמצעות הפונקציה הגלובלית type כך:[א 5]

type(print) -- function
טיפוסי הנתונים הבסיסיים של לואה[א 5][א 7][א 3]
סוג שם דוגמה פעולות[א] טווח ערכים
ערך ריק nil nil שלילה not, וגם and, או or nil
בוליאני boolean true true או false[ב]
טבלה table {} גישה והקצאה עם t["key"] או t.key, אורך # טבלה
פונקציה function f = function(x) end קריאה פונקציה
function f(x) end
מספר[ג] ממשי number float[ד] 1.0- ארבע פעולות חשבון: +, -, *, / פעולות השוואה:[ה] ==, ~=, <, >, <=, >=, מודולו %, העלאה בחזקה ^
[ו]
שלם[ז] integer
מחרוזת string "..." '...' [[...]] חיבור מחרוזות .., אורך # מחרוזת
תהליכון thread תהליכון
ערך בשפת C userdata (ערכים בשפת C)
  1. ^ לא כולל פונקציות מובנות בשפה
  2. ^ בלואה, כל ערך שאינו nil או false נחשב ל־true, כולל 0 או מחרוזת ריקה.
  3. ^ הפונקציה type לא מבדילה בין מספרים ממשים ומספרים שלמים, אבל הפונקציה math.type מחזירה float עבור מספרים ממשים ו־integer עבור מספרים שלמים.
  4. ^ בפועל מדובר בנקודה צפה באורך כפול (double).
  5. ^ פעולות ההשוואה == ו־~= זמינות לכל סוגי הערכים.
  6. ^ טווח שמאפשר הצגה מדויקת של מספרים שלמים
  7. ^ נוסף בלואה 5.3

מחרוזות

בלואה, מחרוזות הן רצף תווים עם קידוד לא מוגדר.[א 3] לדוגמה, פעולת אורך של מחרוזת לא מתחשבת בסוג הקידוד, אלא בסכום הבתים בלבד.[א 3] עם זאת, נהוג להשתמש בקידוד UTF-8, והחל מגרסה 5.3 קיימת ספרייה קטנה בשפה שיודעת להתמודד עם מחרוזות בקידוד UTF-8.[א 3] מחרוזות בלואה לא ניתנות לשינוי, במקום זאת, יוצרים כל פעם מחרוזת חדשה עם השינויים רצויים.[א 3] כשנעשית פעולה מספרית על מחרוזת (כגון חיבור מספרים +), או פעולת מחרוזת על מספר (כגון שרשור ..) לואה מנסה לבצע המרה בין מחרוזות ומספרים באופן אוטומטי.[א 3] בשפה זמינה ספרייה נרחבת להתאמת דפוסים, חיפוש, והחלפה בתוך מחרוזות באמצעות ביטויים דומים לביטויים רגולריים.[א 8]

טבלאות

בלואה, טבלאות פשוטות מתנהגות כמילונים והן משמשות להרכבת מבני נתונים מכל הסוגים, כולל מערכים, מטריצות, רשימות מקושרות, קבוצות, ועוד.[א 9][א 10] בניגוד לשפות רבות אחרות, הספירה בלואה תמיד מתחילה ב־1 ולא ב־0; כלומר, הפריט הראשון בטבלה מקומו הוא 1 ולא 0.[א 9] ניתן להקצות ערך מכל סוג של טיפוס נתונים (למעט nil המציין פריט חסר) הן למפתח בטבלה והן לערך אליו המפתח מוביל.[א 9][1] בנוסף, לא קיימת אכיפה של אחידות בטיפוסיות בטבלה, לא במפתחות ולא בערכים.[1] הפעולה לבדיקת אורך טבלה (#) מתאימה אך ורק לטבלאות רצופות היטב (ללא מקומות ריקים); ומכיוון שאין כל אכיפה בשפה על מיקום פריט בטבלה, ספירת הפריטים בטבלאות היא בדרך כלל באחריות המתכנת.[א 9][א 10] מיקומם של הפריטים בטבלה לא משפיע כלל על גודל הטבלה, מכיוון שטבלאות בשפה הן מילונים ולא מערכים.[א 10]

פונקציות

למרות היותה שפה אימפרטיבית, ללואה תמיכה מלאה בתכנות פונקציונלי.[א 11] בלואה, פונקציות הן ערכים לכל דבר ועניין וניתן להקצות אותן לתוך משתנים וטבלאות או להגדיר אותן בתוך ביטויים כתחשיב למדא.[1][א 12][א 11] כמו כן, פונקציות בשפה מתנהגות כ־סְגוֹר; לדוגמה, פונקציות יודעות להחזיר פונקציות חדשות ולהנחיל להן גישה למשתנים מקומיים שהוגדרו מחוצה להן.[א 11] כשאר הערכים בשפה, פונקציות הן אנונימיות בהגדרה, ורק למשתנים שמחזיקים אותן יש שמות.[א 11] בקריאה לפונקציה, פרמטרים חסרים ייחשבו כ־nil ופרמטרים עודפים יושלכו.[1][א 12] בלואה, פונקציות יכולות להחזיר ריבוי של ערכים.[א 12] כמו כן, לפונקציות אין אכיפה של טיפוסיות לפרמטרים או לערכים שהיא מחזירה; על המתכנת לדאוג לכך באמצעות בדיקות ידניות.[א 12] במקרים מתאימים, לואה מבצעת אופטימיזציית רקורסיית זנב.[א 12]

קלט ופלט

מהיותה שפה ניידת עם תלות מינימלית במערכות הפעלה או חומרה, ללואה ישנן יכולות מעטות בניהול קבצים וקלט נתונים.[א 13] השפה מציעה אך ורק מה שתקן ISO C מציע עבור צורכי קלט ופלט (IO), וניהול קבצים מתקדם יותר בדרך כלל כרוך בשימוש בספריות צד שלישי או בשיבוץ השפה עם שפה אחרת.[א 13] בין היכולות של לואה הן לכתוב ולקרוא בקבצים, ליצור ולמחוק קבצים, לגשת למשתני ENV, להריץ תוכנה, ולבדוק זמן ותאריך.[א 13][א 14]

ניפוי שגיאות

לואה מצוידת בספרייה לניפוי שגיאות וטיפול בחריגות בזמן ריצה.[א 15] הפונקציות assert ו־error משמשות לזריקת שגיאות.[א 15] טיפול בחריגות בשפה נעשה באמצעות הפונקציה pcall, הפונקציה מאפשרת להריץ קוד אקראי, לתפוס שגיאות בתוכו, ולמנוע קריסה של התוכנית באירוע שגיאה.[א 15] הספרייה debug נותנת למתכנת כלים כדי לבדוק את סדר קריאת השגרות ומצב התוכנית בכל נקודת זמן בקוד לבירור הנסיבות של שגיאה כלשהי.[א 15]

מודולים

לואה היא שפה מודולרית. מודול ניטען באמצעות הפונקציה require אך ורק פעם אחת בזמן ריצה של תוכנית.[א 16] ניתן לשנות את האופן בו לואה מחפשת או טוענת מודולים באמצעות הספרייה package.[א 16] כמו בשפות דינמיות אחרות, לואה מאפשרת לטעון ולפרש קוד חדש בזמן ריצה לא רק מתוך מודולים, אלא גם מתוך מחרוזת.[א 15] קוד מקור בלואה תמיד עובר הידור למצב ביניים בזמן ריצה, ניתן להדר קובץ קוד מקור בלואה ולשמור אותו באמצעות הפקודה luac במסוף.[א 15] כל יחידת קוד שעוברת פירוש, כגון קובץ קוד מקור או פקודה תקנית במסוף, נקראת חתיכה.[א 5]

תחביר

מבחינה תחבירית, לואה שואבת השראה משפת התכנות מודולה־2.[1] בניגוד למודולה־2, לואה מבדילה בין אותיות גדולות ואותיות קטנות.[א 5] הסימן נקודה ופסיק (;) מפריד בין פקודות, אך אין חובה להשתמש בו, אפילו בין שתי פקודות צמודות.[א 5]

אסימוני השפה

אסימונים בלואה[9]
סיווג הגדרה דוגמה
מזהה שם משתנה רצף תווי אותיות אלפבית לטיניות, ספרות עשרוניות, והתו _, כשהתו הראשון מוכרח להיות אות x
ערך מספר שלם עשרוני רצף ספרות עשרוניות 42
הקסדצימלי רצף תווים שנפתח ב־0X וממשיך בספרות עשרוניות או באותיות מ־A עד F 0XFFFFFF
מספר ממשי שבר עשרוני רצף ספרות עשרוניות עם נקודה עשרונית 1.25
כתיב מדעי רצף ספרות עשרוניות עם נקודה עשרונית, התו E, סימן שלילה - ורצף ספרות עשרוניות נוסף. 4.0E-10
הקסדצימלי רצף תווים שנפתח במספר הקסדצימלי (ראו במספר שלם), נקודה ., ומספר הקסדצמלי עוקב 0x0.1E
מחרוזת שורה רצף תווים מוקף בתו ", או בתו ' "ABC"
קטע רצף תווים מוקף ב־[[ ו־]] [[ABC]]
תחביר פעולה כל הופעה של תו המייצג פעולה בשפה +
מילה שמורה כל רצף תווים שיוצר מילה מרשימת המילים השמורות local
הערה שורה רצף תווים שנפתח בזוג מקפים -- ונגמר בסוף השורה --
קטע רצף תווים בנפתח בזוג מקפים -- ובזוג סוגריים מרובעים ונגמר בזוג סוגריים מרובעים כמו במחרוזת; ניתן לקונן קטעים באמצעות מספר מאוזן של התו = בין הסוגריים המרובעים בכל צד. דוגמה בהמשך

מילים שמורות

בלואה 5.3 קיימות 22 מילים שמורות, ולא ניתן להשתמש בהן כמזהים.[א 5] המילים השמורות שהופיעו עם הגרסה הציבורית הראשונה של לואה:[10]

  1. local – יצירת משתנה מקומי חדש
  2. nil – ערך ריק
  3. function – הגדרת פונקציה חדשה
  4. do – פתיחת קטע פקודות בלולאה או תחום הכרזה
  5. else – נסיגת תנאי
  6. elseif – שרשור תנאי
  7. end – סגירת קטע פקודות או תחום הכרזה
  8. if – פתיחת תנאי
  9. repeat – פתיחת לולאה מסוג repeat
  10. return – להחזיר ערך ולצאת מפונקציה. בלואה הפקודה return חייבת להיות הפקודה האחרונה בתוך קטע של פקודות (קטע פקודות מסתיים במילה end).[א 6]
  11. until – תנאי למחזור בלולאה מסוג repeat
  12. then – פתיחת קטע פקודות לביצוע בתנאי חיובי
  13. while – פתיחת לולאה מסוג while והגדרת תנאי למחזור
  14. andקשר לוגי: וגם
  15. not – קשר לוגי: לא
  16. or – קשר לוגי: או

מילים שמורות שנוספו בגרסה 4.0:[11]

  1. break – עצירת לולאה ויציאה ממנה
  2. for – פתיחת לולאה מסוג for
  3. in – קריאה לפונקציית איטרציה בתחילת מחזור של לולאה מסוג for

מילים שמורות שנוספו בגרסה 5.0:[12]

  1. true – ערך אמת
  2. false – ערך שקר

מילים שמורות שנוספו בגרסה 5.2:[13]

  1. gotoקפיצה לתווית בקוד. תוויות מסומנות באמצעות זוג נקודתיים לפני ואחרי התווית כך: ::label:: בנוסף, לא ניתן לקפוץ מחוץ לפונקציה, וכללי הנראות של משתנים חלים גם על תוויות.[א 6]

טבלאות

טבלה מוגדרת באמצעות זוג סוגריים מסולסלים {}.[א 9]

local point = {}

ניתן להכניס פריטים חדשים לטבלה בשתי דרכים: בתוך הסוגריים המסולסלים בפקודה אחת, או מחוץ לסוגריים המסולסלים באמצעות פקודה נפרדת לכל פריט.[א 9] שתי הדרכים הן שקולות, אך הדרך הראשונה היא מהירה יותר מהיבט ביצועי של המפרש.[א 9]

local point = {x = 0, y = 0}
local point = {}
point.x = 0
point.y = 0

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

local point = {}
point["x"] = 0
point["y"] = 0
print(point.x, point.y) -- 0    0

ניתן לבטא מבני נתונים מורכבים יותר באמצעות קינון טבלאות.[א 9]

local style = {
    font = {
        size = 12,
        family = "sans-serif",
        bold = false,
        italic = false
    },
    foreground_color = {R = 0, G = 0, B = 0},
    background_color = {R = 255, G = 255, B = 255}
}
print(style.font.family) -- sans-serif

ניתן גם ליצור מבנה שקול אך ללא כל מזהים. במקרה הזה, ניתן לגשת לנתונים בטבלה באמצעות תחביר המערך.[א 9]

local style = {
    {12, "sans-serif", false, false},
    {0, 0, 0},
    {255, 255, 255}
}
print(style[1][2]) -- sans-serif

הסרת פריט מהטבלה תתבצע באמצעות הקצאת הערך nil לפריט.[א 9]

local point = {x = 0, y = 0, z = 0}
point.z = nil

בפועל, גם ספריות הליבה של לואה מורכבות מטבלאות.[א 9] לדוגמה, הפונקציה math.sin נמצאת בתוך הפריט sin בטבלה math שנמצאת בהיקף המשתנים הגלובלי כך:

print(math.sin(math.pi/2))                      -- 1
print(_G["math"]["sin"](_G["math"]["pi"]/2))    -- 1

לואה מאפשרת לסימן פסיק , אחד מיותר להופיע אחרי הפריט האחרון בהגדרת טבלה.[א 9] מצורכי תאימות לאחור עם גרסאות קודמות של השפה, לואה מאפשרת גם שימוש בסימן נקודה ופסיק ; במקום פסיק , על מנת להפריד בין פריטים בטבלה.[א 9]

פונקציות

הגדרה

בלואה פונקציה מוגדרת באמצעות שם מזהה וזוג סוגריים עגולים (), כשהפרמטרים מוגדרים בתוך הסוגריים העגולים.[א 12] קיימים שני תחבירים להגדרת פונקציה, שני התחבירים שקולים.[א 12] לדוגמה, נגדיר את הפרבולה על ידי הקצאת פונקציה אנונימית לתוך המשתנה f:

local f = function(x)
    return x^2
end

או על ידי הכרזת משתנה f מסוג פונקציה:

local function f(x)
    return x^2
end

קריאה

ניתן להשמיט את הסוגריים העגולים בקריאה לפונקציה אך ורק אם יש פרמטר בודד שמגדיר טבלה חדשה (בתוך זוג סוגריים מסולסלים {}) או מחרוזת חדשה (בתוך זוג מירכאות "").[א 12] לדוגמה, הפונקציה require לטעינת מודולים יכולה לקבל פרמטר מסוג מחרוזת של שם מודול ללא זוג סוגריים עגולים:

local lfs = require "lfs" -- LuaFleSystem

תכנות מונחה עצמים

בלואה קיים תחביר נוסף להגדרת וקריאת פונקציות באמצעות נקודתיים : שמאפשר חיקוי של תכנות מונחה עצמים.[א 12] במקרים כאלה, הפרמטר הראשון יהיה אוטומטית הטבלה שמכילה את הפונקציה, והייצוג שלה בתוך הפונקציה יהיה באמצעות המשתנה המקומי self.[א 12] לדוגמה:

local vector = {x = 1, y = 2, z = 3}
function vector:scale(scalar)
    self.x = self.x * scalar
    self.y = self.y * scalar
    self.z = self.z * scalar
end
function vector:print()
    print(self.x, self.y, self.z)
end
vector:print()      --  1       2       3
vector:scale(1.5)
vector:print()      --  1.5     3       4.5

ריבוי פרמטרים

ניתן להגדיר פונקציה עם הסימן המיוחד ... שקולט מספר שרירותי של פרמטרים אנונימיים.[א 12] ניתן להעביר את אותם ערכים הלאה באמצעות ... בגוף הפונקציה.[א 12] לדגמה, פונקציית שתחשב סכום של מספר לא מוגדר של פרמטרים תכתב כך:

local function sum(...)
    local result = 0
    for _, value in ipairs{...} do
        result = result + value
    end
    return result
end
print(sum(1, 2, 3)) -- 6

הערות

הערה בת שורה אחת מתחילה בזוג מקפים. הערה בת שורות אחדות מתחילה בזוג מקפים ואחריהם זוג סוגריים מרובעים, ומסתיימת בזוג סוגריים מרובעים (כך נכתבת הערה גם ב־SQL). לואה מאפשרת גם קינון הערות מרובות שורות בעזרת הכלת התו = באופן מאוזן בין הסוגריים המרובעים בכל אגף.

-- A comment in Lua starts with a double-hyphen and runs until the end of the line.
--[[ Multi-line strings & comments
     are adorned with double square brackets.]]
--[=[ Level 1 comment
    --[==[ Level 2 comment
        --[===[ Level 3 comment
            ...
        --]===]
    --]==]
--]=]

בקרת זרימה

תחום הכרזה

בלואה ניתן ליצור תחום הכרזה חדש עבור משתנים מקומיים באמצעות do כך:[א 11]

do
    local print = nil
    -- print("Hello world!") --> Error
end
print("Hello world!") --> Hello world!

לולאות

לולאות for נומרית כמו בדוגמה למטה תבצע מחזור מ־1 עד 10 עבור האינדקס i ותוסיף לו 2 בכל מחזור.[א 6]

for i = 1, 10, 2 do
    print(i) -- 1 3 5 7 9
end

לולאת for על טבלה לפי מפתח בסדר אקראי:[א 9]

local weekdays = {
    ["Sunday"] = 1,
    ["Monday"] = 2,
    ["Tuesday"] = 3,
    ["Wednesday"] = 4,
    ["Thursday"] = 5,
    ["Friday"] = 6,
    ["Saturday"] = 7,
}
for key, value in pairs(weekdays) do
    print(key, value)
end

לולאת for על טבלה לפי אינדקס בסדר קבוע:[א 9]

local weekdays = {
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}
for index, value in ipairs(weekdays) do
    print(index, value)
end

לולאת while בודקת את התנאי בתחילת כל מחזור:[א 6]

local i = 1
while weekdays[i] do
    print(weekdays[i])
    i = i + 1
end

לעומת זאת, לולאת repeat בודקת את התנאי בסוף כל מחזור; לפיכך, בלולאה מסוג זה המחזור הראשון מתקיים תמיד.[א 6] בניגוד לשפות רבות, משתנים מקומיים שנוצרו בתוך הלולאה הם עדיין זמינים גם בתנאי למחזור אחרי המילה repeat.[א 6]

local i = 1
repeat
    print(weekdays[i])
    i = i + 1
until not weekdays[i]

כמו בהרבה שפות אחרות, בלואה ניתן לבצע עצירה ויציאה ידנית מכל לולאה באמצעות הפקודה break.[א 6]

פעולות

סימני פעולות בלואה[14]
סיווג אופרנדים פעולה סימן
בינארי הקצאה קליטת ערך למשתנה =
יוחסה מספרים שווה ל־ ==
לא שווה ל־ ~=
גדול מ־ >
קטן מ־ <
גדול או שווה ל־ >=
קטן או שווה ל־ <=
לוגיקה אמת או שקר וגם and
או or
חשבון מספרים חיבור +
חיסור -
כפל *
חילוק /
חילוק ללא שארית //
מודולו %
העלאה בחזקה ^
סיביות[א] וגם &
או |
או מוציא ~
הזזה ימינה <<
הזזה שמאלה >>
אונארי לא ~
לוגיקה אמת או שקר לא ~ או not
חשבון מספר סימן שלילי -
  1. ^ פעולות אלו נוספו בגרסה 5.3

מחרוזות

השפה מצוידת בספרייה לחיפוש, החלפה, והתאמת דפוסים במחרוזות באמצעות ביטויים דומים לביטויים רגולריים.[א 8]

אסימונים בביטויי מחרוזות בלואה[א 8]
. כל תו
%a אותיות %A לא אותיות
%c תווי בקרה %C לא תווי בקרה
%d מספרים %D לא מספרים
%g תווים נראים לא כולל רווחים. %G תווים בלתי נראים כולל רווחים
%l אותיות קטנות %L לא אותיות קטנות
%p סימני פיסוק %P לא סימני פיסוק
%s תווי ריווח %S לא תווי ריווח
%u אותיות רישיות (אותיות גדולות) %U לא אותיות רישיות (אותיות גדולות)
%w אותיות ומספרים %W לא אותיות ולא מספרים
%x תווים של מספרים הקסדצימליים %X לא תווים של מספרים הקסדצמיליים
+ לפחות פעם אחת או יותר
* לפחות אפס פעמים או יותר (הרצף הארוך ביותר)
- לפחות אפס פעמים או יותר (הרצף הקצר ביותר)
? אפס פעמים או הופעה אחת לכל היותר
(...) לכידת תווים להחזרה. ניתן ללכוד כמה רצפים, הם מוחזרים בסדר הופעתם. בלכידה ריקה (), לואה מחזירה את המיקום שלה במחרוזת.
[^...] מבחר אפשריות של תווים, בזמן שהסימן ^ בתחילת הרשימה הופך את כל האפשרויות לשלילה (כלומר, אף אחד מהתווים ברשימה).
% סימון תווים מיוחדים או שימוש בתווי דקדוק כתווים רגילים; לדוגמה, %% יחשב כהופעה רגילה של התו % במחרוזת.
$ סוף מחרוזת
^ תחילת מחרוזת

דוגמה ללכידת שנה, חודש, ויום מתאריך תפוגה במחרוזת באמצעות הפונקציה string.match:

local text = "EXP:2010-01-01"
local year, month, day = string.match(text, "(%d+)%-(%d%d)%-(%d%d)")

שימושים

לואה זכתה לשימוש נרחב בין היתר במשחקי מחשב, רובוטיקה, עיבוד תמונה, עורכי טקסט, אוטומציה, ביואינפורמטיקה, ובמערכות משובצות מחשב.[1] למרות יעודה כשפה מוטמעת, ללואה קיימת קהילה עצמאית, מנהל חבילות, וספריות המאפשרים בה פיתוח נוח ורב תחומי ללא תלות ב־C או בשפות אחרות. מבין השימושים המפורסמים בלואה ניתן למנות את התבניות במיזם ויקיפדיה.[8]

מנהל חבילות

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

מימושים

מהיותה שפה חופשית שנועדה להטמעה, ללואה קיימים מימושים רבים שפותחו למגוון מטרות על ידי מפתחים וצוותים עצמאים, ואין בניהם בהכרח תאימות. כמו כן, גם המפרש הסטנדרטי של האוניברסיטה הקתולית עבר שינויים ללא תאימות לאחור לאורך הפיתוח של השפה.[3]

PUC Rio Lua

PUC Rio Lua הוא המימוש המרכזי והנפוץ ביותר של לואה, נהוג לכנות אותו גם PUC Lua. המימוש מפותח באוניברסיטה הקתולית (PUC Rio) שבריו דה ז'ניירו משנת 1993 ומופץ תחת רישיון MIT.[15] המפרש כתוב בשפת C והוא מתאפיין בצריכה חסכונית של זיכרון וכוח עיבוד למרות ביצועיו המהירים ביחס לשפות מפורשות אחרות. PUC Lua ממיר קוד מקור של Lua ל־bytecode לפני שלב הריצה לאחר שהקוד עובר בדיקות ראשוניות כגון חוקיות התחביר.[א 15]

LuaJIT

LuaJIT הוא מימוש המכוון לביצועים גבוהים מאוד עם לואה בעזרת הידור תוך כדי זמן ריצה (Just In Time compilation). חלקים מהמפרש כתובים בשפת סף. למימוש קיים ממשק FFI שמאפשר תיווך בין לואה ושפת C מבלי לגרוע בביצועים של המפרש ובלי צורך להיעזר ב־Lua C API כפי שדרוש במימוש הסטנדרטי של PUC Lua. בנוסף למהדר, גם המפרש של LuaJIT הוא מהיר בכפולות מהמפרש הסטנדרטי של PUC Lua, אפילו אם המהדר אינו מופעל כלל.[16] הביצועים של LuaJIT מהירים עשרות מונים משל PUC Lua 5.1.[16] עובדה זו הפכה את המימוש לאטרקטיבי בתעשייה.[17]

eLua

eLua (קיצור של Embedded Lua) היא מימוש מלא של השפה המיועד למערכות משובצות מחשב ומציע אופטימיזציות והרחבות חדשות לשפה שהן רלוונטיות לחומרה האופיינית למערכות משובצות. התכונות המרכזיות:[18]

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

ראו גם

  • מודולה־2 – שפת תכנות מערכות שנתנה את ההשראה לתחביר של לואה.
  • Scheme – ניב של שפת התכנות Lisp שנתן השראה סמנטית לשפת התכנות לואה.

לקריאה נוספת

  • Roberto Ierusalimschy, Programming in Lua, 4th Edition, Lua.org, 2016, ISBN 8590379868. (באנגלית)
  • Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, The Evolution of Lua, Proceedings of the third ACM SIGPLAN conference on History of programming languages, HOPL III, Association for Computing Machinery, 2007-06-09, עמ' 2–1–2–26 doi: 10.1145/1238844.1238846

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

ויקישיתוף מדיה וקבצים בנושא לואה בוויקישיתוף

הערות שוליים

מדריך השפה מהדורה רביעית

  1. ^ 1 2 3 4 5 Programming in Lua, About the Book, pp. xiii–xviii
  2. ^ Programming in Lua, Bits and Bytes, pp. 115–123
  3. ^ 1 2 3 4 5 6 7 Programming in Lua, Strings, pp. 29–38
  4. ^ Programming in Lua, Data Files and Serialization, pp. 137–146
  5. ^ 1 2 3 4 5 6 7 8 9 Programming in Lua, Getting Started, pp. 3–12
  6. ^ 1 2 3 4 5 6 7 8 Programming in Lua, Filling Some Gaps, pp. 67–76
  7. ^ Programming in Lua, Numbers, pp. 17–27
  8. ^ 1 2 3 Programming in Lua, Pattern Matching, pp. 89–104
  9. ^ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Programming in Lua, Tables, pp. 39–48
  10. ^ 1 2 3 Programming in Lua, Data Structures, pp. 125–136
  11. ^ 1 2 3 4 5 Programming in Lua, Closures, pp. 79–88
  12. ^ 1 2 3 4 5 6 7 8 9 10 11 12 Programming in Lua, Functions, pp. 49–58
  13. ^ 1 2 3 Programming in Lua, The External World, pp. 59–66
  14. ^ Programming in Lua, Date and Time, pp. 109–114
  15. ^ 1 2 3 4 5 6 7 Programming in Lua, Compilation, Execution, and Errors, pp. 147–157
  16. ^ 1 2 Programming in Lua, Modules and Packages, pp. 159–168

מקורות נוספים

  1. ^ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, The Evolution of Lua, Proceedings of the third ACM SIGPLAN conference on History of programming languages, HOPL III, Association for Computing Machinery, 2007-06-09, עמ' 2–1–2–26 doi: 10.1145/1238844.1238846
  2. ^ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 News, www.lua.org
  3. ^ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Version history, www.lua.org
  4. ^ 1 2 Luiz Henrique de Figueiredo, Roberto Ierusalimschy, Waldemar Celes Filho, The design and implementation of a language for extending applications, www.lua.org
  5. ^ Luiz Henrique de Figueiredo, Roberto Ierusalimschy, Waldemar Celes Filho, Lua: An extensible extension language, www.lua.org
  6. ^ Logos, www.lua.org
  7. ^ Download, luajit.org
  8. ^ 1 2 Jarry1250, Why "Lua" is on everybody's lips, and when to expect MediaWiki 1.19, Wikipedia Signpost, 2015-04-07
  9. ^ Lua 5.3 Reference Manual: Lexical Conventions, www.lua.org
  10. ^ Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, Lexical Conventions, Reference Manual of the Programming Language Lua, Lua.org, 1994
  11. ^ Lua: 4.0 Reference Manual: Lexical Conventions, www.lua.org
  12. ^ Lua 5.0 Reference Manual: Lexical Conventions, www.lua.org
  13. ^ Lua 5.2 Reference Manual: Lexical Conventions, www.lua.org
  14. ^ Lua 5.3 Reference Manual: Expressions, www.lua.org (באנגלית)
  15. ^ License, www.lua.org
  16. ^ 1 2 Performance: x86/x64, luajit.org
  17. ^ LuaJIT Sponsorship Program, luajit.org
  18. ^ Overview, www.eluaproject.net

Read other articles:

American drama TV series (2015) Not to be confused with the Hideyuki Kikuchi horror novel Wicked City, which inspired the anime film of the same name. Wicked CityGenre Procedural drama Erotic thriller Created bySteven BaigelmanStarring Jeremy Sisto Taissa Farmiga Gabriel Luna Jaime Ray Newman Evan Ross Ed Westwick Anne Winters Karolina Wydra Erika Christensen ComposerBrian Transeau (BT)Country of originUnited StatesOriginal languageEnglishNo. of seasons1No. of episodes8ProductionExecutive pro...

 

Sebuah dabba, atau rantang khas India Rantang atau panci susun (dabbas : India) adalah sejenis kotak bekal yang digunakan secara luas di Asia dan Karibia untuk makan berat. Dari India mereka menyebar ke Indonesia, Malaysia, Singapura, Guyana, Suriname dan Trinidad dan Tobago,[1][2] di mana mereka sekarang banyak digunakan. Mereka juga digunakan secara luas di Hungaria, terutama untuk mengangkut makanan restoran untuk dikonsumsi di rumah. Versi Hungaria biasanya berisi sup...

 

Al-Habib Muhammad Quraish ShihabPotret Quraish Shihab sebagai Menteri Agama Indonesia Menteri Agama Indonesia ke-16Masa jabatan14 Maret 1998 – 21 Mei 1998PresidenSoeharto PendahuluTarmizi TaherPenggantiAbdul Malik FadjarRektor UIN Syarif Hidayatullah Jakarta ke-8Masa jabatan1992–1998 PendahuluAhmad SyadaliPenggantiAhmad Sukardja Informasi pribadiLahir16 Februari 1944 (umur 80)Sidenreng Rappang, Celebes, Hindia Belanda masa pendudukan JepangSuami/istriFatmawati Assega...

Marine special operations group of the Lebanese Army This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Marine Commandos – news · newspapers · books · scholar · JSTOR (January 2013) (Learn how and when to remove this template message) Lebanese Marine Commandosمغاوير البحرMaghāwīr al BaħrLebanese ...

 

Hugo Enomiya-Lassalle Hugo Enomiya-Lassalle adalah seorang imam Yesuit berdarah Jerman yang mengabdi di Jepang dan salah satu penyintas pengeboman Hiroshima.[1] Usai pengeboman tersebut, ia mengalami luka yang cukup serius namun selamat. Setelah berbaring di rumah sakit selama beberapa waktu, ia kembali pulih dan tetap melanjutkan panggilannya selaku imam Yesuit. Ia merupakan salah satu imam yang berkontribusi besar dalam pembangunan Gereja Katedral Maria Diangkat ke Sorga Hiroshima y...

 

Perguruan Athena, fresko karya pelukis Raffaello Sanzio di Vatikan, 1509-1510. Perguruan Athena (Italia: Scuola di Atenecode: it is deprecated ) adalah sebuah fresko karya Raffaello Sanzio yang menggambarkan para filsuf Abad Renaisans yang berdiri di dekat para ilmuwan Romawi dan Yunani Kuno. Pengantar Karya ini dilukis sekitar tahun 1510 oleh Raphael Sanzio di Vatikan di tembok barat Stanza Signatura, sebuah ruangan Kapel Sistina yang lebih dikenal. dan berukuran 500 cm × 770 cm L...

Schema di ciclo vitale diplonte. Il ciclo vitale diplonte (o a meiosi gametica) è un ciclo biologico in cui gli individui di una specie sono rappresentati esclusivamente da organismi con cariotipo diploide. È tipico di tutti gli animali, ma si riscontra anche in alcune alghe ed in alcuni lieviti come Saccharomyces ludwigii. Lo zigote, originato dall'unione di due cellule riproduttive aploidi, i gameti, rappresenta la cellula iniziale della fase diploide, che, negli animali, si moltiplica pe...

 

City in Arkansas, United StatesTaylor, ArkansasCityLocation of Taylor in Columbia County, Arkansas.Coordinates: 33°6′7″N 93°27′39″W / 33.10194°N 93.46083°W / 33.10194; -93.46083CountryUnited StatesStateArkansasCountyColumbiaArea[1] • Total0.99 sq mi (2.57 km2) • Land0.99 sq mi (2.57 km2) • Water0.00 sq mi (0.00 km2)Elevation240 ft (73 m)Population (2020)...

 

Suqian 宿迁市SutsienKota setingkat prefekturPanorama malam hari Bundaran Maharaja, SuqianKota Suqian (warna merah) di JiangsuNegaraTiongkokProvinsiJiangsuPemerintahan • Wali kotaWang Tianqi (王天琦)Populasi (Sensus 2011) • Kota setingkat prefektur4.730.000 • Metropolitan735.000Zona waktuUTC+8 (Waktu Standar Tiongkok)Kode pos223800(Urban )223600, 223700, 223900(area lainnya)Kode area telepon527Kode ISO 3166CN-JS-13PDB¥193,6 miliar (2011)PDB per k...

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Bulan dan mek – news · newspapers · books · scholar · JSTOR (November 2021) (Learn how and when to remove t...

 

American astronaut and lunar explorer (1932–2018) This article is about the astronaut. For other uses, see Alan Bean (disambiguation). Alan BeanBornAlan LaVern Bean(1932-03-15)March 15, 1932Wheeler, Texas, U.S.DiedMay 26, 2018(2018-05-26) (aged 86)Houston, Texas, U.S.Resting placeArlington National CemeteryEducationUniversity of Texas, Austin (BS)AwardsNASA Distinguished Service MedalSpace careerNASA astronautRankCaptain, USNTime in space69d 15h 45mSelectionNASA Group 3 (1963)Total EV...

 

Govind NihalaniNihalani pada 2006Lahir19 Desember 1940 (umur 83)Karachi, India BritaniaTahun aktif1962 – sekarang Govind Nihalani (lahir 19 Desember 1940) adalah seorang sutradara, sinematografer, penulis naskah dan produser asal India, yang dikenal atas karya-karyanya dalam sinema Hindi. Ia merupakan penerima enam Penghargaan Film Nasional (India), dan lima Penghargaan Filmfare Bollywood.[1][2] Referensi ^ Untitled Page. Diarsipkan dari versi asli tanggal 14 June...

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: コルク – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年4月) コルクを打ち抜いて作った瓶の栓 コルク(木栓、�...

 

Mississippi affiliate of the Republican Party This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Mississippi Republican Party – news · newspapers · books · scholar · JSTOR (June 2009) (Learn how and when to remove this message) Mississippi Republican Party ChairpersonFrank Bordeaux[1]House leaderJason W...

 

United States historic placeCascade Locks Marine ParkU.S. National Register of Historic Places Remnants of the locks as of 2011Show map of OregonShow map of the United StatesLocationOn the Columbia River, Cascade Locks, OregonArea64.5 acres (26.1 ha)Built1896 (1896)NRHP reference No.74001686[1]Added to NRHPMay 15, 1974 Dalles City and Regulator in Cascade Locks The Cascade Locks and Canal was a navigation project on the Columbia River between the U.S. states of Ore...

American businessman Peter B. LewisBornPeter Benjamin Lewis(1933-11-11)November 11, 1933Cleveland, Ohio, U.S.DiedNovember 23, 2013(2013-11-23) (aged 80)Coconut Grove, Florida, U.S.NationalityAmericanAlma materPrinceton University (A.B.)OccupationBusinessmanKnown forCEO of Progressive Insurance CompanySpouse(s)Toby Devan (1955-1981; divorced) Janet Rosel (2013)Childrenwith Devan: --Ivy Lewis --Jonathan Lewis --Adam Joseph LewisParent(s)Joseph Lewis Helen Lewis Peter Benjamin Lew...

 

American men's apparel company It has been suggested that MW Tux be merged into this article. (Discuss) Proposed since December 2023. K&G redirects here. For the publisher, see Kaufman and Greenberg. Tailored Brands, Inc.Company typePrivateIndustryRetailFounded1973 (as Men's Wearhouse)FounderGeorge ZimmerHeadquartersHouston, Texas, U.S.Number of locations1,450 (Feb. 2020) [1]Area servedUnited States CanadaKey peopleBob Hull and Peter Sachse (interim co-CEOs)[2]ProductsMen'...

 

此生者传记没有列出任何参考或来源。 (2022年12月19日)请协助補充可靠来源,针对在世人物的无法查证的内容将被立即移除。 崔允素최윤소女演员罗马拼音Choi Youn-So国籍 韩国出生 (1984-11-29) 1984年11月29日(39歲) 韩国全羅北道全州市职业演員语言韓語教育程度同德女子大學放送演藝系出道日期2003年出道作品電影《色即是空2笑女藏刀(朝鲜语:은장도 (영화))》活跃年...

七夕賞 第51回七夕賞(2015年7月12日)優勝馬:グランデッツァ開催国 日本主催者 日本中央競馬会競馬場 福島競馬場創設 1965年8月15日2024年の情報距離 芝2000m格付け GIII賞金 1着賞金4300万円出走条件 サラ系3歳以上(国際)(特指)負担重量 ハンデキャップ出典 [1][2]テンプレートを表示 七夕賞(たなばたしょう)は、日本中央競馬会(JRA)が福島競馬場で施行�...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أغسطس 2021) ما زال مصدر الميثان على المريخ غير معلوم، ويظهر رصده في هذه الصورة. عتبر وجود الميثان في الغلاف الجوي للمريخ محل اهتمام للعديد من الجيولوجيين وعلماء الأحياء ...