להבהיר את הטכנולוגיה

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

למשל גם דיאגו וגם אילן שביט היו בטוחים שבשביל להפיץ תוכנה שכתובה בFPC, צריך עוד ספריות והתקנות מעבר לספריות הרגילות שמתמשים בהן (GTK, QT, libc וכו'). ובכן פרט לQT שמכילה wrapper הכתוב בC (כי כרגע FPC לא יודע לעבוד עם מחלקות של ++C המהודרות למידע בינארי -> ד"א הבעיה גם הפוכה, ++C לא יודעת לעבוד עם מחלקות שמהודרות בפסקל/FPC), ומשם בעצם אנחנו משתמשים ב QT ומרכיבים את המחלקה מחדש רק בפסקל.
כך שאם אנחנו מהדרים קוד לטרמינל שמשתמש רק ב libc, אין צורך פרט לקובץ ריצה שום דבר אחר להתקין בנוסף מול התלויות הרגילות שלא קשורות לשפת פסקל.

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

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

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

4 מחשבות על “להבהיר את הטכנולוגיה

  1. elcuco

    בדיוק חשבתי על זה בדרך הביתה, והפוסט שלך מעלה שאלות חדשות.

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

    … ומה עם ה־pascal runtime…? הוא מקומפל סטאטית אל היישום? (איפה הפרוצדורה WriteLn? איפה כל הפונקציות שמתעסקות ב־Pascal Strings?).

    ועכשיו אתה מעלה שאלות חדשות:
    אם אני כותב יישום גרפי בלאזרוס. האם הקישור של הממשק הגרפי יעשה בזמן ריצה ויבדוק האם זמין gtk2 או qt4? או שזה מקובע בזמן קימפול?

    בנוסף כעת אתה הסברת שיש צורך בספרייה מגשרת מול c++ כדי לגשת לספריות הללו. איך פורשים אותן אצל הלקוח?

    נ.ב.
    פעם ראשונה שאני שומע שיש בעייה לקשר מחלקות של Pascal ו־c++ (דרך אגב, איפה נמצא במקלדת LRM? אני צריך אותו בדיוק עכשיו!!). זה כשך רציני בהסברה שלך – אני בתור מישהו שצריך ללמוד על השפה הייתי צריך לדעת על המגבלה הזאת מראש. פויה!

  2. ik_5 מאת

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

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

    לגבי QT4 (ושאר התוכנות), הקישור לQT מכיל את הקובץ C שמהודר לספרייה משותפת, ושמים אותו ב /usr/lib או בהתאם להפצה שלך (אני לא יודע לגבי windows).

    הבעיה היא ++C ולא פסקל (ותעבוד עם פריסת Lyx או תגדיר עם modmap את המקשים :))

  3. elcuco

    אני עובד עם פריסת lyx אבל הבורות שלי לא עוזרת פה…

    יפה, אז הינה הבעייה! איך אתה בטוח שהספרייה המתאימה הועתקה למקום המתאים אצל הלקוח? איך אתה בטוח שהספרייה שלך מתחברת ל־abi המתאים? מילא להתממשק מול C שזה יציב כמו סלע, אבל ספריית המתאם הזאת לא ממש ברורה לי. איפה אני יכול לקורא עוד בנושא? (מתאם בין c++ ל־C זה רעיון מטורף… אני אתצרך את זה עבור D…).

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

  4. ik_5 מאת

    בצד שמאל כאן בבלוג יש אתר שנקרא FPC Qt4 Binding הוא מכיל את המידע הזה.

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

כתיבת תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

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

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

מתחבר ל-%s