ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › ראשי › עזבו אתכם פסקל….
- This topic has 23 תגובות, 7 משתתפים, and was last updated לפני 21 שנים, 10 חודשים by MoD.
-
מאתתגובות
-
30 בדצמבר 2002 בשעה 18:48 #77383arkonמשתתף
עם כל הכבוד, אז פסקל היא שפה נחמדה ונוחה.
אבל אחרי שאתה יודע C אז אתה לא חוזר לפסקל! (אולי מישהו רוצה לחדש לי).C שפה יותר חזקה, שניתן בעזרתה לשלוט 100% על כל המערכת(טוב אז אין לנו ROL בשפת C נחיה …)
ואתם באמת חושבים שחברות הי טק אנשים מתכנתים בפסקל? ממש לא נראה לי(טוב רומי, אולי Delphi אבל גם הייתי מעדיף כבר MFC)! ואני אומר בתור אחד שעבד בחברת הי טק.
וחלק מהכייף בתחרות זה לשבור את הראש עם C (או כל שפה אחרת).
בסה"כ כל השפות אותו הדבר (נו……. בלי FLAMING) אז מה זה משנה אם זה printf או print או echo או ?(BASIC) או int 21..
ואם אתם מתעקשים אז int10 (כן וגם mov ax, 0xb800).. יופי הבנו.לסיכום, חבל שמלמדים בבי"ס פסקל (זוהי דעתי ואתם מוזמנים לחלוק עליה).אין כמו C, וגם היום יש דברים יותר נחמדים וידידותיים למתכנת כמו C# וJava….
אז תחשבו על זה…
30 בדצמבר 2002 בשעה 21:42 #79191TheWizardמשתתףכותרת: אני רוצה לחדש לך…
קודם כל תודה להתייחסות אליי עוד לפני שעניתי…אני יודע סי, אבל אני בכל זאת עובד בפסקל.
משום שיש לי פרויקט שמטרתו היא לבנות ממשק משתמש למסד נתונים, ומי שמכיר את דלפי יודע שאין דרך נוחה יותר לבנות ממשק משתמש מאשר שם. כשאני צריך בלחץ זמן לתקן שאילתות (SQL), אני שמח שאני עושה את התכנה בדלפי, ולכן אני צריך לשבור את הראש רק על ה-SQL ולא גם על הקוד של התכנה!
כמו כן, יש לי פרויקט שמטרתו לבנות משחק, ואותו כן יכלתי לבנות בסי, אבל העדפתי דלפי, בין השאר כי הקוד הרבה הרבה יותר קריא.אתה אומר שמי שמכיר את סי לא חוזר לפסקל. תגיד לי, האם אתה מכיר את דלפי (אישית, לא משמועות), ניסית אותו והחלטת לחזור לסי, או שאתה מכיר רק את סי ולא ניסית שום דבר אחר כי אתה מניח שזה הכי טוב?
נכון, סי היא שפה יותר חזקה שבה ניתן לשלוט בכל דבר, ובדיוק בכך גם יתרונה אך גם חסרונה.
יש מקרים בהם חשוב יותר לתכנת מהר ובנוחות מאשר להתעסק עם פרטים (ממשק משתמש), ומקרים בהם חשוב קוד ארוך אך קריא ומובן מאשר קוד קצר ומתוסבך (אלגוריטמים – כמו השאלות בקוד גורו). בנ"ל פסקל עדיף על סי. יש גם מקרים בהם חשוב להתעסק עם פרטים קטנים, לשבור את הראש, ולשלוט בכל דבר קטן (כמו בתכנות מערכות או ספריות).בקשר למה שאמרת בסוף, היה בהחלט נחמד אם היו מלמדים JAVA בביה"ס, אך צריך להזהר לא להשאר עם מתכנתים ברמה גבוהה בלבד.
אצלנו אגב מלמדים גם פסקל, גם סי, וגם אסמבלי… אני אישית למדתי את שלושתם לפני והוצאתי פטור—
יש אנשים (אההמ דניאל אההמ) שיגידו תיכף לא לנהל וויכוחים על איזו שפת תכנות טובה יותר. אבל אחרי ש"המרתי" אנשים (הם אמרו שדברים שאני עובד איתם – שפת תכנות, מסד נתונים – אינם טובים, אך כשבעצם ראו אותם, עברו אליהם), אני לא מתכוון להפסיק להתווכח ולנסות לגרום לאנשים להבין בין השאר שפסקל יותר טוב (לפחות למטרות מסוימות), או לפחות לבחור בסי רק אחרי שניסו את פסקל והחליטו בכוחות עצמם.31 בדצמבר 2002 בשעה 01:02 #79192דניאל קמשתתףכותרת: רומי, אחי, הכל טוב?
חחח, עכשיו אתה עונה לי עוד לפני שאני כתבתי את התגובה שלי…
לא, אני לא אומר שלא צריך לנהל ויכוח על איזה שפת תכנות. דווקא נראה לי ששווה לעשות שרשור(או thread, איך שתרצו) על זה.לצערי אינני יכול להעיד מספיק על פסקל, משום מה הגעתי למסקנה ששפה שמלמדים אותה בכיתה ז´ לא ממש שווה התייחסות רבה. אתה לא רואה אותי כותב בלוגו, נכון?(אני כבר מדמיין את ההבעת פרצוף שלך אחרי ההערה הזאת).
ואם כבר העלת את זה, אז הדיון פה הוא לא C מול פסקל, אלא High level מול low level… היתרונות והחסרונות בשניהם די ברורים – כוח מול פיתוח מהיר.. אני אישית אוהב שזה יהיה כמה שיותר Low Level, שאני ממש ארגיש את המעבד רועד כשאני מריץ את הקוד שלי.
ברור שאי אפשר לכתוב הכל באסמבלר(טוב, אפשר, אפילו היה על זה ויכוח לפני כמה שנים פה בפורום), אבל C מספק לי די הרבה כוח, ורק כשבאמת צריך, יורדים לאסמבלר.עוד דבר שנאמר פה, כמה חברות תוכנה רציניות באמת משתמשות בPascal ודלפי? איזה סוגי מוצרים הם מייצרים? אם הקטע שלכם זה באמת לפתח בסיסי נתונים ומערכות לנהל אותם – סבבה, אפשר גם בVB, אבל כשמגיעים לכל מיני דברים כמו עבודה מול חומרה, או פרוטוקולי תקשורת לסוגיהם, שבהם צריך להתעסק עם כל מיני מבני נתונים מוזרים ומסובכים בזכרון, סי בהחלט עושה את העובדה למאוד פשוטה ונוחה. אגב, אני לא ממש רוצה לגעת בשאלת הביצועים של אלגוריתמים, למי שהביצועים ממש ממש חשובים לו, הוא יכתוב באסמבלר, ואם זה באמת באמת באמת חשוב לו (כמו האלגוריתמים לגילוי מפתחות הצפנה במחשבי הNSA, אז הוא יצור מימוש בחומרה לאלגוריתם, שמהיר פי כמה מאות מאשר כל יישום בתוכנה).
אבל עזבו אתכם מהשפות האלה. כולם לעבור לPYTHON!
Python is an interpreted, interactive, object-oriented programming language. It incorporates modules, exceptions, dynamic typing, very high level dynamic data types, and classes. Python combines remarkable power with very clear syntax. It has interfaces to many system calls and libraries, as well as to various window systems, and is extensible in C or C++. It is also usable as an extension language for applications that need a programmable interface. Finally, Python is portable: it runs on many brands of UNIX, on the Mac, and on PCs under MS-DOS, Windows, Windows NT, and OS/2.
ובשבילך רומי: Python is OSI Certified Open Sourceאפשר לבקש יותר???
31 בדצמבר 2002 בשעה 01:50 #79193TheWizardמשתתףכותרת: כל דבר למטרתו
אתה, באלאדין, אוהב לעבוד קרוב למעבד כי אתה כותב SDK לחומרה. זה מובן, ואם אני הייתי עוסק בזה, ייתכן שגם אני הייתי מעדיף לעבוד עם C.
אני, בפרויקט, לא יכול להרשות לעצמי לבזבז זמן על סיבוכים מיותרים כאשר יש לי מספיק צרות עם שאילתות כאורך הגלות. אין משהו יותר מתאים מדלפי למטרה זו.
עכשיו רק להבהרה: VB זה הדבר הכי גרוע שקיים. לקרוא לו שפת תכנות ולהזכירו בהקשר הזה הוא עלבון לפסקל, לסי, לשאר שפות ה*תכנות*, ולמתכנים בכלל. אני כבר מעדיף לעבוד עם לוגו. דרך אגב, כשלמדנו לוגו התעמקתי גם בו וגיליתי שניתן לבנות כל מיני דברים נחמדים מלבד סרטוט צורות פשוטות, בין השאר דברים דינאמיים וכו´
(עכשיו מעניין מה היא הבעת פניך…)מה שחברות משתמשות הוא שונה לפי מטרתן, וגם זה שחברות משתמשות במשהו לא הופך את זה לבסדר או לטוב.
לגבי אלגוריתמים – לא דיברתי על הביצועים, אלא על הקריאות (READABILITY). למשל האלגוריתם של בדיקת סיביות דלוקות שהצגת כפתרון לאחת השאלות בתחרות הרבה יותר קריא כשהוא רשום בפסקל. אגב, מבחינת הביצוע במקרה זה – זה אותו דבר.
כמובן שניתן לעשות אופטימיזציה בעזרת אסמבלי ואח"כ עוד יותר בחומרה, אבל קודם כל צריך להיות אלגוריתם טוב, ואם הוא יותר קריא אז יותר קל לשפרו (לדעתי).אני יודע מה זה פייטון, ויש לה את המטרות שלה. היא לא מתאימה לבניית דרייברים מפאת איטיותה הרבה (שפת סקריפטים אחרי הכל…). היא גם לא מתאימה לסקריפטים פשוטים (כמו למשל שיהיו במשחק שלי), כי יש שם יותר מדי סיבוכים. היא כן מתאימה לדברים אחרים שאני לא מתעסק בהם, כגון סקריפטים להגדרת חומרה בלינוקס וכו´
האם אפשר לבקש יותר? כן, ניתן לבקש פחות. כי לפעמים פחות (סיבוכים, פיצ´רים מיותרים למטרה הספציפית) זה יותר (פשטות, מהירות)
31 בדצמבר 2002 בשעה 21:40 #79194סוסימשתתףכותרת: מצטער שהצבתי את ההודעה.
תראו חבר´ה אני הצבתי את ההודעה המקורית שאני יודע פסקל ולא סי, אני ממש מצטער לא ידעתי שזה יגרום לכזה וויכוח ארוך ומתמשך ביניכם.
עוד אני גם רואה שכנראה שאני לא אהיה רמה אמיתית בתחרות אם אתם תשתתפו.31 בדצמבר 2002 בשעה 23:01 #79195TheWizardמשתתףכותרת: הויכוח לא התחיל בגללך
כפי שאתה רואה, כ"א פה כבר יודע מה ומי יגיב, והסיבה לכך היא פשוטה
הויכוח האלה התחילו כבר הרבה לפני בערוצים אישיים יותר
עכשיו סתם החלטנו להביאו לכאןבקשר לרמתך בתחרות
כל אחד מתחיל מקטן
אני בתחרות הראשונה לא עברתי שלב א´
בתחרות השנייה עברתי שלב ב´ אך הגעתי למקום גרוע
ובתחרות השלישית הגעתי למקום רביעי!
אם לא תנסה לא תצליח1 בינואר 2003 בשעה 11:24 #79197arkonמשתתףכותרת: בואו נעשה סדר….
או קצת בלגן, בשביל מסדי נתונים באמת SQL (או ORACLE) זה הדבר.
אבל בשילוב עם Delphi אין לי מושג, נשמע לי מגעיל, אולי כי אני רגיל לעבוד מול SQL דרך שרתי WEB.הוויכוח אם הוא על LOW LEVEL או על
Readability(or whatever you want)… הזכרתי את JAVA בתור שפה אחלה , וזה מראה שאני לא תקוע על C/C++ (לשאלתך רומי אם לא נגעתי בDelphi אז נכון לא נגעתי ואני לא רואה צורך, אמרתי כבר שאני מעדיף MFC נכון???!) אז אולי Delphi טיפה יותר עמוק(מבחינת כוח) מול VB (רומי תירגע) זה עדיין לא שווה את המעבר…
ברור שאנחנו לא מדברים על תוכנות שצריכות מסדי נתונים שהיית בוכה אם היית רואה אותם ב SQL והיית צריך לכתוב משהו משלך שיעבוד מול זה OPTIMIZED LIKE HELL בלבד. אבל לה היה קריא בשיט.
לאומת זאת כך את אותו האלגוריתם שרצית לכתוב – כתוב אותו בשפה עילית ותראה מה זה קוד קריא..
זה תלוי בזמן הפרוייקט אם יש לך זמן אין סופי תכתוב את זה באיזה שפה שבה לך ותדאג שמה שצריך להיות מהיר יהיה מהיר
אבל כשאתה עובד בחברה אין לך זמן אינסופי ואתה צריך לנצל את הכלים העומדים לרשותך כמה שיותר טוב.אם מדברים על LOW LEVEL אז תלוי כמה רחוק תרצו ללכת…. נכון אז אפשר לבנות רכיב שיעשה את מה שאנחנו רוצים(ראו 3dfx..)
אבל באמת אנשים כמונו בכלל לא צריכים לחשוב על הכיוון הזה…(אני לא יודע מה אתה עושה שם בדיוק באלאדין דניאל ק.)אבל הכייף הוא באמת להרעיד את המעבד ולהרגיש שהקוד שלך נטול זבל של קומפיילר רץ שמה ומנצל אותו כמו שצריך…. (כן בואו נראה אותכם כותבים כזה קוד……..לא נעים בכלל בעיקר שהיום כבר כל מה שאגנר פוג כתב לא שווה כלום)
בקיצור אני אומר שנסכים על זה שלכל שפה יש את התפקיד שלה…
ואם להודות ועצוב אז אפשר להסתדר בימים אלו בלי C. ולהמשיך הלאה ל Java/C#.. כן אפשר גם Delphi במקום VB אבל שוב תלוי מה רוצים לכתוב… והוויכוח של אם לכתוב את הכל בAssembly חסר טועלת לחלוטין ברור שאתה יכול לכתוב בוא כל מה שכתוב ב C אבל למה לך?
(Get a life!) אז אתה תהיה שפיץ בכל מה שזז במעבד,, אבל יש גבול…אני אישית משתדל ללמוד עוד שפות כל הזמן וככה לבחור את השפה המתאימה לפרוייקט שאני צריך… אם זה סקריפטים או מסדי נתונים או משחקים או וואטאבר.
ומקודם (שכחתי מי) מישהו זרק פו python – אז נכון זה אחלה שפת סקריפט שתקעו כל module שרק רציתם, אבל כשזה מגיע לאלגוריתמים (טוב נו תלוי איזה רמה) אז תגידו שלום…
אבל זה לא יהיה מהיר כמו קוד C לחלונות.בקיצור אין לזה סוף
אני אומר שנחליו ש Assembly זו השפה
סתם סתם
ועכשיו ברצינות אין שפה הכי טובה, כל דבר מותאם למשהו ספציפי.
אומנם אתה יכול להגיד שזה יותר מתאים לדעתך למשהו אחד והשני יגיד שזה מתאים למשהו אחר, אבל זה כבר סיפור של טעם ריח וניסיון.. שאין על מה להתווכח או שכן.שיהיה לכם יום טוב חברים ושנה (אזרחית) טובה.
1 בינואר 2003 בשעה 20:54 #79199Yoniמשתתףכותרת: ASM4LIFE
סתם…
השפה האהובה עלי זה ערבוב של C ו-C++ עם קצת Inline ASM.
חשבתי פעם על C מול C++ והגעתי למסקנה שיש המון דברים ש-"אי אפשר" לתכנת ב-C++ (כלומר אובייקטים יהיו שם ממש רעיון גרוע), אך כמובן ש-C++ זה דבר טוב בהרבה מקרים. אז אני מערבב בין השניים.
בקשר ל-Inline ASM, חוץ מהעניין של האופטימיזציה, הגעתי לפני כמה ימים לדבר חביב שאי-אפשר לפתור אותו בלי Inline ASM. (ב-Win32)
פונקציה אחת מקצה בלוק זיכרון, והופכת אותו ל"בר-ביצוע" (executable) באמצעות VirtualProtect. היא מעתיקה פונקציה שנייה לאותו בלוק זיכרון ואז קוראת לה דרך שם. לצורך העניין הפונקציה השנייה צריכה לשחרר את הזיכרון שבה היא נמצאת.
אם נקרא לפונקציה המשחררת, אז כשהיא תחזור ה-EIP יהיה בלתי חוקי והתוכנה תקרוס.
פתרתי את זה בערך ככה:
push MemBlock
push 0
call GetProcessHeap
push eax
jmp HeapFree
מתי שה-HeapFree תגיע ל-ret היא תחזור ישר לפונקציה שקראה לפונקציה הזאת. נחמד לא?1 בינואר 2003 בשעה 22:10 #79200דניאל קמשתתףכותרת: אחלה דוגמה…
נתקלתי במקרה דומה לפני איזה חצי שנה(גם של העתקת פונקציה לאזור זכרון – רק במקרה הזה ערכתי את הקוד של הפונקציה תוך כדי ריצה, כדי לתת לו מצביע לבלוק נתונים שהקצתי עבורו. לא יכולתי להתשתמש במחסנית אגב, כי לא אני קראתי לפונקציה החדשה(עשיתי Subclassing לפונקציית GetMessage בתוך תהליך אחר, באמצעות WriteProcessMemory).בכלל, כמעט בכל נקודה בתוכנית שבה אתה מתייחס לקוד כאל משהו בזכרון, ולא סתם רצף שורות שבאופן פלא מתבצעות על המעבד, אז אסמבלי תופס איזה שהוא חלק מזה.
אבל האמת? חשוב לדעת אסמבלי(לפחות ברמה מסוימת), גם אם אתה אף פעם לא תגע ממש בקוד אסמבלי: למשל את זה שפקודה כמו if או for גורמת לקפיצות בקוד מה שמשפיע הביצועים של המעבד(כל הקטע של Pipeline וprefetching).
או אפילו בנושא הרקורסיות – כמה זכרון צריך בשביל פונקציה רקורסיבית(ולמה פונקציה רקורסיבית לא יכולה לקרוא לעצמה עד אין סוף…), ויש עוד המון דוגמאות, סתם שלפתי את השניים הראשונים שהצלחתי לחשוב עליהם.1 בינואר 2003 בשעה 22:36 #79201סוסימשתתףכותרת: תודה על העידוד
תודה על העידוד, שנה שעברה גם עברתי את שלב א ואין לי מושג לאן הגעתי בשלב ב אבל בטח לא למקום טוב.
עכשיו שאני חושב על זה כנראה סתם בעזרת ניחושים טובים עברתי.1 בינואר 2003 בשעה 22:47 #79204דניאל קמשתתףכותרת: אופטימיזציה בחומרה
ממש אבל ממש לא הגזמה… דווקא עושים את זה הרבה. הזכרת גרפיקה – בהחלט תחום שבו מנצלים את זה. במקום שהמעבד יבצע את כל החישובים, הכרטיס מסך, מבצע את כל החישובים האלה, וגם הרבה הרבה יותר מהר.ציודי תקשורת – Router / Switch, שצריכים לקלוט המון מידע דרך הרשת, לבצע איזה חישוב עליו(לאן לשלוח, איזה שדות לשנות), פועלים הרבה הרבה יותר מהיר מאשר מערכת של מחשב + כרטיס רשת יכול לפעול.
ואחרון חביב, נושא שאני אישית מאוד מחבב – קריפטוגרפיה. אותם אלגוריתמים שלוקחים טקסט נחמד, טקסט יפה, טקסט מושלם, והופכים אותו לסדרה של ג´יבריש, שאף אחד מלבד המיועד יוכל לקרוא… ובכן, על ידי בניית חומרה מיוחדת שתבצע את החישובים ותותאם במיוחד לחישובים של המעבד הזה(חומרה שמבצעת חזקה מודלרית למשל, עבור הצפנות RSA), אפשר להאיץ פי כמה וכמה מונים את קצב המידע שאפשר להצפין. ואכן, כבר היום משווקים כרטיסי רשת (דוגמת ה3COM + מעבד 3XP), שמצפינים את המידע אותו הם שולחים, מה שמתבצע הרבה יותר מהר מאשר אם המידע היה מוצפן במחשב, ורק אז נשלח לכרטיס רשת.
ומה אנחנו צריכים לחשוב על זה? כרגע, לא צריכים. אנחנו מתכנתים, לא מהנדסי חשמל. אבל אם מישהו אי פעם יחליט ללמוד הנדסת חשמל, או שהוא ינהל פרויקט, שבו ייצרו גם חומרה, אז זה בהחלט נושא שחשוב להכיר ולהבין.
אולי בצבא ייצא למישהו לעבוד זה(ואז זה רלוונטי יותר מתמיד)… אני יכול לחשוב על אלפי נושאים שבהם צריך חישובים מהירים בצבא, השאלה היא מי עובד על זה, לדעתי רק עתודאים…3 בינואר 2003 בשעה 00:11 #79205arkonמשתתףכותרת: הממ אולי אפשר בכל זאת עם C???
טוב אולי לא הבנתי אותך נכון
אבל אפשר לכתוב את מה שכתבת ב C
אתה יכול להגדיר LABLEL ולעשות GOTO
(ואל תשגעו אותי שאזסור להשתמש ב GOTO בתוך שפה עילית-זה רק אומר שאתם לא מנצלים את מה שיש לכם, וצריך לדעת כן להשתמש ומתי לא)ודבר שני כן אפשר לכתוב פונקציה שרקורסיבית ולא צורכת מחסנית
אבל בשביל זה צריך להגדיר פונקציה נגיד NAKED או לכתוב אותה לבד בלי משתנים …. אפשר משתנים גלובלים או STATIC שזה אותו הדבר…3 בינואר 2003 בשעה 10:41 #79206דניאל קמשתתףכותרת: מה ז"א לא צורכת מחסנית?
מה לגבי הCall stack? איך תדע לאן לחזור בקוד אחרי שהפונקציה מסיימת?3 בינואר 2003 בשעה 21:56 #79207Yoniמשתתףכותרת: דניאל צודק:
למי שלא יודע, הפקודה
call x
שקולה לפקודות (השנייה לא באמת קיימת)
push return_address
mov eip, xוהפקודה
ret
שקולה לפקודה (שלא באמת קיימת)
pop eipוזהו ההסבר בקצרה של ה-Call stack.
בקשר ל-goto: אני לא מכיר קומפיילר שיתן לך לעשות משהו כמו
goto HeapFree
וגם אם כן, איך תעביר פרמטרים?
בקיצור הכי כדאי לעשות כאן Inline ASM.דרך אגב, יש שימוש ל-goto!
חבר שלי פעם יצר מנגנון להצפנת פונקציות בזמן אמת. כלומר: בקובץ ה-exe חלק מהפונקציות מוצפנות, וכאשר מתבצעת קריאה לפונקציה מוצפנת, היא מבצעת "Decrypt" לעצמה, מבצעת את הקוד, ובסוף מצפינה את עצמה שוב. (כלומר בכל פונקציה מוצפנת, הקוד "גלוי" רק כאשר הפונקציה מתבצעת.)לצורך העניין היו לו שני מאקרו-ים: ENCRYPT_START ו-ENCRYPT_END, ופונקציה מוצפנת נראית ככה:
void f()//0
{
ENCRYPT_START
// code
ENCRYPT_END
}בפונקציה מוצפנת שמחזירה משתנה, אי אפשר לעשות return כי אז זה ידלג על ה-ENCRYPT_END. הפתרון היה:
int g()//0
{
int retval = 0;//0
ENCRYPT_START
// …code…
retval = 1; goto end;//0
// …code…
end://0
ENCRYPT_END
return retval;//0
}3 בינואר 2003 בשעה 21:57 #79208Yoniמשתתףכותרת: תיקון: מחזירה משתנה = מחזירה ערך*
אופס -
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.