C# או NODE.JS
-
@שואף אמר בC# או NODE.JS:
מכיר כבר הרבה שנים.
ה-JS שהכרת לפני הרבה שנים כבר הספיקה להתבגר...
(אתה מכיר פונקציות חץ?let
ו-const
? destructuring? template strings? לולאות for...of או for...in? אופרטור ה-spread [...
]? לא סתם הכניסו את כל זה, הדברים מאוד שימושיים. לגבי classes, אפשר להסתדר מצויין בלי.)
כאשר נוד באה לעולם promises עדיין לא היו קיימים (אולי בספרייה, לא בשפה). לכן הרבה מהדברים המובנים הוא עם callback-ים. אבל שימוש ב-promises הרבה יותר נעים, ואפשר להמיר את ה-callback-ים ל-promises.@שואף אמר בC# או NODE.JS:
ברור לי עדיין לגמרי העניין של הscope בJS
אני לא יודע איך זה ב-PHP (נראה לי שגם שם יש את המושג של closures אבל בצורה שונה, צריך להצהיר בפירוש?). ב-JS הכלל הוא שכאשר אתה מצהיר על פונקציה הוא "לוכד" את כל המשתנים שקיימים ב-scope ההצהרה, ואתה יכול להשתמש בבטחה באותם משתנים בתוך הפונקציה גם אם תקרא לפונקציה ממקום שבו המשתנים לא קיימים. זה דבר שלא קיים בהרבה שפות אחרות שבהם יש רק משתנים לוקליים וגלובליים.
-
@dovid אמר בC# או NODE.JS:
מתכנתי JS מרגישים את עצמם בג'ונגל. הם נחשבים כמתכנתים מן השורה מייד אחרי השורה הראשונה שהם כתבו
זה בעיה של המתכנתים לא של השפה. בהרבה שפות זה ככה שה"ספרייות הסטנדרטיות" נותנים לך רק דברים בסיסיים ממש. מייקרוסופט מפנקים אותך שנותנים גם שפה, וגם ספרייה סטנדרטית מורחבת מאוד וגם פריימוורקים וגם best practices, וגם IDE, והכל על מגש של זהב.
החלק העקרי של הפתרון הוא להיות מודע לבעיה ותמיד לנסות לבדוק איך ניתן לשפר. לקרוא כתבות, לקרוא קוד של אחרים (וכמובן להפעיל את השיפוט העצמי מה לקבל ומה לא). -
@yossiz לא מבין אותך, לרוב שפות התוכנה יש חברה, אתר, קהילה, וחיים תוססים.
אני לא מכיר שפה כ"כ אומללה מבחינת "מאין באת ולאן אתה הולך" כמו JS.
זה שפה כ"כ טהורה שאין לה בכלל הקשר וסביבה, אפילו console.log זה API חיצוני.
אני מוכרח לומר שכיום אני די נהנה בJS וגם אני חושב שזו השפה הכי שימושית בחיים נכון להיום... -
אחרי הרבה שעות פיתוח ב JS, היום אני מעדיף לכתוב ב typescript כל אימת שזה מתאפשר לי, המערב הפרוע של JS מערער לי את הביטחון העצמי, כתבתי קצת ב C# ואהבתי את הקשיחות אבל ההרגל החזיר אותי לJS עם העזרים של TS
אני חושב שהעתיד נמצא ב TS, אפילו ריהאל דיאן הפנים את זה והכניס את זה לדנו -
@dovid אמר בC# או NODE.JS:
לרוב שפות התוכנה יש חברה, אתר, קהילה, וחיים תוססים.
זה משהו מודרני ש"שפה" קשורה לאתר וקהילה וחברה. גם C ו-++C הם שפות נטו. אז לא היה דבר כזה ש"שפה" פירושה כל מה שמסביב גם כן. JS נותן הרבה הרבה מעבר ל-C ו-++C. אז זה לא מגיע עד לרמה של פייתון, JAVA, #C וכל השאר, נו, בסדר.
שפה כ"כ אומללה
האינטרנט לא כל כך מסכים לך... רוב הכתבות שמתפרסמות הם על JS.
זה שפה כ"כ טהורה שאין לה בכלל הקשר וסביבה,
כמו"כ C ו-++C. ועוד הרבה. זה הרעיון של שפה.
אפילו console.log זה API חיצוני.
סתם לשם הפדנטיות, המון שפות הם כך שזה לא חלק מהשפה. גם ב-#C ו-JAVA זה מגיע רק כחלק מה-standard library. זה באמת מוזר לי שבפייתון בחרו להכניס את זה לשפה. (על PHP אני כבר לא שואל שאלות...)
טוב, זה סתם ויכוח לשם ויכוח בלי הרבה תועלת...
-
@yossiz אמר בC# או NODE.JS:
@avr416 אמר בC# או NODE.JS:
אבל דווקא בדברים שצריך בהם הרבה גישה לקבצים וכדו' (I/O) מקובל לומר שזה לא הצד החזק שלו..
נראה לי שזה בדיוק הפוך. המודל של נוד לא טוב לקוד שצורך הרבה CPU כי הכל רץ בתוך thread אחד וה-multi-tasking הוא cooperative ולא preemtive. אבל בקוד עם הרבה I/O זה יותר חסכוני להשתמש ב-thread אחד ו-event loop במקום ב-thread pool. שלא לדבר על PHP בלי thread pool ושום דבר אלא thread (או תהליך) חדש לכל בקשה, זה הכי גרוע כי ה-I/O תוקע את ה-thread עד שהיא תסתיים.
צודק. טעיתי.
-
@yossiz אמר בC# או NODE.JS:
@avr416 אמר בC# או NODE.JS:
נראה לי שלטייפים סטטיים אין קשר להשפעה על הביצועים בכלל
נראה לי שאתה לא צודק...
אתה צודק שזה תורם גם לתחזוקת הקוד וניפוי שגיאות, אבל הוא גם תורם גדול לביצועים.
אפשר להצדיק את דבריך ביחס ל-typescript כי שם זה מתקמפל ל-JS רגיל, אז מן הסתם אין יתרונות בביצועים, או אולי יתרון מינורי. אבל שפה שכל כולה טייפים סטטיים מסוגל לביצועים גבוהים יותר.לא מבין למה שזה ישפיע.
גם c# מתקמפלת לקובץ dll שהוא זה שרץ בסוף.
הבדיקה של הטייפים מתבצעת בשלב ההידור הראשוני, לא בזמן הריצה, לכן לא אמורה להיות לזה שום השפעה על הביצועים של השפה. כך לפחות להבנתי הדלה.ראה פייתון.
-
@avr416 אמר בC# או NODE.JS:
לא מבין למה שזה ישפיע.
נקח לדוגמה את הפונקציה הזאת (פסאודו קוד) :
function (int x, int y) { return x + y }
בשפה עם טייפים סטטיים, המהדר יכול לתרגם אובייקט מסוג
int
למספר פשוט בזכרון הראם. פעולת+
על האובייקט יתורגם לפעולת חיבור פשוט (פקודתADD
ל-CPU). המימוש של הפונקציה תתפוס לכל היותר כמה פקודות CPU.
בשפה עם טייפים דינמיים, למהדר/מתרגם אין דרך לדעת איזה סוג משתנה הוא יקבל, אז איך הוא יודע איזה פעולה לעשות עליה? הרי פעולת+
על סטרינג שונה מפעולת+
עלint
. הפתרון היא שנשמור עם כל משתנה את הסוג שלו. ואז כאשר הפונקציה מקבלת משתנה היא בודקת מה הסוג ולפי זה היא מריצה את הפעולה הנדרשת או זורקת שגיאה אם הפעולה לא זמינה עבור הסוג ההוא.
זה מכפיל ומשליש את מספר הפקודות שנדרשות עבור כל פעולה.ראה פייתון.
מה יש לראות שם? שם הביצועים יותר גרועים מ-JS (במנועי JS משתמשים בטכנולוגיית JIT מה שלא עושים בפייתון. ב-JS המפתחים עובדים קשה לקבל הביצועים הכי טובים שאפשר (במסגרת ההגבלות של שפות דינמיות) משא"כ בפייתון יש פילוסופיה של לשמור את הקוד פשוט ושביצועים זה לא הכל.)