לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #4  
ישן 03-03-2012, 08:23
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 1 שנכתבה על ידי The_Equivocator שמתחילה ב "שאלה בסיסית בJAVA.."

ועד משהו נחמד באותו הנושא..
קוד:
template <class T> void swap ( T& a, T& b ) { T c(a); a=b; b=c; }

ציטוט:
Notice how this function involves a copy construction and two assignment operations, which may not be the most efficient way of swapping the contents of classes that store large quantities of data, since each of these operations generally operate in linear time on their size.

Because this function template is used as a primitive operation by many other algorithms, it is highly recommended that large data types overload their own specialization of this function. Notably, all STL containers define such specializations (at least for the standard allocator), in such a way that instead of swapping their entire data content, only the values of a few internal pointers are swapped, making this operation to operate in real constant time with them.



http://www.cplusplus.com/reference/algorithm/swap/

נערך לאחרונה ע"י The_Equivocator בתאריך 03-03-2012 בשעה 08:27.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 03-03-2012, 13:04
  Scattered mind Scattered mind אינו מחובר  
 
חבר מתאריך: 09.06.08
הודעות: 7,509
בתגובה להודעה מספר 1 שנכתבה על ידי The_Equivocator שמתחילה ב "שאלה בסיסית בJAVA.."

Java אינה שפה השקולה ל-++C. המפתחים של Java כנראה ראו כי ההתעסקות ב-++C ו-C בפויינטרים ורפרנסים הינה מיותרת ולא באמת מוסיפה כח לשפת התכנות(אם אתה מתכנת נכון).

אם פונקציה כמו Swap ב-++C נחוצה לך בשביל ג'אווה, כנראה שעשית משהו לא נכון.
בכל אופן, אני יכול לחשוב על כמה דרכים(לא אלגנטיות כמו ב-++C) על לעשות Swap בין שני אובייקטים:

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

דרך שניה היא להגדיר פונקציית Swap כמתודה בטיפוס עצמו ולהעביר לה כפרמטר מצביע לאובייקט מאותו טיפוס, ומה שהמתודה תעשה זה תעתיק את תוכן(שדות) טיפוס א' לתוך טיפוס ב' וההפך.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 03-03-2012, 19:58
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 1 שנכתבה על ידי The_Equivocator שמתחילה ב "שאלה בסיסית בJAVA.."

פרמטרים עוברים בג'אווה by-value. אין דבר כזה "by-pointer". העניין הוא שג'אווה היא מהשפות המשעשעות שמתייחסות לטיפוסים פרימטיביים בצורה שונה מאשר לטיפוסים לא-פרימיטיביים. משתנים מטיפוסים פרימטיביים הם 'ערומים', בעוד משתנים מטיפוסים אחרים נגישים תמיד רק דרך reference אליהם.

הדבר אותו מעבירים לפונקציה תמיד עוברים by-value, אלא שכשמדובר במשתנים פרימטיביים, הערך שלהם מועתק למחסנית של הפונקציה, ואילו כשמדובר באובייקטים, ה-reference הוא שמועתק(!) למחסנית של הפונקציה.

ראה כאן:

(אלה כמובן דברים מהעמוד הראשון בגוגל...)


ציטוט:
במקור נכתב על ידי The_Equivocator
האם יש דרך יעילה לכתוב פונקציה כזו? (לא כמו מפגר להשתמש בתוך SWAP פעמים בסוג של קופי-קונסטרקטור?)
יש דרך פשוטה מאוד לכתוב לכתוב מימוש יעיל של פנקציה כזו. כדי לעשות דבר כזה, אתה צריך לזכור באיזו שפה אתה מתכנת. בג'אווה, אתה יוצר ממשק בשם Swappable, שמכיל פונקציה בשם swap, שכל מי שמממש אותו יודע לממש swap יעיל לעצמו. משהו כזה: http://ideone.com/7AUE1

בעצם, זה די דומה לשיטה שבה ממשים swap יעיל ב-STL ב-CPP, כמו שכתוב בציטוט שהבאת בתגובה לעצמך...

וכן, מעכשיו אפשר להחליף רק אובייקטים שהם Swappable, כמו שאפשר להעתיק רק מה ש-Cloneable, לסדרת רק את מה שהוא Serializable, להריץ את מה ש-Runnable, ולחכות רק למה ש-Joinable.


עכשיו יש פה שתי בעיות:
  1. מה אם אתה בכל-זאת רוצה להחליף טיפוסים שהם לא Swappable?
  2. מה אם האובייקט ממש גדול, והדרך שבה מימשתי את swap לא יעילה?
ובכן, מסתבר שיש אותו פיתרון לשתי הבעיות האלה, והוא נקרא pimpl.
בגדול, זה אומר להחזיק משתנה פרטי שהוא "הדבר האמיתי", והאובייקט מבחוץ רק נותן גישה אליו. ב-CPP הסיבה לעשות את זה היא כדי לחסוך בקימפול מחדש, הריסת ממשקים, ועוד.
במקרה שלנו, זה מאפשר להפוך כל דרך שהוא לא-Swappable ל-Swappable.
הנה קישור שעושה בערך את זה: http://www.cs.grinnell.edu/~rebelsky/Courses/CS152/2006S/Outlines/outline.25.html

נקבל משהו כזה: http://ideone.com/BHypg
(העתקתי את Variable מהקישור, תיקנתי אצלו באג קטן, והתאמתי אותו ל-Swappable שלי).
זה לא נוח שצריך להשתמש ב-getValue() / setValue()‎ כל הזמן, אבל ככה זה בג'אווה...
ברגע שמסתיים הקוד שעושה המון החלפות, מוציאים את המשתנים מהאובייקטים שעוטפים אותם.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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


נערך לאחרונה ע"י פסטן בתאריך 03-03-2012 בשעה 20:04.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #18  
ישן 03-03-2012, 20:42
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 15 שנכתבה על ידי פסטן שמתחילה ב "פרמטרים עוברים בג'אווה..."

ציטוט:
פרמטרים עוברים בג'אווה by-value. אין דבר כזה "by-pointer". העניין הוא שג'אווה היא מהשפות המשעשעות שמתייחסות לטיפוסים פרימטיביים בצורה שונה מאשר לטיפוסים לא-פרימיטיביים. משתנים מטיפוסים פרימטיביים הם 'ערומים', בעוד משתנים מטיפוסים אחרים נגישים תמיד רק דרך reference אליהם.


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

יש גם הרבה דברים משעשעים מC++, כל הדיפולט-אופרטורס, והדיפולט קופי-קונסטרקטור, שבמקור נעשו בכדי לתת תאימות עם C, הם דברים מאוד משעשעים בC++.
קוד:
class T{ public: int* x; int getMyX(){return *x;} T(int x_){x=new int(x_);} virtual ~T(){delete x;} }; T t1(1); { T t2(2); t1=t2; cout<<t1.getMyX()<<"\n"; } cout<<t1.getMyX()<<"\n";////what heppened to my x???

נערך לאחרונה ע"י The_Equivocator בתאריך 03-03-2012 בשעה 20:53.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 03-03-2012, 21:10
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 18 שנכתבה על ידי The_Equivocator שמתחילה ב "[QUOTE]פרמטרים עוברים בג'אווה..."

ציטוט:
במקור נכתב על ידי The_Equivocator
אני לא יודע עד כמה זה משעשע, זה ללא ספק עושה את חיי המתכנת קלים יותר..
באמת? קל יותר עם זה שמשתנים פרימיטיביים מתנהגים בצורה שונה משאר המשתנים בג'אווה? בגלל זה יש לנו את java.lang.Integer (בנוסף ל-int), את java.lang.Float (בנוסף ל-float), את java.lang.Long (בנוסף ל-long), וכו'? כן, הרבה יותר קל מאשר אם מראש היה לנו רק Integer, Float ו-Long בלבד, בלי האחים הקטנים שלהם...

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

ציטוט:
במקור נכתב על ידי The_Equivocator
פרמטיבי? בסטאק, אין *&*&.. אין דסטרקטורים.
הא?

ציטוט:
במקור נכתב על ידי The_Equivocator
יש גם הרבה דברים משעשעים מC++, כל הדיפולט-אופרטורס, והדיפולט קופי-קונסטרקטור, שבמקור נעשו בכדי לתת תאימות עם C, הם דברים מאוד משעשעים בC++.
אתה בטוח שעשו את זה בשביל תאימות לאחור עם C? באמת בטוח?

לגבי הקוד שלך - נכתב על ידי אדם חסר ידע ב-CPP. כי מי שיודע CPP יודע ש:
  • לא מנהלים את הזיכרון שלך בעצמך, אלא משתמשים ב-containers של STL ובמצביעים החכמים של boost.
  • אם מנהלים את הזיכרון שלך בעצמך, עושים את זה כמו בזהירות, כמו בני-אדם.
  • השלשה copy constructor, assignment operator ו-destructor בדרך-בכלל באה ביחד, ולכן אם יש אחד מהם, כנראה שצריך את שלושתם.
    (ראה גם: MEM41, וכמובן סעיפים רבים ב-Effective C++‎ ולא רק הבודד אליו מפנים בלינק הזה...)
ואגב, הוא בכלל לא מתקמפל...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 03-03-2012, 21:25
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 19 שנכתבה על ידי פסטן שמתחילה ב "[QUOTE=The_Equivocator]אני לא..."

פסטן, פסטן, פסטן..

ציטוט:
אתה בטוח שעשו את זה בשביל תאימות לאחור עם C? באמת בטוח?


אני לא בטוח, אבל קראתי מאמר בנושא.. לא זוכר איפה.

ציטוט:
לגבי הקוד שלך - נכתב על ידי אדם חסר ידע ב-CPP. כי מי שיודע CPP יודע ש:
לא מנהלים את הזיכרון שלך בעצמך, אלא משתמשים ב-containers של STL ובמצביעים החכמים של boost.
אם מנהלים את הזיכרון שלך בעצמך, עושים את זה כמו בזהירות, כמו בני-אדם.


LOL מצבעים חכמים של bost, אנשים שלומדים C++ משתמשים בזה? כל המטרה זה בלימוד. זה היה לגיטימי להגיד לו סמרט פונטרס היו חלק מהתקן של c++, והיו מובנים בכל ספירה של קומפיילר בי-דיפלוט.(יום יבוא, יום יבוא..)
ציטוט:
השלשה copy constructor, assignment operator ו-destructor בדרך-בכלל באה ביחד, ולכן אם יש אחד מהם, כנראה שצריך את שלושתם.


מקובל, אכן לו היה הדסטרקטור פועל על ריק, לא הייתה בעיה.

ציטוט:
ואגב, הוא בכלל לא מתקמפל...


כאן כבר הרגת אותי מצחוק.. ברור זו הייתה רק דוגמה, אתה רוצה את "הפרוייקט" המלא?
סיוט-יורסלף..
קוד:
#include <iostream> #include "T.cpp" using namespace std; int main() { T t1(1); { T t2(2); t1=t2; cout<<t1.getMyX()<<"\n"; } cout<<t1.getMyX()<<"\n";////what heppened to my x??? return 0; } [CODE] class T{ public: int* x; int getMyX(){return *x;} T(int x_){x=new int(x_);} virtual ~T(){delete x;} };
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 03-03-2012, 21:36
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 20 שנכתבה על ידי The_Equivocator שמתחילה ב "פסטן, פסטן,..."

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

ציטוט:
במקור נכתב על ידי The_Equivocator
LOL מצבעים חכמים של bost, אנשים שלומדים C++ משתמשים בזה? כל המטרה זה בלימוד. זה היה לגיטימי להגיד לו סמרט פונטרס היו חלק מהתקן של c++, והיו מובנים בכל ספירה של קומפיילר בי-דיפלוט.(יום יבוא, יום יבוא..)
המצביעים החכמים של boost כבר בתוך התקן, לידיעתך. לא רק שהם בתוך C++11, אלא שהם כבר היו ב-std::tr1. כמובן שכדי לדעת את זה, צריך לדעת CPP...
אנשים שלומדים CPP ממקור טוב בהחלט לומדים להשתמש ב-STL וב-smart pointer-ים המובנים.

ציטוט:
במקור נכתב על ידי The_Equivocator
כאן כבר הרגת אותי מצחוק.. ברור זו הייתה רק דוגמה, אתה רוצה את "הפרוייקט" המלא?
סיוט-יורסלף..
חחחחחחחחחחח

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


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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #22  
ישן 03-03-2012, 21:55
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 21 שנכתבה על ידי פסטן שמתחילה ב "[QUOTE=The_Equivocator]אני לא..."

ציטוט:
אני קראתי מאמר שאומר שכל מה שכתבת זה שטויות. ההבדל הוא שאני הבאתי לינק למאמר הזה...


זה כבר וויכוח מטופש, יכול להיות שהמאמר היה גבב שטויות, ויכול להיות שלא, והאמת שזה לא כל-כך משנה..
ציטוט:
המצביעים החכמים של boost כבר בתוך התקן, לידיעתך. לא רק שהם בתוך C++11, אלא שהם כבר היו ב-std::tr1. כמובן שכדי לדעת את זה, צריך לדעת CPP...
אנשים שלומדים CPP ממקור טוב בהחלט לומדים להשתמש ב-STL וב-smart pointer-ים המובנים.


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


ובגלל זה ערכתי, אין לי מושג שהגבת על הודעה ליפני העריכה, אולי בסוף נוסיף לפורום איזה סינכרון, וננעל את הודעות המשתמש לחצי שעה?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 03-03-2012, 22:08
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 22 שנכתבה על ידי The_Equivocator שמתחילה ב "[QUOTE]אני קראתי מאמר שאומר..."

ציטוט:
במקור נכתב על ידי The_Equivocator
כך, או אחרת, אחרת, או כך, מי שלומד C++, צריך ללכלך את היידים בניהול זכרון, רק כך לומדים באמת.
והוא חייב לדעת כיצד מתנהל זיכרון בשפה שבה הוא כותב, מאחורי הקלעים, הרבה ליפני שימוש בסמרט פויינטרים, כאשר אני רואה אנשים שמשתמשים בספריות סטרינג, ואין להם בעצם מושג קלוש מזה זה בעצם ה"סטרינג" הזה?? זה מעורר בעיה..
נכון. הוא צריך לדעת את זה.
אבל אם הוא כתב מחלקה שמנהלת זיכרון ידנית, ולא הגדיר לה copy constructor ו-assignment operator זה מוכיח שהוא לא יודע, אפילו שהוא צריך. אז מה זה מוכיח? שמי שלא יודע CPP, יכול לכתוב קוד CPP שקורס / פותח חולשת אבטחה / הרבה דברים רעים אחרים. אז מה?
מי שלא יודע ג'אווה יכתוב קדו גרוע בג'אווה ומי שלא יודע ARMv7 assembly יכתוב קוד גרוע באסמלי של ARM...

איך זה קשור לשאלה שלך על ג'אווה? לא ברור.
איך ההבדל בין טיפוסים פרימיטיביים ללא-פרימיטיביים בג'אווה "עושה את חיי המתכנת קלים יותר"? לא ענית.
איך כל סיפור ה-boxing יותר פשוט מכך שהטיפוסים היסודיים גם היו אובייקטים שיורשים מ-java.lang.Object? לא ענית.
מה בכלל משמעות ההתבטאות הבאה?
פרמטיבי? בסטאק, אין *&*&.. אין דסטרקטורים.
השד יודע. אתה טוען שלאובייקטים מקומיים ("בסטאק") לא נקראים ה-destructor-ים?! הזוי.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #24  
ישן 03-03-2012, 22:35
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 23 שנכתבה על ידי פסטן שמתחילה ב "[QUOTE=The_Equivocator]כך, או..."

ציטוט:
השד יודע. אתה טוען שלאובייקטים מקומיים ("בסטאק") לא נקראים ה-destructor-ים?! הזוי.


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

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

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

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

ציטוט:
אתה טוען שלאובייקטים מקומיים ("בסטאק") לא נקראים ה-destructor-ים?! הזוי.


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

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

נערך לאחרונה ע"י The_Equivocator בתאריך 03-03-2012 בשעה 22:51.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #25  
ישן 03-03-2012, 23:32
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 24 שנכתבה על ידי The_Equivocator שמתחילה ב "[QUOTE]השד יודע. אתה טוען..."

ציטוט:
במקור נכתב על ידי The_Equivocator
מה הקשר? אלו משתנים אוטומטיים, מה שאמרתי זה די פשוט להבנה(לפחות כך חשבתי), בJAVA אין לך צורך לדאוג לדסטרקטורים(כי יש גרבג קולקטור), ואין סימנים בסגנון * ** *** &*, והשד יודע מה.
וואלה. כנראה שזה פיצ'ר מיותר בג'אווה. סתם יש finalize...
אבל כן, הרבה יותר קל לכתוב try...finally בכל מקום במקום לדאוג שה-destructor יטפל בזה...

ציטוט:
במקור נכתב על ידי The_Equivocator
וזה שאובייקטים נוצרים תמיד בהיפ, ופרמטיביים בסטאק, זה בהחלט מפשט את הדברים.
עובדה שבכדי לתכנת בJAVA לא צריך בכלל לדעת(או לדעת מעט מאוד מאוד), שיש בכלל דברים כאלה סטאק והיפ, יש לך מילת קסם NEW, וזה בערך כל מה שמתכנת JAVA צריך לדעת.
חוץ מזה שזו טעות...
http://stackoverflow.com/questions/...2099726#2099726
הקישור מדגים קטע משעשע נוסף: מסתבר שמערך - אפילו של פרימיטיבים - הוא אובייקט ונשמר ביעני-heap.
אבל האמירה שלך בהחלט מוכיחה את עצמה, כדי להיות מתכנת ג'אווה לא צריך לדעת כמעט כלום. תמיד אפשר לבוא לפורום ולקבל תשובה...

ציטוט:
במקור נכתב על ידי The_Equivocator
בניגוד לכך כאשר מתכנת בC יוצר אובייקט ענק על המכסנית, ומעביר אותו בי וליו(דבר שהJAVA לא נותן לך מלכתחילה לעשות), זה בעייתי. אין כאן בכלל וויכוח, JAVA היא שפה הרבה יותר פשוטה, ורבים מהדברים שהיא מונעת ממך לעשות, אילו דברים שמתכנת נורמלי לא היה עושה גם ב++C.
אם זה באמת היה בעייתי לאובייקט מסוים, היו עושים לו copy constructor פרטי, כך שאי-אפשר יהיה להעתיק אותו, ואז המשתמש שלא יודע CPP היה בא לפורום ושואל למה הקוד לא מתקמפל, והיו עונים לו בפורום, ומסבירים לו שהוא צריך להעביר רפרנס לאובייקט, או להשתמש ב-shared_ptr...

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

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

ושוב - כמובן שלא הסברת איך זה שלכל טיפוס פרימיטיבי בג'אווה יש אח-גדול שעוטף אותו, במקום שכל הטיפוסים ירשו מ-java.lang.Object עוזר למישהו?
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #26  
ישן 03-03-2012, 23:48
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 25 שנכתבה על ידי פסטן שמתחילה ב "[QUOTE=The_Equivocator]מה..."

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


נו ומי אמר שמערך הוא לא אובייקט? מה זה arr.length, מאיפה זה בא מהעץ? בוודאי שזה אובייקט, ואפשר לייצר כזה רק ע"י NEW.. (אם לא ידעת ליצן..)
ציטוט:
נו, אז הוכחת שמי שלא יודע CPP יכול לכתוב קוד CPP שקורס? זה חידוש גדול לדעתך?


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

הנה רשימה של פרמטיבים בJAVA, כמה מפתיעה, אין שם איזכור למערך?!?!
http://docs.oracle.com/javase/tutor.../datatypes.html

נערך לאחרונה ע"י The_Equivocator בתאריך 04-03-2012 בשעה 00:00.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #27  
ישן 04-03-2012, 00:01
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 26 שנכתבה על ידי The_Equivocator שמתחילה ב "[QUOTE]הקישור מדגים קטע משעשע..."

מי שמדבר על ליצנים...

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

מעניין למה כבר 10 הודעות אתה מתחמק מלהסביר למה לדעתך הגאונית זה "ללא ספק עושה את חיי המתכנת קלים יותר" שטיפוסים פרימטיביים בג'אווה חיים בעולם קטן משלהם, ואם רוצים לחבר אותם לשאר היקום, צריך לעטוף אותם באובייקטים מיוחדים, במקום שמראש נשתמש באובייקטים האלה? (כמו בפייתון, C#‎, ועוד ועוד ועוד)

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #28  
ישן 04-03-2012, 00:11
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 27 שנכתבה על ידי פסטן שמתחילה ב "מי שמדבר על ליצנים......"

ציטוט:
מעניין למה כבר 10 הודעות אתה מתחמק מלהסביר למה לדעתך הגאונית זה "ללא ספק עושה את חיי המתכנת קלים יותר" שטיפוסים פרימטיביים בג'אווה חיים בעולם קטן משלהם, ואם רוצים לחבר אותם לשאר היקום, צריך לעטוף אותם באובייקטים מיוחדים, במקום שמראש נשתמש באובייקטים האלה? (כמו בפייתון, C#‎, ועוד ועוד ועוד)


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

ציטוט:
ג'אווה השפה הכי טובה


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

ציטוט:
למה כבר 10 הודעות אתה מתחמק מלהסביר


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

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

נערך לאחרונה ע"י The_Equivocator בתאריך 04-03-2012 בשעה 00:13.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #29  
ישן 04-03-2012, 00:39
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 28 שנכתבה על ידי The_Equivocator שמתחילה ב "[QUOTE]מעניין למה כבר 10..."

ציטוט:
במקור נכתב על ידי The_Equivocator
רק לצורכי ייעלות, כאשר פתחו את JAVA, זו הייתה המחשבה, אין שום סיבה אחרת.
ניחוש נחמד. חשבת על זה לבד או שראית את זה בעוד מאמר שאין לך קישור אליו?
http://gbracha.blogspot.com/2009/05/original-sin.html
http://java.dzone.com/articles/woul...-better-without
(ועוד תלונה בנושא: http://developeraspirations.wordpre...itives-are-bad/)

ציטוט:
במקור נכתב על ידי The_Equivocator
אני עונה על מה שבה לי, לא רציתי לריב איתך באשכול הזה, אתה משום מה תמיד נגרר לוויכוחים, זה בטח עושה לך את זה..
ברור. בגלל זה כשקיבלת ממני תשובה לשאלה שלך על ג'אווה, התחלת לכתוב שטויות על CPP...

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #31  
ישן 04-03-2012, 01:09
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 30 שנכתבה על ידי The_Equivocator שמתחילה ב "[QUOTE]This was a conscious..."

However, as of Java 5.0, autoboxing enables programmers to proceed as if primitive types were instances of their wrapper class
איזה מזל שבקישורים שלי נותנים דוגמות ספציפיות לכך שזה לא נכון:
Of course the first argument someone will bring to me is the availability of Autoboxing that came with Java 1.5. Autoboxing will automatically convert a primitive to its Object counterpart and visa versa on the fly with no additional programming thought. Problem solved right? Well not exactly.

You see while base primitives can be converted automagically to Objects via autoboxing, primitive arrays cannot. Ok well sure they can be created and cast to an object, but the resulting object cannot be initiated via reflection. This is because the ‘class’ of a primitive array has no constructor since it’s not a real Object.
הפסקה הראשונה אומרת "אבל אז יבוא איזה חכם בלילה ויגיד לי שיש autoboxing", והפסקה השניה נותנת את התרחיש המדויק שבו סיפור הטיפוסיפ הפרימטיביים עדיין לא תואם כמו שצריך את שאר מערכת הטיפוסים של השפה.
אבל כדי לדעת את זה, צריך אשכרה לקרוא את מה שכתוב בקישורים שהבאתי...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #33  
ישן 04-03-2012, 01:32
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 32 שנכתבה על ידי The_Equivocator שמתחילה ב "זה לא שזה לא נכון, אלה שזה לא..."

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

ב. הקישור השני לא קשור לכלום. מי אמר שזה שכל הטיפוסי יהיו אובייקטים שיורשים מ-java.lang.Object אומר שחייבים ליצור אותך ב-heap וךא על המחסנית? קרא שוב את הקישורים שהבאתי למעלה וגם את זה: http://blog.juma.me.uk/2008/12/17/o...ation-overhead/

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #39  
ישן 04-03-2012, 15:28
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 38 שנכתבה על ידי The_Equivocator שמתחילה ב "בעריכה הבהרתי את מה שאמרתי,..."

ציטוט:
במקור נכתב על ידי The_Equivocator
בעריכה הבהרתי את מה שאמרתי, בדי לחסוך עוד תגובות.. אבל איתך זה לא עובד..




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

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #40  
ישן 04-03-2012, 15:26
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 36 שנכתבה על ידי The_Equivocator שמתחילה ב "קראתי אותם כבר בהתחלה. (תאמין..."

עכשיו שבטוח שלא תהיה עריכה נוספת, אפשר להתייחס.

מה שכתבת זו שטות עצומה. הקומפיילר יכול לטפל בכל מה שצריך ב-compile-time, ולא תהיה שום השפעה על הביצועים. המקום היחיד שבו תהיה השפעה על הביצועים מכך ש-int יהיה טיפוס שיורש מ-java.lang.Object היא כשמתחילים לשחק עם פולימורפיזם, אבל אז יש השפעה על הביצועים גם במימוש הנוכחי - ממילא צריך לבצע boxing, ואז לשחק עם זה...

כל זה כמובן כתוב בלינק, כך שאיפול אם נאמין לך שקראת, אתה לא מבין כלום.

עכשיו, זה נחמד שהבאת לי איזה DBA שהוא גם "Java Development Certified Professional", וכל מה שיש לי זה "איזה צטוט בפורום" שהבאתי. אלא שהפוסט ההוא שהבאתי נכתב על-ידי אחד הארכיטקטים הראשיים של ג'אווה, והמחבר של ה-Java Language Specification ושל ה-Java Virtual Machine Specification.
הנה קו"ח שלו: http://bracha.org/cv.pdf
הנה ה-JLS וה-JVMS באתר אוראקל: http://docs.oracle.com/javase/specs/
פתח את ה-PDF-ים:אז מה יש לנו בינתיים?
לא מבין בג'אווה. חושב שאיזה DBA אקראי עדיף על מי שכתב - מילולית, אשכרה כתב - את הספציפיקציות של ג'אווה. חופר על CPP בלי קשר. לא יודע מה זה std::vector. טוען ש"ת'רדים חוסכים קונקטסט-סוויוצ'ים" (זוכר את זה? כמה צחקתי אז...). לא מבין שפיצ'רים מאגניבים של השפה יכולים להיות מטופלים לגמרי ב-compile-time בלי להשפיע על ביצועי הריצה. ועוד, ועוד, ועוד...

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 16:57

הדף נוצר ב 0.11 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר