FPC 2.6.0 שוחררה

גרסה 2.6.0 של FPC שוחררה לשנה החדשה. הגרסה מכילה הרבה תוספות ושינויים וכמו שכתבתי בעבר, הגרסה הכי מעניינת של FPC בשנים האחרונות שצריכה לצאת היא גרסת 2.6.0.

תוספות

רשימת התוספות:

  • טיפוסים מקוננים בתוך מחלקה, כולל מחלקה מקוננת (מחלקה הגלויה רק למחלקה בה היא מוגדרת).
  • רשומות (record) קיבלו הרחבות ומסוגלים להכיל רמות צפייה שונות (public, private), טיפוסים מקוננים, מתודות, תוכנות הגדרת מחלקות ועוד…
  • יצירת איטרטורים למנייה ברשומות (חלק מהשיפורים מהנקודה הקודמת), וזה בנוסף למנייה במחלקות שכבר נוספה בגרסה 2.4x.
  • יצירת הרחבה למחלקות (class helper)
  • תמיכה ביכולת להוסיף generics גם לרשומות וטיפוסי פרמטרים בפרוצדורות ופונקציות
  • אפשרות להגדיר באמצעות {$SCOPEDENUMS ON/OFF} האם איזור מסויים של enum יהיה נגיש רק באמצעות הnamespace שלו או יתנהג כמו constant.
  • יכולת להוסיף מחרוזת מותאמת אישית להגדרת deprecated כדוגמת:
unit OldUnit deprecated 'Use NewUnit instead';

interface

implementation

procedure OldRoutine; deprecated 'Use NewRoutine instead';
  begin
  end;

end.
  • דיאלקט חדש הנקרא Objective-Pascal אשר נכון לגרסה הזו עובד רק בסביבות אפל מבוססות Darwin (כולל iOS), אך לא ב GNUStep. הדיאלקט מאפשר לעבוד בABI  תואם ומלא מול Objective-C ובכך לתקשר בצורה ישירה עם ספריות הכתובות בשפה הזו.
  • נוסף parameter modifier חדש בשם constref אשר מצטרף להגדרות של const, var ו out. הmodifier זהה להגדרת c של const * int param ובעצם נועד להגיד כי הפרמטר קבוע, אבל עובר המיקום שלו בלבד (reference) ולא התוכן. הוא נועד רק לשימוש עבור ביצוע binding עם קוד חיצוני.
procedure test(constref l: longint);
begin
  writeln('This parameter has been passed by reference, although the Pascal code does not really care about that: ',l);
end;

begin
  test(5);
end.
  • נוספה תמיכה ב"מצב" שפה של ISO 7185, על ידי העברת פרמטר -Miso ובהגדרה של {$mode iso}. המהדר עדיין לא תומך ברוב היכולות של המצב.
  • נוספה תמיכה להגדרת פרמטר כפרוצדורה. דוגמה אחת, ודוגמה שנייה לשימוש בתחביר. ניתן להפעיל את התחביר באמצעות {$modeswitch nestedprocvars} או על ידי שימוש במצב iso או במצב macpas. לפני השימוש בתחביר, היה צריך להשתמש במצביע במקום, על מנת להשיג את אותה הפעולה.
  • נוספה אפשרות לקפוץ (goto) לlabel אשר מוגדר בפונקציה אחרת, על מנת לצאת מקינון עמוק בצורה מהירה. ניתן להפעלה באמצעות {$modeswitch nonlocalgoto} או כאשר משתמשים במצב iso ו macpas.
  • נוספה אפשרות לבצע escaping למילים שמורות ולהשתמש בהם כ"מזהים" (identifier) רגילים באמצעות הסימן "&" לפני המילה.
  • המהדר תומך בהגדרת מצביע אוניברסלי (univ) במצב macpas  המצביע מאפשר להשתמש במשתנה עם כל סוג תוכן, כל עוד הוא זהה לגודל שמוגדר לטיפוס עצמו.
  • נוספה תמיכה לטיפוס CExtended על מנת לקבל אורך קבוע של long double של מהדרי C. ההגדרה נועדה עבור שימוש בקוד חיצוני בעיקר, והוא בעצם כינוי ל Double.
  • נוספה תמיכה ל SAR שהוא Shift Arithmetic Right. ההגדרה מתנהגת כפונקציה ולא כאופרטור. ויש מספר פונקציות, אשר מתאימות לגדלים שונים של מספרים שלמים.
  • נוספה תמיכה ל ROL ו ROR אשר מבצעים Rotate Overflow Left ו Rotate Overflow Right. ההגדרה מתנהגת כפונקציה ולא כאופרטור. גם כאן יש פונקציה המתאימה לפי סוג המספר השלם.
  • נוספה תמיכה ב BSF (שהוא Bit Scan Forward) וב BSR (שהוא Bit Scan Reverse). התמיכה מתנהגת כפונקציה ולא כאופרטור, ומתאימה את עצמה לגדלים של מספרים שלמים.
  • נוספה תמיכה ב Boolean16, Boolean32 ו Boolean64. התמיכה מאפשרת לקבל ערכים בוליאניים לפי alignment של 2, 4 ו 8 ביתים. בניגוד ל WordBool, LongBool ו QWordBool אשר שם כל מספר שגדול מ0 הוא חיובי, ומספר שהוא 0 הוא שלילי, כאן 0 הוא שלילי, 1 הוא חיובי, וכל דבר אחר אינו מתאים לטיפוס.
  • נוספה תמיכה להוראות מתמטיות של Floating Point במעבדי ARM של VFPv2 ו VFPv3. הסבר קצר אודות התוספת.
  • נוספה תמיכה לקריאות Thumb-2 של ARMv7 במשפחת Cortex-M3. כרגע התמיכה אינה קיימת עבור מערכות הפעלה, אלא רק עבור קוד משובץ ללא מערכת הפעלה.
  • המהדר תומך בהוספת ABI עבור הסימולטור של iOS, אשר שונה מהABI הרגיל. יש להשתמש בtarget של iPhoneSim עבור קבלת התמיכה בABI עם Xcode.

שינויים

רשימה חלקית של שינויים ב FPC 2.6.0

שינויי שימוש:

  • ניתן להשתמש במילה השמורה static ללא הוראת מהדר מפורשת אשר תאפשר זאת.
  • POINTERARITHMETICS הוחלף בPOINTERMATH. מאפשר לפעולות מתמטיות על מצביעים בתחביר FPC ו ObjFPC אבל אינו פעיל בתחביר Delphi
  • המהדר כבר אינו מחפש בברירת מחדל כלים שונים (כדוגמת מקשר) בספרייה הנוכחית. בשביל להחזיר את האפשרות, יש להעביר בשורת הפקודה את הפרמטר ‎‎-FD עם נקודה לאחר מכן.

שינויי שפה:

  • אם פרמטר מוגדר עם var, out או const עם טפוס מסויים לא ניתן להעביר לו טיפוס מסוג אחר:
{$mode objfpc}

type
  ta = class
  end;

  tb = class(ta)
    procedure dosomething;
  end;

procedure dosomething;
begin
  // ...
end;

var
  b: tb;

procedure test(var a: ta);
begin
  a:=ta.create;
  // now b contains an instance of type "ta"
end;

begin
  b:=nil;
  test(b);
  // the following call can lead to access violations
  // or other hard to debug errors
  b.dosomething;
end.
  • לא ניתן להגדיר יותר פונקציה/פרוצדורה או מתודה עם array of const בייחד עם cdecl אם היא לא בשימוש של external.
  • מחרוזת קבועה באורך גדול יותר מ255 כבר לא תחתך בעת ההידור במידה ויש שימוש ב {+H$}
  • shortstring ו ansistring כקבועים אינם יכולים יותר להכיל תווי unicode ותווי widechar.
{$codepage utf8}

{ this example assumes that the source file has been saved using utf-8 encoding }

const
  s1: shortstring = 'éà';
  s2: ansistring = #$094#$06D;
  s3: ansistring = #267#543;
begin
end.

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

  • דיאלרט macpas אינו תומך יותר במשתנה result כערך החזרה של הפונקציה. זה מתקן בעיה של החבאת המשתנה. היות ובמהדרי פסקל של מאק, אין לו תמיכה. ניתן להוסיף את ההוראה {$modeswitch result} לאחר הגדרת הדיאלקט בשביל להחזיר את התמיכה
  • הפונקציה addr עכשיו תמיד בעלת טיפוס של pointer כללי ללא קשר לשימוש ב {+t$} או {-t$}
  • תוקן באג שאפשר לראות סמלים נסתרים במחלקות יורשות.
  • הוסר מימוש שעשה בטעות לתמול בתחביר של if a_var=1..5; זה אינו תחביר חוקי בפסקל ולכן הוסר.
  • בדיאלקט דלפי לא ניתן יותר להשתמש במילה השמורה helper לצד הגדרת מחלקה או רשומה. יש להקפיד כי המילה מופרדת במפורש מהגדרות המחלקה או הרשומה על מנת להבטיח יכולת להשתמש במילה כשדה.

את רשימת השינויים המלאה ניתן לקרוא בקישור הבא.

3 מחשבות על “FPC 2.6.0 שוחררה

  1. עידו ג

    מתודות ברשומות, אה? וכשאני שאלתי למה אין את הדבר השימושי הזה ב-FPC, אמרו לי שזו כפילות מיותרת של פונקציונליות קיימת… 😉

    יופי, טוב שהעניינים מתקדמים. אינשאללה בקרוב יהיה גם לזרוס 1.0!

    1. ik_5 מאת

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

      ולזרוס 1.0 כולנו מחכים, אבל אני מחכה לגרסאות הבאות. בנתיים לזרוס מתקדם ממש יפה בגרסאות פיתוח שלו, אבל חלק ישוחרר רק אחרי גרסה 1 😦

  2. פינגבק: Free Pascal 2.2.4 | Daily Freeware Download

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s