חזרה

Elixir v1.20: השפה הפכה לטיפוסית באופן הדרגתי
SiTech AI Team2 דק׳ קריאה

Elixir v1.20: השפה הפכה לטיפוסית באופן הדרגתי

Elixir v1.20 משלימה את אבן הדרך הראשונה של מערכת טיפוסים מבוססת תורת הקבוצות: כל תוכנית נבדקת באופן הדרגתי בלי הערות טיפוס, והמהדר מאתר קוד מת ובאגים מאומתים, בלי שהמפתחים יוסיפו ולו הערה אחת.

ב-3 ביוני 2026 שוחררה Elixir v1.20, שמסמנת את אבן הדרך הראשונה בפיתוח מערכת הטיפוסים מבוססת תורת הקבוצות של השפה. העבודה הוכרזה ב-2022, ביוני 2023 פורסם מאמר עטור פרסים על תכנון המערכת, וכעת הפרויקט עבר מהמחקר אל המהדר: כל תוכנית Elixir מקבלת היסק טיפוסים ונבדקת באופן הדרגתי, בלי שמפתחים יוסיפו ולו הערה אחת.

באגים מאומתים וקוד מת

המטרה היא לדווח על קוד מת ועל "באגים מאומתים" — הפרות טיפוס שמובטח שייפלו בזמן ריצה אם יופעלו — בלי להוסיף עומס למפתחים. לפי הודעת השחרור, המימוש של Elixir עובר 12 מתוך 13 הקטגוריות של הבנצ'מרק "If T: Benchmark for Type Narrowing". מערכת הטיפוסים התאפשרה הודות לשותפות בין CNRS ל-Remote, והפיתוח ממומן על ידי Fresha ו-Tidewave.

הטיפוס dynamic(): תאימות והצרה

בעוד מערכות הדרגתיות רבות משתמשות ב-any() במשמעות "הכול הולך", Elixir מציגה את dynamic() עם שתי תכונות. תאימות משמעה שהפרה מדווחת רק כאשר הטיפוסים המסופקים והמקובלים זרים זה לזה: משתנה שהוסק כבעל טיפוס dynamic(integer() or binary()) עדיין יכול לעבור לאופרטור שמצפה למספרים בלבד. הצרה הופכת את הטיפוס לטווח: שימוש ב-data.a וב-data.b מעדן את הערך ל-%{..., a: number(), b: number()}, ולכן הכתיבה data.a + data לאחר מכן מסומנת כהפרה. גם תנאי השמירה מקבלים טיפוסים: is_list/is_integer מניבים איחודים, is_map_key(x, :foo) ושלילתו מניבים נוכחות או היעדרות של מפתח, ו-tuple_size(x) < 3 הופך את elem(x, 3) להפרה. בביטויי case, התאמה ל-nil בענף מוקדם מצרה את הענפים הבאים ל-binary(), מה שחושף גם ענפים מיותרים וקוד מת.

הידור מהיר יותר ומה הלאה

השחרור משפר גם את זמני ההידור, במיוחד במכונות מרובות ליבות; בבנצ'מרקים הסינתטיים של הצוות כלי הבנייה של Elixir הוא כעת המהיר ביותר במחזור הנפוץ "הידור + אתחול + בדיקות". אפשרות חדשה בשם :module_definition יכולה להיות :compiled (ברירת מחדל) או :interpreted ונקבעת דרך elixirc_options ב-mix.exs; היא משנה רק כיצד מבוצע תוכן ה-defmodule ואינה נוגעת בקבצי ה-.beam הנכתבים לדיסק. חתימות טיפוסים עוד לפנינו: הצוות יציג אותן רק כשיהיה מרוצה מביצועי מערכת הטיפוסים ויוכל לממש ביעילות טיפוסים רקורסיביים, טיפוסים פרמטריים ומעבר על זוגות מפתח-ערך במפות כ-enumerable.

SiTech

SiTech — פיתוח אתרים בכוח ה-AI

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