עוד חוזר הדיון, שנזנח כך לשווא …

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

הוא התחיל בדוגמה בכך שבC אפשר לקבוע את רמת הביט של מספר, למשל:

typedef int7b int:7

ואם אתם אוהבי ממים, אז המשפט שהגיע מפי היה בסגנון "bitch please", או בגרסתו העברית – "כלבתא במטותא":

type
  int7b = 0..63;

רגע, אבל למה להתחיל מ0, למה שלא נתחיל מ5 במקום ?

type
  int7b = 5..68;

אתה יכול לעשות את זה ב C ? אה, לא, אוקי. ומה עם זה ?

type
  TMyRec = bitpacked record
    Value : int7b;
  end;

ולהבטיח כי הרשומה בהכרח תקבל דיחסה לפי ביטים ולא לפי גישה אחרת (יש מספר יכולות דיחסה בפסקל לרשומות) ?

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

איך אני אוהב אנשים כאלו שלא מבינים מה זה מאקרו ב C, אבל משתמשים בו כל כך הרבה שחושבים שזה פיטצ'ר ולא patch לפתור בעיות …

הנה מספר צורות בהם מה שאתה חייב מאקרו ב C, אבל אין לכך צורך בפסקל:

...
function MyFunc(const A) : String;
...
function MySecondFunc(b : integer) : integer; inline;
...

const
  A = (1 shl 12) not 8;
  B = 22;

אבל זה ממש לא הכל בנושא. אבל למה להסתפק במה שהוא מדבר עליו ?
הנה מספר דברים שאתה מקבל כסוג של hack בC למשהו שהוא לא ממש קיים באמת בשפה:

type
  TMyEnum = (num0, num1, num10 := 50);
...
var i : TMyEnum;
for i := Low(TMyEnum) to High(TMyEnum) do
  ...

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

type
TMyDynamicArray : array of integer;

procedure MyProc(var Arr : TMyDynamicArray);
var i : integer;
begin
  for i := Low(Arr) to High(Arr) do
...
end;

procedure MyOpenArrayProc(var Arr : Array of Integer);
var i : integer;
begin
  for i := Low(arr) to High(Arr) do
...
end;

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

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

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

אז תסבירו לי שוב, איך זה שC נחשבת לבעלת כוח ועצמה, ופסקל נחשבת לנחותה וחסרת יכולות ?

רשומה זו פורסמה בקטגוריה C, Object Pascal, טכנולוגיה, פיתוח, קוד פתוח, תוכנה, תכנות. אפשר להגיע ישירות לרשומה זו עם קישור ישיר.

תגובה אחת על עוד חוזר הדיון, שנזנח כך לשווא …

  1. queency הגיב:

    לא יודע כנראה מאותה סיבה שלפייתון אחלה שפה ו מה אתה משתמש ? גאווה ? אה לא פרל !!
    דרך אגב פרל מאד דומה לC לא ? סתאם צוחק אתך queency

כתיבת תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

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

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

מתחבר ל-%s