תגית: delphi

קוד זה ישמיד את עצמו בעוד …

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

מרבית שפות התכנות, ירימו על כך חריגה כלשהי, היות ואין תמיכה לכך בתחביר עצמו. אלו שאינן תומכות בחריגות יציגו הערה כלשהי למשהו בסגנון stderr. אבל בשפת פסקל, יש לכך תמיכה בתחביר עצמו. התמיכה נוספה ל FPC 2.6.0 ודלפי 2009.

התחביר נראה כך:

unit oldunit deprecated 'Please use NewUnit';

interface
...
implementation
...
end.

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

...
procedure OldProc; deprecated 'Please use NewProc instead';
...

נגיד ונרצה לעשות זאת למחלקה:

...
type
  TOldClass = class
  end deprecated 'Use NewClass';
...

וכן הלאה …
עכשיו בואו נראה מה קורה בפועל. נגיד ויש לנו קוד כזה:

{$mode objfpc}
program test;

type
  TOldClass = class
  end deprecated 'Use NewClass';

var
  A : TOldClass;
begin
  a := TOldClass.create;
  a.free;
end.

צעקת המהדר תהיה:

test.pas(9,16) Warning: Symbol "TOldClass" is deprecated: "Use NewClass"
test.pas(11,17) Warning: Symbol "TOldClass" is deprecated: "Use NewClass

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

הרצת מתודות בצורה דינאמית חלק ראשון

לאחרונה יצא לי לשנות גישה במספר מערכות שאני בונה, ובהם בrpc לאפשר להריץ מתודות פיזיות שיש ברשותי (לאחר שזה עבר כמובן אישור של white list כלשהו).

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

אתחיל בשפת פסקל מונחת עצמים. להמשיך לקרוא

WAT I have learned about …

בשבוע האחרון יצא לי לעשות הרבה דברים שונים.

למשל לכתוב קצת קוד פיתון, ולגלות כי Tuple זו הגדרה מוזרה במקצת:

a = (1)  # an Integer
a = (1,) # a Tuple
a = 1    # an integer
a = 1,   # a Tuple

על זה נאמר WAT ?

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

case a
 when 1 : something # 1.9.3 raises syntax error
 when 1
          something # Both 1.8.7 and 1.9.3 accept it
end

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