
Neomacs: פורק קשיח של GNU Emacs ב-Rust עם רינדור ב-GPU
המפתח Eval Exec פרסם ב-GitHub את Neomacs, פורק קשיח בשלבי עבודה של GNU Emacs. ליבת ה-C בת כ-300 אלף שורות נכתבה מחדש ב-Rust, והרינדור עבר ל-GPU דרך wgpu. המטרה המוצהרת היא תאימות מלאה לקונפיגורציות ולחבילות קיימות של Emacs.
NEO Emacs, או Neomacs, הוא פורק בשלבי עבודה של GNU Emacs שפרסם המפתח Eval Exec ב-GitHub. הפרויקט שומר על כל מה שהמשתמשים כבר מכירים: קובץ init.el, החבילות הקיימות וההרגלים במקלדת. מתחת למכסה, לעומת זאת, המכונה נבנתה מחדש: מנוע התצוגה רץ על ה-GPU, וליבת ה-C בת כ-300 אלף שורות נכתבה מחדש ב-Rust.
לפי המאגר, בקובץ הבינארי neomacs אין עוד ליבת C: מפרש Elisp, מכונת הבייט-קוד, אוסף האשפה, ה-dump הנייד, הבאפרים, החלונות, הטיפול במקלדת, התהליכים, הפריסה והרינדור כולם כתובים ב-Rust. ספריית lisp, כלומר חצי ה-Elisp של העורך, נשמרת מ-GNU Emacs ומסונכרנת עם קו הפיתוח emacs-31.
מנוע GPU בתהליכון נפרד
הארכיטקטורה מחלקת את העבודה בין שני תהליכונים: תהליכון Emacs מחזיק במנוע ההרצה של Elisp ובמצב העורך, ותהליכון הרינדור מחזיק ב-GPU. מנוע התצוגה בנוי על wgpu, שמכסה את Vulkan, Metal, DX12 ו-OpenGL, וכ-4,000 שורות Rust מחליפות כ-50 אלף שורות של xdisp.c. בבאפרים אפשר להציג מדיה: וידאו 4K מוטבע דרך GStreamer עם אינטגרציית VA-API ב-Linux, תמונות מפוענחות ב-GPU, דפדפן WPE WebKit ומסוף מבוסס GPU. שכבת אנימציות נפרדת מציעה שמונה מצבי סמן, 21 אפקט גלילה ועשר מעברים בין באפרים, הכול בקצב רענון המסך ועם תצורה מ-Elisp.
למה פורק ולא כתיבה מאפס
בשאלות הנפוצות מתואר Emacs כבסיס קוד ב-C בן 40 שנה שלא הדביק את הקצב של חומרה מודרנית. בין הבעיות המפורטות: רינדור על המעבד בלבד שתוכנן למסופי טקסט של שנות ה-80, טיפול איטי בתמונות גדולות, היעדר ניגון וידאו מובנה, היעדר אפקטים חזותיים חלקים ו-GPU שיושב בטל. לפי הפרויקט, ל-Elisp חסרים inline caching ואופטימיזציית JIT בזמן ריצה, ואוסף האשפה עוצר את כל התוכנית. מכיוון ש-Elisp רץ בתהליכון אחד, קריאה איטית אחת מקפיאה את כל העורך. קבצים גדולים ושורות ארוכות הם בעיה נפרדת: הקובץ כולו נשמר ב-gap buffer אחד, ולכן קובץ ממוזער בשורה אחת או לוג של מאה מגה-בייט עדיין תוקעים את העורך, חרף ההקלות שנוספו ב-Emacs 29.
הבחירה בפורק ולא בכתיבה מאפס היא מכוונת. GNU Emacs נשאר בפרויקט כהפניה וכאורקל בדיקות: חבילות אורקל, השוואות רשת TUI ובדיקות זהות GUI מצליבות את Neomacs מול GNU Emacs ללא הרף, כדי לוודא שכל חלק שנכתב מחדש ב-Rust מתנהג בדיוק אותו דבר. לפי הפרויקט, השינויים עמוקים מדי מכדי להתקבל אי פעם ב-upstream, ולכן Neomacs מוגדר פורק קשיח.
מצב ותאימות
Neomacs מסומן במפורש כאלפא וכפרויקט בעבודה: ה-README מזהיר מקצוות גסים, משינויים שוברי תאימות ומתכונות חסרות, ומבקש לדווח על באגים. ההבטחה המוצהרת היא תאימות מלאה של 100% בהתנהגות הנצפית, כלומר בסמנטיקה, בהתנהגות ובתצוגה הלוגית, עם חופש להשתפר מתחת לקו הזה, למשל בזמן עלייה מהיר יותר. היעדים הבאים הם Elisp אמיתי מרובה תהליכונים ואוסף אשפה מקביל וללא עצירות. אותו קובץ בינארי מרנדר גם על ה-GPU וגם במסוף (neomacs -nw), ותמונות מוכנות ל-amd64 ול-arm64 מפורסמות ב-Docker Hub וב-GitHub Container Registry. בזמן כתיבת הכתבה היו למאגר כ-1,177 כוכבים ו-47 פורקים.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.