
סיור אינטראקטיבי ב-Go 1.27: מתודות גנריות וחתימות פוסט-קוונטיות
VictoriaMetrics פרסמה סיור מעשי ב-Go 1.27: הכותרת היא מתודות גנריות, ולצדן הקצאת זיכרון מותאמת-גודל, קריפטוגרפיה ML-DSA, חבילת uuid ו-JSON v2 כברירת מחדל.
השחרור של Go 1.27 מתקרב, ו-VictoriaMetrics פרסמה סיור אינטראקטיבי במה שמשתנה, עם דוגמאות הרצות לכל תכונה. המאמר, מאת חסוס אספינו ומתוארך ל-31 ביולי, ממשיך סדרה שהתחיל אנטון ז'יז'יאנוב, שכתב סיור לכל שחרור מ-Go 1.22 עד Go 1.26 והחליט לעצור; VictoriaMetrics אומרת שהיא ממשיכה את המסורת. הסיור מבוסס על הערות השחרור הרשמיות ועל קוד Go, ומציין שכ-1,600 קומיטים נכנסו בין Go 1.26 ל-Go 1.27.
מתודות גנריות — הכותרת של השחרור
השינוי המרכזי נוגע למערכת הטיפוסים: הצהרת מתודה יכולה כעת להצהיר על פרמטרי טיפוס משלה, בלתי תלויים באלה של ה-receiver, כך שפעולה גנרית על טיפוס יכולה להתקיים כמתודה של אותו טיפוס ולא כפונקציה ברמת החבילה. בדוגמה שבסיור מקבל מכיל ה-Box מתודת Map שהופכת Box של int ל-Box של string. נותרת מגבלה אחת: ממשקים עדיין אינם יכולים להצהיר על מתודות עם פרמטרי טיפוס, ואין להשתמש במתודה גנרית כדי לספק ממשק. לצד זאת מגיעים שני שיפורי נוחות קטנים: מפתח בליטרל של מבנה יכול כעת להיות כל בורר שדה חוקי — כלומר אפשר להגדיר ישירות שדה מקודם מתוך מבנה מוטמע — והסקת טיפוסים של פונקציות הורחבה גם להמרות ולליטרלים מורכבים.
ביצועים: הקצאה, SIMD והקומפיילר
הקומפיילר מייצר כעת קריאות לשגרות הקצאת זיכרון מותאמות-גודל, וכך מפחית את עלות ההקצאות הקטנות (מתחת ל-80 בייט) בעד 30%. הרווח הכולל צפוי לעמוד על כ-1% בתוכניות עתירות הקצאות, בתמורה לכ-60 קילו-בייט של גודל בינארי נוסף; אפשר לכבות זאת בדגל GOEXPERIMENT. חבילת SIMD ניידת וניסיונית (GOEXPERIMENT=simd) חושפת טיפוסים בלתי תלויים ברוחב הווקטור, וספריית התקן כבר לקוחה שלה: מימוש המפה בשיטת Swiss Table מימש מחדש את פונקציות ה-hash על גבי אינטרינסיקות simd. שלוש אופטימיזציות קומפיילר חדשות פועלות כברירת מחדל, ובהן הידור switch לטבלאות חיפוש והוצאת חישובים שאינם משתנים מתוך לולאות.
אבטחה וספריית התקן
חתימות פוסט-קוונטיות מגיעות בדמות crypto/mldsa: מימוש ML-DSA לפי מפרט FIPS 204 בשלוש קבוצות פרמטרים, שמגיע גם ל-crypto/x509 ולסכימות החתימה של TLS 1.3. ספריית התקן מקבלת חבילת uuid לפי RFC 9562, שבה NewV7 מייצר ערכים מסודרים לפי זמן — נוחים כמפתחות למסדי נתונים. encoding/json/v2 המיוחל יוצא מהשלב הניסיוני: הוא זמין בלי דגל בנייה, ו-encoding/json הקלאסי נשען כעת מתחת לפני השטח על מימוש v2, עם אפשרות להחזיר את ההתנהגות הישנה דרך GOEXPERIMENT; הבדל אחד שכדאי להכיר — v2 אינו ממיין מפתחות מפה כברירת מחדל. strings ו-bytes מקבלים CutLast, ותמיכת ה-Unicode מדלגת מגרסה 15 ל-17.
כלים ועבודה פחות גלויה
בין שינויי הכלים: go test מריץ כעת כברירת מחדל את בדיקת stdversion vet, go doc יכול להביא תיעוד של גרסת מודול מסוימת, ו-go fix מקבל modernizers חדשים. הסיור גם מאיר עבודה שקל לפספס: HTTP/2 הוא סוף סוף חבילה אמיתית ולא קובץ מיוצר בן 12,226 שורות; תשתית HTTP/3 נכנסה בצורה לא מיוצאת; המקשר ארגן מחדש מטא-נתונים של טיפוסים באופן שעשוי להשפיע על ספריות שניגשות ל-reflect.typelinks; ושימוש לא מאושר ב-//go:linkname נעשה קשה יותר. המחברים מכנים את Go 1.27 שחרור חזק ותזכורת לכך שהקצב המכוון-לשעמם של Go עדיין מספק הרבה בכל מחזור.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.