RESEARCH EDITION · 2020—2026

עולם שלם.
כתובת אחת.
XO

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

THE VALUE + CHILDREN CONTRACTsame path
app.user"Tami"
├─ status"online"
└─ preferences·
└─ theme"dark"
הערך של user נשאר, גם כשנוספים לו צאצאים. זו הדגמת מבנה, לא חיבור למערכת חיה.

ציר הזמן שהתברר בקוד

תאריכי קומיטים ומקורות, לא רק תאריך יצירת המאגר. כל תחנה נפתחת לפרטים.

קוד שנבדקגרסה שפורסמהראיה מוגבלת / מצב מקומי

משפחת xoSomething

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

קשר ירושה שנבדק בקוד 2024, בכיוון מצאצא לבסיס:
xoBranch → FreshRedis → xoBenedict → benedict
לעומתו, xoDeque יורש ישירות מ־xoBenedict; הדמיון בשם אינו הופך אותו לבסיס של xoBranch.

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

מהפשוט אל המורכב

דוגמאות קוד לקריאה והשוואה. הן אינן מורצות בדפדפן, ולא נבדקו כאן מול שירותים חיים.

אותו ״לחזור אחורה״ — חוזה אחר

המחשה אינטראקטיבית מוכנה מראש לפי הקוד. אין כאן מנוע XO, חיבור Redis או תוצאה מהרצה.

מתחילים ממצב בסיס שהוכן מראש: תשובה A וטון calm. בשני הצדדים משנים קודם את התשובה, ואחר כך את הטון. בשלב האחרון מפעילים פעולות ניווט שונות: בחירת החלופה הראשונה של התשובה מול ביטול שינוי השורש האחרון. הן אינן API שקול.

2024 · per-node xoBranch

לכל צומת חלופות ו־marker משלו. ניווט ב־answer אינו שחזור אטומי של כל העץ.

answer
tone

כתיבה לאינדקס מפורש יכולה להחליף חלופה. אין להסיק מכאן יומן בלתי־משתנה או אטומיות בין הצמתים.

2026 · root history

היסטוריית תמונות שורש בתהליך. ה־cursor ההיסטורי וגרסת המצב הנוכחי הם שני דברים שונים.

answer
tone

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

מצב אחרון אינו זרם אירועים

מבט מלמעלה אל הקוד של xo.redis: כתיבה, הודעה ועדכון עמית. קריאה נפרדת של הערך היא מסלול רביעי.

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

01 · STORE

הנתיב מחזיק ערך אחרון

הוק _update_ מסריאל ערך שאינו None ושומר אותו במפתח של הצומת. ה־SET הזה אינו כשלעצמו ארכיון של כל המעברים.

val = pk.dumps(value)
r = self._getRoot()._redis
res = r.set(self._id, val)
02 · NOTIFY

הודעה נושאת את הערך

מיד אחרי SET נקראת PUBLISH עם אותו מטען מסוריאל. אלו שתי קריאות נפרדות; הקובץ אינו עוטף אותן בטרנזקציה משותפת.

r.publish(self._id, val)
return True
03 · APPLY

עמית מעדכן את הצומת

ה־handler מאתר נתיב מתוך שם הערוץ, מפענח את מטען ההודעה ומעדכן מקומית עם דגל דילוג על עדכון. כאן הוא אינו מבצע GET לכל הודעה.

res = msg["data"]
res = pk.loads(res)
f._setValue(res, skipUpdate=True)
ומה אם קוראים את הערך? מתודת _read_ מבצעת בנפרד r.get(self._id), מפענחת ומעדכנת את הצומת המקומי. זו קריאת מצב אחרון — לא replay של ההודעות שהוחמצו. מסלול הקריאה בקוד ↗

שני מקרי קצה שמגלים את החוזה

  • אם SET הצליח והתהליך נפל לפני PUBLISH, ייתכן שהערך נשמר בלי שפורסמה עליו הודעה.
  • עמית שלא היה מנוי בזמן הפרסום אינו מקבל כאן מנגנון replay. GET מאוחר עשוי להחזיר ערך חדש יותר, בלי לשחזר כל מצב ביניים.

הקטנות שמערכת אמיתית חייבת להגדיר

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

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

מתי XO היה הכי אלגנטי?

שלוש תשובות לשאלות שונות. זו הערכה הנדסית מנומקת, לא דירוג שנמדד בבנצ׳מרק.

2022—2023 · THE PRIMITIVE

עץ תגובתי, גבול קטן

הפרדת Expando ממתאם Redis מראה כמה מעט נדרש כדי להפוך השמה מקומית למצב משותף. נוסחאות עצלות כבר הופיעו ב־2022.

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

FEB 2024 · THE EXPRESSION

אותה כתובת, עוד יכולת

ערך וילדים, פונקציה, מנוי ו־Redis נפגשים סביב נתיב והוק שינוי. נקודת 15 בפברואר היא מועמדת חזקה לאלגנטיות מושגית; סוף החודש מציג דמו רחב.

המחיר: הליבה כבר כללה אלפי שורות, תחביר קסום ותופעות לוואי. קריאות מסוימות יוצרות מצב; התראות אינן תמיד אירוע אחרי commit.

AUG 2026 · THE CONTRACT

גבולות מפורשים למערכת

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

המחיר: זו אינה תאימות מלאה ל־Benedict או לענפי זיכרון ברמת צומת. יש יותר טקסיות, וסמנטיקת history שונה.

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

מה ידוע — ומה עדיין פתוח

ראיות לפני הבטחות

  • העוגן המוקדם שנמצא הוא ינואר 2020. תחילת 2019 טרם הוכחה.
  • קוד קיים, דמו שמור ומערכת שפועלת היום הם שלוש רמות ראיה שונות.
  • ניסוי תעבורה גולמית ב־ZeroMQ אינו בנצ׳מרק של כל XO, Redis או ממשק המשתמש.
  • עץ נתונים אינו אוטומטית היסטוריה. גרסאות מוקדמות שמרו בעיקר ערך אחרון.

המחקר ממשיך

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

הפעימות הבאות ירחיבו את מפת הסוגים, דוגמאות השירותים והיישומים, ויבדילו באופן חד יותר בין קוד שהופץ, הרחבות מקומיות וחזון.

מקורות ראשוניים

הקישורים מובילים למאגרים ציבוריים או לצילומי קוד מתוארכים. ציוני דרך היסטוריים אינם המלצת התקנה.