לואה (שפת תכנות) – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מ שינוי התבנית לעבודה מתמשכת כדי לאפשר שינויים של ויקיפדים אחרים.
←‏מימושים עיקריים: הרחבה, עריכה
שורה 48:
* משתנים פשוטים, שיכולים להיות מספרים או מחרוזות.
* מערך אסוציאטיבי ([[מילון (מבנה נתונים)|מילון]]) שיכול לתפקד גם כרשימה, בעת הצורך.
* מבני נתונים מורכבים יותר מתוארים כקינון מערכים בתוך מערכים במידת הצורך.
 
<syntaxhighlight lang="lua">
שורה 210:
 
== מימושים עיקריים ==
מהיותה שפה זעירה ו[[קוד פתוח|חופשית]] שנועדה ל[[מערכת משובצת מחשב|שיבוץ]], ל־Lua קיימים כיום [[מימוש|מימושים]] רבים שפותחו במשך השנים למגוון מטרות שונות ע"י מפתחים וצוותים עצמאים.<ref name=":0">{{קישור כללי|כתובת=https://www.lua.org/about.html|הכותב=|כותרת=Lua is small|אתר=עמוד הבית של Lua|תאריך=|ציטוט=The source contains around 24000 lines of C. Under 64-bit Linux, the Lua interpreter built with all standard Lua libraries takes 247K and the Lua library takes 421K.}}</ref><ref>{{קישור כללי|כתובת=http://lua-users.org/wiki/LuaImplementations|כותרת=lua-users wiki: Lua Implementations|אתר=lua-users.org|תאריך_וידוא=2019-02-28}}</ref> בין המימושים קיימים הבדלים ואי־תאימויות לאור המגבלות שמולן הם נעמדו או עקב שינויים ללא תאימות לאחור שחלו במימוש ה[[קאנון ספרותי|קנוני]] של Lua מהאוניברסיטה הקתולית (PUC Rio).<ref name=":1">{{קישור כללי|כתובת=https://www.lua.org/versions.html|הכותב=|כותרת=Version history|אתר=עמוד הבית של Lua|תאריך=|ציטוט=Different versions are really different. The API is likely to be a little different (but with compatibility switches), and there is no ABI compatibility: applications that embed Lua and C libraries for Lua must be recompiled.}}</ref>
 
מצב זה העמיד אתגר ל[[קוד פתוח|קהילת החופשית]] של Lua ולמיזם מערכת ניהול החבילות שלה ([[#LuaRocks|LuaRocks]]) לנסות ליצור שיתוף פעולה ותיאום בין החבילות הזמינות שהציעו חברי הקהילה מול הגרסאות השונות של השפה שחלו במימושים המועדפים עליהם.<ref>{{קישור כללי|כתובת=https://realmensch.org/2016/05/28/goodbye-lua/|הכותב=Tim Mensch|כותרת=Fragmentation of Lua|אתר=RealMensch|תאריך=|תאריך_וידוא=2019-02-28|ציטוט=The major breaking changes in Lua in 5.3 seem to be fragmenting the already sparse Lua library ecosystem. Anyone who creates a library needs to now support LuaJIT (a 5.1/5.2 hybrid)}}</ref>
 
בסביבות [[2015]] הקהילה נקרעההתפצלה לשני מחנות מרכזיים והם Lua 5.3 ו־Lua 5.1 עקב ההתנגדות הנחרצת שהביע מייק פול - היוצר של LuaJIT - מליישם את השינויים החדשים של Lua 5.3 ב־LuaJIT לאחר שכבר הביע התנגדות קודמת לשינויים של Lua 5.2 למרות שיישם את חלקם.<ref>{{קישור כללי|כתובת=http://luajit.org/extensions.html|כותרת=Extensions|אתר=luajit.org|תאריך_וידוא=2019-02-28}}</ref><ref>{{קישור כללי|כתובת=https://news.ycombinator.com/item?id=12573981|כותרת=My love-hate relationship with LuaJIT (2015) {{!}} Hacker News|אתר=news.ycombinator.com|תאריך_וידוא=2019-02-28}}</ref><ref>{{קישור כללי|כתובת=https://realmensch.org/2016/05/28/goodbye-lua/|הכותב=|כותרת=Fragmentation of Lua|אתר=RealMensch|תאריך=|ציטוט=Lua dependency management is also very hit-or-miss. The "luarocks" package manager has about a 60% chance of working with any particular package on Windows, for instance. This has always been the case, but with the additional Lua version fragmentation, it's only making things worse.}}</ref>
 
אחריתנכון הדבר היא שכיוםל־2019 רוב החבילות ב־LuaRocks זמינות בשתיבגרסאות Lua 5.3 הגרסאותו־Lua האלה5.1 בעיקר כדי לשמור על תאימות לאחור עם LuaJIT, שהיאשהוא המימוש המועדף על חלק ניכר מהקהילה.
 
==== Lua (PUC Rio) ====
זהו המימוש המרכזי והנפוץ ביותר של Lua ונהוג לעתים לכנות אותו ''PUC Lua''. הוא מפותח ב[[האוניברסיטה הקתולית (ריו דה ז'ניירו)|אוניברסיטה הקתולית]] (PUC Rio) שב[[ריו דה ז'ניירו]] ב[[ברזיל]] מאז 1993 ומופץ תחת [[רישיון MIT]].<ref name=":1" /> PUC Lua הוא [[מפרש (תוכנה)|מפרש]] זעיר ו[[מערכת טיפוסים#טיפוסיות דינמית|דינמי]] הכתוב ב[[C (שפת תכנות)|שפת C]]<ref name=":0" />, ומצטיין בצריכה חסכונית של [[זיכרון גישה אקראית|זכרון]] וכוח [[מעבד|עיבוד]] למרות ביצועיו המעולים ביחס לשפות מפורשות אחרות.<ref>{{קישור כללי|כתובת=https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/lua-python3.html|כותרת=Lua vs Python 3 - Which programs are faster? {{!}} Computer Language Benchmarks Game|אתר=benchmarksgame-team.pages.debian.net|תאריך_וידוא=2019-02-28}}</ref>
{{להשלים}}
 
PUC Lua ממיר קוד מקור של Lua ל־[[bytecode]] הסטנדרטי של השפה תוך כדי שהקוד עובר בדיקות ראשוניות כגון חוקיות תחביר לפני הריצה שלו. ניתן לייצא את ה־bytecode שנוצר לתוך קבצים מתוך הקוד בעזרת ה[[שגרה (תכנות)|פונקציה]] <code>()string.dump</code> או מחוץ לקוד בעזרת הפקודה <code>luac</code> [[מדמה מסוף|במסוף]].<ref>{{קישור כללי|כתובת=https://www.lua.org/manual/5.2/luac.html|כותרת=luac man page|אתר=www.lua.org|תאריך_וידוא=2019-02-28}}</ref>
 
==== LuaJIT ====
LuaJIT הוא מימוש המכוון לביצועים גבוהים מאוד עם Lua בעזרת [[מהדר|הידור]] תוך כדי [[זמן ריצה (תוכנה)|זמן ריצה]] (''Just In Time compilation''), [[מפרש (תוכנה)|מפרש]] שחלקים ממנו כתובים ב[[שפת סף]], וממשק FFI (''Foreign Function Interface'') חדש לתיווך בין Lua ופונקציות ומבני נתונים הכתובים ב[[C (שפת תכנות)|שפת C]] בצורה טבעית מבלי לגרוע בביצועים של המפרש.
{{להשלים}}
 
בנוסף למהדר, גם המפרש של LuaJIT הוא מהיר בהרבה מהמפרש הסטנדרטי של PUC Lua אפילו אם המהדר אינו מופעל כלל. מייק פול פיתח את המפרש של LuaJIT באופן עצמאי מבלי לפצל את המפרש הסטנדרטי של PUC Lua.
 
LuaJIT מעודדת את המתכנת להיעזר ב[[שגרה (תכנות)|פונקציות]] ו[[ספרייה (תכנות)|ספריות]] הכתובות בשפת C במקום להיעזר בספריות [[צד שלישי]] הכתובת ב־Lua. ממשק ה־FFI של LuaJIT מאפשר גישה ושימוש טבעי עם ספריות, [[מבנה נתונים|מבני נתונים]] ופונקציות מספריות בשפת C בלי לגרוע בביצועים שלה וגם מבלי צורך להיעזר ב־Lua C API כפי שדרוש במימוש הסטנדרטי של PUC Lua.
 
הביצועים של LuaJIT לעתים קרובות מהירים משל PUC Lua 5.1 פי כמה עשרות פעמים.<ref>{{קישור כללי|כתובת=http://luajit.org/performance_x86.html|כותרת=Performance: x86/x64|אתר=luajit.org|תאריך_וידוא=2019-02-28}}</ref> מה שהפך את המימוש לאטרקטיבי עבור מפתחים שנשענים על [[גרפיקה ממוחשבת|ספריות גרפיות]], [[יישום רשת|יישומי רשת]], [[תוכנה כשירות|טכנולוגיות ענן]]<ref>{{קישור כללי|כתובת=https://blog.cloudflare.com/tag/lua/|כותרת=LUA|אתר=The Cloudflare Blog|שפה=en|תאריך_וידוא=2019-02-28}}</ref>, וחברות תקשורת גדולות.<ref>{{קישור כללי|כתובת=http://luajit.org/sponsors.html|כותרת=LuaJIT Sponsorship Program|אתר=luajit.org|תאריך_וידוא=2019-02-28}}</ref>
 
==== eLua ====
שורה 234 ⟵ 242:
* [http://www.lua.org/ דף הבית של Lua]
* [http://www.lua.org/manual/ התיעוד הרשמי]
* [http://lua-users.org/wiki/LuaImplementations רשימת המימושים הידועים של Lua]
* [http://luajit.org/ דף הבית של LuaJIT]
* [https://github.com/lua/lua קוד המקור הרשמי של Lua]
 
== הערות שוליים ==