תערוכה
SHEET-DOS — מערכת הפעלה שחיה בתוך גיליון
מסך טקסט של 118 על 40 תווים. חלונות עם סדר עומק, טרמינל עם היסטוריה, שעון עם מחוגים, מוניטור מערכת ומשחק החיים של קונוויי. אין מאקרו, אין VBA, אין תוספים. כל תו על המסך הוא תא, וכל תא הוא נוסחה.
- 33,704נוסחאות
- 0מאקרו
- 0שורות VBA
- 4,720תאים על המסך
הפקודות נכתבות לתוך ארבעה־עשר תאים רגילים — D48:D61 — והגיליון מחושב מחדש. לחצו על תא כלשהו במסך כדי לראות את הנוסחה שיושבת מאחוריו.
מה בעצם רץ פה
הדפדפן שלכם מחזיק עכשיו חוברת עבודה של אקסל עם 46,352 תאים, מחשב אותה מחדש כל שנייה, ומצייר את התוצאה. אין כאן אמולציה של אקסל שמריצה משהו אחר: המסך הוא הגיליון. מנוע הנוסחאות שכתוב לעמוד הזה נבדק מול LibreOffice — כל 4,720 התווים וכל 4,720 ערכי הצבע יוצאים זהים.
1 · המסך הוא framebuffer
חומרת טקסט אמיתית מחזיקה שתי רשתות: אחת עם התו שבכל מיקום, ואחת עם הצבע שלו. SHEET-DOS עושה בדיוק את זה. שורות 3 עד 42 הן חוצץ התווים, שורות 103 עד 142 הן חוצץ התכונות — בדיוק מאה שורות מתחת לתאים שלהן.
הצבע מגיע מ־48 כללי עיצוב מותנה, כל אחד קורא את תא התכונה מאה שורות למטה: B103=3 זה טקסט שחור על ירוק זרחני, כלומר שורת כותרת של חלון בפוקוס. שש־עשרה תכונות, שלוש ערכות. הפקודה theme amber מוסיפה עשרים לכל תכונה בחוצץ, וקבוצת כללים אחרת משתלטת. התווים עצמם לא זזים.
2 · החלונות הם שורות בטבלה
לכל חלון יש שורה עם x, y, רוחב, גובה, דגל פתיחה וסדר עומק. שום דבר לא מצויר, לא מקובץ ולא צף. כל תא על המסך שואל שאלה אחת: מבין החלונות שמכסים אותי, מי למעלה? סדר העומק ומספר החלון נדחסים למפתח אחד, כדי ש־MAX יחיד יוכל לענות:
=SUMPRODUCT(MAX(WIN_OPEN*(WIN_X<=B$2)*(WIN_X+WIN_W>B$2)
*(WIN_Y<=$A3)*(WIN_Y+WIN_H>$A3)*WIN_KEY))
MOD ב־100 ויש לכם את החלון הבעלים. תא שאף חלון לא לקח בודק את אותו חוצץ שורה למעלה ועמודה שמאלה — ואם יש שם חלון, התא הזה הוא הצל שלו. זה כל מנהל החלונות.
3 · הקונסולה היא INDEX ו־LOOKUP
שורת הפקודה שמתחת למסך היא ארבעה־עשר תאים. הקרנל מפצל כל אחד לפועל ולארגומנט ומקפל את כל הרשימה למצב. חלון פתוח אם הפקודה האחרונה שהזכירה אותו לא הייתה close:
=LOOKUP(2,1/((CMD_ARG=$B5)*((CMD_VERB="open")+(CMD_VERB="close")
+(CMD_VERB="focus"))),CMD_VERB)
LOOKUP(2,1/תנאי) הוא התרגיל הישן למציאת ההתאמה האחרונה ברשימה. כאן הוא גם עושה סדר עומק: מספר השורה של ה־open האחרון הופך ל־z של החלון, ולכן פתיחה מרימה חלון מעל כל השאר.
4 · והאפליקציות
- טרמינל — scrollback אמיתי. כל פקודה תורמת שורת פרומפט ועוד כמה שורות פלט שהיא צריכה; סכום רץ מתרגם שורת מסך לפקודה ולהיסט בתוכה.
- שעון — המחוגים מצוירים בגאומטריה. כל תא יודע את ההיסט שלו מהמרכז בפיקסלים ובודק אם הוא נופל בתוך הרוחב והאורך של מחוג שמצביע על
NOW(). יחס הצדדים של תא, 7.41 על 17.01, מתוקן בנוסחה — אחרת החוגה הייתה ביצה. - משחק החיים — דור 1 הוא נתונים. דורות 2 עד 30 הם שתים־עשרה אלף נוסחאות, כל אחת סוכמת את תשעת התאים שמעליה בדור הקודם.
- מוניטור — הטלמטריה סינתטית, סכום של סינוסים על השעון. הגרף שמצייר אותה לא.
- מחשבון — מפרסר טקסט שהקלדתם, מוצא את האופרטור, ומראה את התוצאה בארבעה בסיסים.
למה זה בכלל מעניין
זו לא דרך טובה לבנות מערכת הפעלה. זו בדיוק הנקודה. גיליון אלקטרוני הוא סביבת ריצה תגובתית כללית שכבר פתוחה אצל שישים מיליון אנשים. מי שיודע לחשוב בה — לפרק תהליך למצב, לכללים ולתלויות — בונה בה דברים שאף אחד לא התכוון שאפשר. הכלי אף פעם לא היה המגבלה.