Վերադառնալ
Neomacs՝ GPU-ով աշխատող Rust-ով գրված GNU Emacs-ի պատառաքաղ
SiTech AI Team3 წთ. საკითხავი

Neomacs՝ GPU-ով աշխատող Rust-ով գրված GNU Emacs-ի պատառաքաղ

Eval Exec-ը GitHub-ում հրապարակել է Neomacs-ը՝ GNU Emacs-ի կոշտ պատառաքաղը, որը դեռ անավարտ է։ Մոտ 300 հազար տող C միջուկը վերագրվել է Rust-ով, իսկ արտապատկերումը տեղափոխվել է GPU։ Նպատակը ամբողջական համատեղելիությունն է կարգավորումների ու փաթեթների հետ։

NEO Emacs կամ Neomacs, GNU Emacs-ի անավարտ պատառաքաղն է, որը ծրագրավորող Eval Exec-ը հրապարակել է GitHub-ում։ Նախագիծը պահպանում է այն ամենը, ինչին օգտատերերն արդեն սովոր են՝ init.el-ը, փաթեթները և ստեղնաշարային սովորությունները։ Ներսի մեխանիզմը, սակայն, վերակառուցվել է. արտապատկերումն աշխատում է GPU-ի վրա, իսկ մոտ 300 հազար տող C միջուկը վերագրվել է Rust-ով։

Ըստ պահոցի՝ թողարկված neomacs բինարում C միջուկ այլևս չկա. Elisp-ի մեկնարկիչը, բայթկոդ VM-ը, աղբահավաքը, տեղափոխելի dump-ը, բուֆերները, պատուհանները, ստեղնաշարի մշակումը, պրոցեսները, դասավորությունը և արտապատկերումը գրված են Rust-ով։ lisp պանակը, այսինքն խմբագրիչի Elisp մասը, վերցված է GNU Emacs-ից և համաժամեցվում է emacs-31 զարգացման գծի հետ։

GPU շարժիչը՝ առանձին թելում

Ճարտարապետությունը աշխատանքը բաժանում է երկու թելի միջև. Emacs-ի թելը տիրապետում է Elisp-ի միջավայրին և խմբագրիչի վիճակին, իսկ արտապատկերման թելը՝ GPU-ին։ Արտապատկերման շարժիչը կառուցված է wgpu-ի վրա, որն ընդգրկում է Vulkan, Metal, DX12 և OpenGL։ xdisp.c-ի մոտ 50 հազար տողին փոխարինում է Rust-ի մոտ 4 հազար տողը։ Բուֆերներում կարելի է ցուցադրել մեդիա. ներտող 4K տեսանյութ GStreamer-ով, GPU-ով վերծանված պատկերներ, WPE WebKit դիտարկիչ և GPU տերմինալ։ Առանձին անիմացիաների շերտը առաջարկում է կուրսորի ութ ռեժիմ, պտտման 21 էֆեկտ և բուֆերների միջև տասը անցում, որոնք կարգավորվում են Elisp-ից։

Ինչու պատառաքաղ, ոչ թե զրոյից գրել

Հաճախ տրվող հարցերի բաժնում նախագիծը նկարագրվում է որպես 40-ամյա C կոդային բազա, որը չի հասցրել ժամանակակից սարքավորումներին։ Նշված խնդիրների թվում են միայն պրոցեսորով աշխատող արտապատկերումը, տեսանյութի ներկառուցված նվագարկման բացակայությունը և պարապ GPU-ն։ Ըստ նախագծի՝ Elisp-ին պակասում են inline caching-ը և գործարկման պահի JIT օպտիմիզացիան, իսկ աղբահավաքը կանգնեցնում է ամբողջ ծրագիրը։ Քանի որ Elisp-ը աշխատում է մեկ թելում, մեկ դանդաղ կանչը սառեցնում է ողջ խմբագրիչը։ Առանձին խնդիր են մեծ ֆայլերը. ամբողջ ֆայլը պահվում է մեկ gap buffer-ում, ուստի հարյուր մեգաբայթանոց log-ը միևնույն է կասեցնում է խմբագրիչը։

Զրոյից գրելու փոխարեն պատառաքաղ անելը գիտակցված որոշում է. GNU Emacs-ը նախագծում մնում է որպես հղում և թեստային oracle։ Oracle թեստերը, TUI ցանցի համեմատությունները և GUI համարժեքության ստուգումները անընդհատ համեմատում են Neomacs-ը GNU Emacs-ի հետ, որպեսզի Rust-ով վերագրված յուրաքանչյուր մաս ունենա նույնական վարք։ Ըստ նախագծի՝ փոփոխություններն այնքան խորն են, որ երբեք չեն ընդունվի upstream-ում, այդ իսկ պատճառով Neomacs-ը կոչվում է hard fork։

Վիճակը և համատեղելիությունը

Neomacs-ը բացահայտ նշված է որպես alpha. README-ն զգուշացնում է կոպիտ եզրերի, համատեղելիությունը խախտող թարմացումների և բացակայող հնարավորությունների մասին։ Հայտարարված պայմանագիրը դիտելի վարքում՝ իմաստաբանության, աշխատանքի և տրամաբանական ցուցադրման մեջ 100% համատեղելիությունն է, իսկ այդ սահմանից ներքև՝ ավելի լավը լինելու ազատությունը։ Հաջորդ նպատակներն են իսկական բազմաթել Elisp-ը և զուգահեռ, առանց դադարի աղբահավաքը։ Նույն բինարը արտապատկերում է թե՛ GPU-ի վրա, թե՛ տերմինալում, իսկ amd64-ի և arm64-ի համար պատրաստ իմիջները հրապարակված են Docker Hub-ում և GitHub Container Registry-ում։ Հոդվածը գրելու պահին պահոցն ուներ մոտ 1 177 աստղ և 47 պատառաքաղ։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։