כשחייבים להשתמש בשפת תכנות ספציפית

אני מנסה לבנות מודול עבור Asterisk, ומה לעשות, מארק מאוד אוהב את שפת C כמו שהוא אמר לנו לפני קצת יתר משנה, אז הוא כתב את המרכזייה בשפת C.

כרגע כמה אנשים אומרים "נו הוא עוד פעם מתחיל, מה הוא לא מבין שהעולם מדבר ב C ?"

אז הנה קוד שכתבתי בשביל לעשות כמה נסיונות עם inotify:

for (int i = 0; i < MAX_LIST; i++)

עכשיו אחרי שהקוד כתוב צריך להדר נכון ? אז קיבלתי הודעת שגיאה אחת בלבד:

error: ‘for’ loop initial declaration used outside C99 mode

אם יש לכם ניסיון עם ההודעת שגיאה הזו, אנא תתעלמו ממה שאתם יודעים, ונראה אותכם מפרשים את ההודעה הזו בלי שימוש בגוגל…

מה אין מושג ?! נו, תנסו … קחו קצת זמן …מה לא ?!

בטוחים ?! טוב נו…

ובכן ההודעה הזו אומרת שהמהדר יושב כרגע על תחביר שהוא לא C99, מה שאומר ש int i בתוך ה for לא יתמך (כי הוא נוסף ב C99).

הבעיה כאן היא שההודעה כל כך עוזרת להבין את הבעיה, שלוקח למי שאינו מכיר אותה, הרבה זמן להגיע למצב שהוא מגלה איך לפתור… ד"א בשביל לפתור את הבעיה, צריך להוסיף את הפרמטר

-std=C99

בשורת הפקודה/Makefiel…

אפשר לחשוב ששפה ומהדר כל כך נפוצים לפחות יהיו ידידותיים למשתמשים שלו…

11 מחשבות על “כשחייבים להשתמש בשפת תכנות ספציפית

  1. nadavvin נדב

    מה בדבר פתיחת פרוייקט לבינדינג לפסקל?

    ולהתחיל לפחות עם הAPI שאתה משתמש למודל…

    או שזה פרוייקט מורכב מאוד בעצמו…

    כמובן שזה יגביל את המודל לסביבות שאסטריקס ניתן לקימפול…

    נ.ב
    מה דעתך על התקנת תוסף אופן ID?

  2. ik_5

    קצת גדול עלי לעשות binding לפסקל לפרוייקט בסדר גודל של Asterisk ורמת השינויים העצומה שלו בין גרסה לגרסה… למרות שכמה וכמה מהאנשים שאני מכיר שמפתחים אפליקציות מעל אסטריסק בעולם, גם משתמש ב FPC, ואולי בסוף נראה מהם משהו…

    היות ומעולם לא פיתחתי לא ל inotify ולא מודולים בC, אני עושה נסיונות לפני שאני עושה את הדבר האמיתי, בשביל להבין מה אני עושה כמובן 🙂

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

  3. Nirro

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

  4. ik_5

    אני לא בטוח… אני אתן לך דוגמה דווקא מ FPC:
    "You need ObjFpc (-S2) or Delphi (-Sd) mode to compile this module"
    אתה יכול למצוא את כל ההודעות כאן

    וכמו שאתה רואה, למרות שדברים אמורים להיות ברורים, עדיין ההודעה עוזרת לך להבין מה לא עשית בסדר…

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

  5. ik_5

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

    בלי להתקל בבעיה של FPC למעלה, אני יכול לדעת בוודאות שמדובר בקוד שמדבר ב Object Oriented עם מחלקות (בניגוד לאובייקטים). והיות והקומפיילר גם נותן לא רק מספר שורה, אלא את המיקום הסופי של הבעיה, כלומר תו/עמודה 10 בשורה, אז מאוד קל להבין בייחד עם זה איפה הבעיה, הרבה יותר מGCC שנותן רק מספר שורה.

    שים לב שGCC לא אומרת כלום פרט למילה C99. עכשיו מה אתה צריך ללמוד מזה ?! שאתה או לא מכיר מספיק טוב C99, או שהבעיה היא קשורה למשהו שלא נתמך בC99 או כל בעיה אחרת שהכותרת C99 מתאימה לה.

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

  6. צפריר

    ובהמשך לאותו כיוון:
    מתוך שיחה ב־‎#asterisk-dev

    i'm doing it in such a way that extending it to (language of your choice) is really easy
    if you want perl, php, whatever, i could have that with the same capabilities by tomorrow
    assuming the language has a decent API for being embedded …

  7. ik_5

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

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

להשאיר תגובה

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

הלוגו של WordPress.com

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

תמונת גוגל

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

תמונת Twitter

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

תמונת Facebook

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

מתחבר ל-%s

This site uses Akismet to reduce spam. Learn how your comment data is processed.