Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - מעוניין ללמוד c++ דרך קוד מקור של תוכנות בלינוקס

Anonymous - 17/01/2018 - 15:25
נושא ההודעה: מעוניין ללמוד c++ דרך קוד מקור של תוכנות בלינוקס
האם זה ריאלי?
בתור מתחיל שאין לו שמץ - האם יש תוכנה פשוטה כזו? (פקודה כמו ls ? )

תודה.
Anonymous - 17/01/2018 - 17:11
נושא ההודעה:
לדעתי זאת לא דרך מומלצת להתחיל ללמוד אף שפה, בטח לא C++.

תתחיל מהבסיס, תלמד עקרונות, תכתוב כמה דברים בעצמך, ורק אחרי זה תכנס לקוד של אחרים.
elcuco - 17/01/2018 - 20:50
נושא ההודעה:
1- הליבה של לינוקס כתובה ב־C.
2- הקוד של ls נמצא ב-coreutils למשל. הינה המימוש שלו:
http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

זאת לא הדרך להתחיל ללמוד. אבל זה דרך טובה מאוד ללמוד.

---
עריכה:
הינה הקוד של ls ב־busybox:
https://github.com/mirror/busybox/blob/master/coreutils/ls.c

---
ערכה שלישית:
הינה קוד המקור של dir ב־freecom (המימוש החופשי של DOS - FreeDOS).
https://github.com/FDOS/freecom/blob/master/cmd/dir.c
Anonymous - 17/01/2018 - 21:47
נושא ההודעה:
זו דרך טובה ללמוד תכנות מתקדם, לא להתחיל.
זה כמו להתחיל ללמוד הנדסה מלקרוא תוכניות של מגדל מורכב
Anonymous - 17/01/2018 - 23:48
נושא ההודעה:
לא מצאתי משהו מאוד קטן ופשוט שכתוב ב־C++‎ בדביאן.

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

aptitude search  '~Gimplemented-in::c\+\+'

במערכת שלי זה מחזיר כמעט 10000 תוצאות. דוגמה להגבלת החיפוש: הוספת התנאי שתאור החבילה יכלול את השם foob:
קוד:

aptitude search  '~Gimplemented-in::c\+\+ ~dfoob'


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

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

apt-get source lxmusic
sudo apt-get build-dep lxmusic
cd lxmusic-0.4.7
./debian/rules build

זו אינה המלצה דווקא על lxmusic (סתם בחרתי חבילה).

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

ls (ושאר coreutils) כתובות ב־C.
Anonymous - 18/01/2018 - 01:12
נושא ההודעה:
אין לך שמץ של ידע בתכנות כלל או אין לך ידע בתכנות CPP?
כי אם יש לך ידע בתכנות אני חושב ש- elcuco צודק.

אם אין לך ידע בתכנות כלל, אני נוטה יותר לכיוון האורח שענה ל- elcuco.
Anonymous - 18/01/2018 - 15:18
נושא ההודעה:
תודה רבה!
אלקוקו - 5K שורות ל ls זה מטורף. אם כבר c אז אלך על פקודה כמו pwd
צפריר תודה. יבדק בערב.
האורח מעל - אין לי תואר במדמ"ח. אבל אני כותב פה ושם קוד (סקריפטים) ואם node.js כתובה ב C++ אני רוצה ללמוד C++


ניסיתי פעם לקרוא דוקומנצטיה של QT ו GTK (חלונות ויזואלים זה יותר מגניב) אבל לא הייתי עקבי
אולי אחזור לזה
https://developer.gnome.org/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD

אז שוב, תודה.
קיבלתי הכוונה.
Anonymous - 18/01/2018 - 15:26
נושא ההודעה:
וכמובן שטעיתי.
הדוגמה של GTK כתובה ב C
אופס
elcuco - 19/01/2018 - 14:45
נושא ההודעה:
אם אתה מחפש משהו פשוט ב-C++ אולי שווה לך להסתכל על qhcora שכתובה ב-Qt והמנוע עצמו כתוב ב-C.

https://github.com/elcuco/qhocr/tree/master/src
borsood - 22/01/2018 - 21:59
נושא ההודעה:
אזהרה קלה:
שפת ++C נמצאת במהלך של שינוי גדול מהשנים האחרונות. ייתכן ותבחר בפרוייקט ותיק שהקוד שנכתב בו מיושן (משתמש ב־raw pointers, new delete). לא כדאי שתרכוש הרגלים מסוימים רק בגלל שהקוד נכתב לפני זמן רב. אני חושב שזה המצב ברוב התוכנות.

אולי chaiscript יהיה שונה כיוון שהמחבר משתמש בפרויקט הזה כמעבדה לבחינת קוד מודרני.
Anonymous - 29/01/2018 - 04:19
נושא ההודעה:
למה לא ללמוד בדרך רגילה ? כלומר למשל תלמד משתנים, פלט קלט, אופרציות, פונקציות וכן הלאה חלק חלק ואז תתחיל להרכיב דברים. אתה הולך למבנה מורכב מאוד ומתקדם נורא שקרוב יותר לשכבות חומרה ועובד מול אינספור אלמנטים אחרים מאשר להבנת היסודות. תלמד את אבני הבניין הבסיסיות ואז תרכוש השכלה בהתאם לכיוון שמעניין אותך ותתפתח אליו.
תקרא קצת, תכתוב קצת, תקרא יותר ,תכתוב יותר. למה מכל העולמות להתחיל מתוכניות של מדינה לפני שאתה יודע לבנות יחידת דיור ? איך לערבב מלט ?
Anonymous - 29/01/2018 - 11:56
נושא ההודעה:
borsood :
אזהרה קלה:
שפת ++C נמצאת במהלך של שינוי גדול מהשנים האחרונות. ייתכן ותבחר בפרוייקט ותיק שהקוד שנכתב בו מיושן (משתמש ב־raw pointers, new delete). לא כדאי שתרכוש הרגלים מסוימים רק בגלל שהקוד נכתב לפני זמן רב. אני חושב שזה המצב ברוב התוכנות.

אולי chaiscript יהיה שונה כיוון שהמחבר משתמש בפרויקט הזה כמעבדה לבחינת קוד מודרני.


למישהו שידע C++ על בוריה לפני 8 שנים, אבל מאז מתעסק בשפות שפויות - מה היית ממליץ אם אני רוצה לוותר על שפיותי ולחזור ל- C++ מודרנית?
Anonymous - 29/01/2018 - 15:05
נושא ההודעה:
מתפלא :
למה לא ללמוד בדרך רגילה ? כלומר למשל תלמד משתנים, פלט קלט, אופרציות, פונקציות וכן הלאה חלק חלק ואז תתחיל להרכיב דברים. אתה הולך למבנה מורכב מאוד ומתקדם נורא שקרוב יותר לשכבות חומרה ועובד מול אינספור אלמנטים אחרים מאשר להבנת היסודות. תלמד את אבני הבניין הבסיסיות ואז תרכוש השכלה בהתאם לכיוון שמעניין אותך ותתפתח אליו.
תקרא קצת, תכתוב קצת, תקרא יותר ,תכתוב יותר. למה מכל העולמות להתחיל מתוכניות של מדינה לפני שאתה יודע לבנות יחידת דיור ? איך לערבב מלט ?

כי.
אני די זקן ודל משאבים (זמן, מרץ ואנרגיה, IQ , ממון ..) בשביל להתחיל תואר במדמ"ח.
מושגים כמו by ref/by val כבר די מוכרים לי.
והכי חשוב - לא ממתינה לי משרה בסיום הויה דה לה רוזה, אז למה להתעמק?
(כן, זה לא מקובל אבל אני קודם מאתר דרישה ואז לומד את המטריה)

ומצטרף לשאלה בדבר הC++ המודרנית.
האם זה שבר גדול כמו בפייתון?
Anonymous - 30/01/2018 - 03:15
נושא ההודעה:
בהצלחה איש!
borsood - 31/01/2018 - 08:57
נושא ההודעה:
[quote="Anonymous"]
מתפלא :

ומצטרף לשאלה בדבר הC++ המודרנית.
האם זה שבר גדול כמו בפייתון?

לא, התאימות אחורה היא עקרון יסוד בשפה כך שגם קוד מיושן מאד יעבודץ וזה מקור האזהרה.
יש כלים שעוזרים ונותנים אזהרות, אבל אני לא מכיר קוד פתוח גדול שמשתמש בלעדית ב++C מודרני.
chaiscript שהזכרתי הוא פרוייקט קוד שהמחבר שלו משתמש בו גם לבחינת פרדיגמות תכנותיות מודרניות.
אם ידעת ++C לפני שמונה שנים אולי תשמח לראות את השינויים שהשפה עברה ותמשיך לעבור. אולי אפילו צתליח לשמור על שפיותך Wink
Anonymous - 02/02/2018 - 19:17
נושא ההודעה:
אוקיי הורדתי את coreutils מפה git://git.sv.gnu.org/coreutils.git
ומה שאני לא מנסה לקמפל זה לא מצליח. חסר לו config.h מדוע?
קוד:
$ gcc whoami.c                                                                                                                           :(
whoami.c:21:10: fatal error: config.h: No such file or directory
 #include <config.h>
          ^~~~~~~~~~
compilation terminated.


אגב זה לטרול שרושם פה כל הזמן שסטולמן פרזיט -
קוד:
grep -i stallman *                                                                                                                     :(
grep: blake2: Is a directory
cat.c:   By tege@sics.se, Torbjorn Granlund, advised by rms, Richard Stallman.  */
cat.c:  proper_name ("Richard M. Stallman")
comm.c:/* Written by Richard Stallman and David MacKenzie. */
comm.c:  proper_name ("Richard M. Stallman"), \
ls.c:/* Written by Richard Stallman and David MacKenzie.  */
ls.c:  proper_name ("Richard M. Stallman"), \
od.c:   Based on a function written by Richard Stallman for a
rm.c:/* Initially written by Paul Rubin, David MacKenzie, and Richard Stallman.
rm.c:  proper_name ("Richard M. Stallman"), \
split.c:  proper_name ("Richard M. Stallman")
tee.c:/* Mike Parker, Richard M. Stallman, and David MacKenzie */
tee.c:  proper_name ("Richard M. Stallman"), \
uniq.c:/* Written by Richard M. Stallman and David MacKenzie. */
uniq.c:  proper_name ("Richard M. Stallman"), \

Anonymous - 02/02/2018 - 20:48
נושא ההודעה:
אתה באמת מצפה לקמפל קבצים של פרוייקט ישירות בלי להפעיל את ה-makefile?
יש readme עם הוראות איך לקמפל את הפרוייקט, תשתמש בו.
Anonymous - 03/02/2018 - 01:59
נושא ההודעה:
אני מצטרף לאזהרה של בורסוד (borsood) ומתנגד להצעה של elcuoco:

C++ עברה שינויים מאוד משמעותיים בשבע השנים האחרונות, וכל 3 שנים בערך תקן השפה מתעדכן. לא כל 3 שנים השינויים הם דרסטיים, אבל ב-2011 היו שינויים עצומים. אמנם נכון, שהשינויים עברו תוך שמירה על תאימות לאחר, אבל כאן גם בדיוק הבעיה: קוד מודרני ב-C++ נראה מאוד שונה מקוד "בסגנון ישן"; אבל קוד בסגנון ישן, אשר היום ממש לא כדאי לכתוב, עדיין יתקמפל ויעבוד כרגיל ובלי הערות ואזהרות. כך שאתה עלול לסגל לעצמך סגנון עבודה לא מוצלח.

הנה הרצאת הסבר נגישה וחביבה של Herb Sutter:
C++ מודרנית - מה שאת/ה צריך לדעת
בה תקבלו טעימה קטנה של השינוי בלי לצלול לעומק.

רוב התוכנה שכתובה ב-C++ כתובה ב"סגנון ישן" - כי היא נכתבה לפני 2011 . יתר על כן, ישנן ספריות ופלטפורמות רבות אשר מתוכננות בצורה "עקומה" כדי לעקוף או להתגבר על קשיים ב-C++ כפי שהתקיימה בעבר - ואילו היום אין במעקפים האלו צורך. כך למשל לגבי Qt. גם אם היינו "מעדכנים" את המימוש של Qt , עדיין כל הרעיון לא היה מתאים ל-C++ מודרני (ולא אכנס כאן להסבר מדוע).

זו סיבה אחת מדוע לא כדאי ללמוד C++ על בסיס הקוד של תוכנה קיימת. סיבה שניה היא שבתוכנה קיימת, גם אם היא כתובה היטב, באים לידי ביטוי המון סיבוכים ושיקולים וצרכים אשר חורגים ממה שתלמיד מתחיל של שפת התכנות צריך לחשוב עליהם - וזה מבלבל (בלי קשר ל-C++).
einpoklum - 03/02/2018 - 02:02
נושא ההודעה:
ההודעה הקודמת היא שלי, לא הייתי מחובר...
Anonymous - 03/02/2018 - 11:39
נושא ההודעה:
Anonymous :
אתה באמת מצפה לקמפל קבצים של פרוייקט ישירות בלי להפעיל את ה-makefile?
יש readme עם הוראות איך לקמפל את הפרוייקט, תשתמש בו.

תודה על התשובה.
זה לא טריוויאלי מבחינתי לקבל תשובה לשאלה כל כך בסיסית אשר בטח אם הייתי בצד השני שמבין - היתה מעוררת בי אנטגוניזם.
תודה רבה גם לשאר התורמים לדיון. (אינפו כלוםSmile )
Anonymous - 05/02/2018 - 20:50
נושא ההודעה:
זה אני מאשכול אחר פה, אבל הבחור עשה גם סרטון על C++ מלפני 3 שנים (כך שלדעתי מאוד עדכני), אז אתה מוזמן גם לשם ולא רק לקוד המקור:
https://www.youtube.com/watch?v=Rub-JsjMhWY

זה שעה ועשר דקות.
borsood - 06/02/2018 - 07:05
נושא ההודעה:
לא.
מלמד על raw pointers ו raw arrays.
בהחלט לא.
Anonymous - 06/02/2018 - 13:04
נושא ההודעה:
נדמה לי שהתכוונת שהוא *לא* מלמד על המצביעים שהזכרת ולא שהוא כן מלמד.
Anonymous - 06/02/2018 - 16:09
נושא ההודעה:
מהמעט שראיתי עושה רושם שהוא מלמד את אותם דברים שאני מכיר מ-c++ מלפני 20 שנה, זה בטח לא השינויים והעדכונים ש-borsood‏ מתכוון אליהם.
borsood - 07/02/2018 - 07:12
נושא ההודעה:
הבהרה: מלמד על raw arrays החל מ 13:50.
מלמד על raw pointer החל מ 42:00.

לכן הוא מלמד ++c מיושן.

הוא גם משתמש הרבה בendl. והנה סרטון קצר שמסביר למה זה רעיון רע במציאות
https://www.youtube.com/watch?v=6WeEMlmrfOI
Anonymous - 07/02/2018 - 13:39
נושא ההודעה:
borsood :
הבהרה: מלמד על raw arrays החל מ 13:50.
מלמד על raw pointer החל מ 42:00.

לכן הוא מלמד ++c מיושן.

הוא גם משתמש הרבה בendl. והנה סרטון קצר שמסביר למה זה רעיון רע במציאות
https://www.youtube.com/watch?v=6WeEMlmrfOI

אה, אם כך מתנצל בפניך.
עכשיו הבנתי Smile.
כל הזמנים הם GMT + 2 שעות