Баррасии эмуляторҳои терминал

Якчанд сухан аз бюрои тарчимаи мо: одатан хар кас кушиш мекунад, ки материалу нашрхои навтаринро тарчима кунад ва мо низ истисно нестем. Аммо терминалҳо чизе нестанд, ки дар як ҳафта як маротиба нав карда шаванд. Аз ин рӯ, мо барои шумо мақолаи Антуан Бопреро, ки дар баҳори соли 2018 нашр шудааст, тарҷума кардем: сарфи назар аз "синну сол" аз рӯи меъёрҳои муосир, ба андешаи мо, мавод умуман аҳамияти худро гум накардааст. Илова бар ин, ин дар ибтидо як силсилаи ду мақола буд, аммо мо тасмим гирифтем, ки онҳоро дар як паёми калон муттаҳид кунем.

Баррасии эмуляторҳои терминал

Терминалҳо дар таърихи компютер ҷои махсус доранд, аммо дар даҳсолаҳои охир онҳо маҷбур шуданд, ки дар баробари хати фармон зинда монад, зеро интерфейсҳои графикӣ дар ҳама ҷо паҳн мешаванд. Эмуляторҳои терминал худро иваз карданд бародарони сахтафзор, ки дар навбати худ, дигаргунсозии системаҳо дар асоси перфокартаҳо ва коммутаторҳо буданд. Тақсимоти муосир бо эмуляторҳои гуногуни терминалии ҳама шакл ва рангҳо оварда мешаванд. Ва дар ҳоле, ки бисёриҳо аз терминали стандартии аз ҷониби муҳити кории худ таъминшуда қаноатманданд, баъзеҳо бо ифтихор нармафзори экзотикиро истифода мебаранд, то муҳаррири матнии дӯстдоштаи худро иҷро кунанд. Аммо, тавре ки мо аз ин мақола мебинем, на ҳама терминалҳо дар як тасвир сохта шудаанд: онҳо аз ҷиҳати функсия, андоза ва иҷроиш хеле фарқ мекунанд.

Баъзе терминалҳо сӯрохиҳои бехатарии ҳайратангез доранд, инчунин аксари онҳо маҷмӯи комилан гуногуни вазифаҳо доранд, аз дастгирии интерфейси ҷадвалбандӣ то скрипт. Гарчанде ки мо ба эмуляторҳои терминал дар гузаштаи дур нигоҳ кард, ин мақола навсозии маводи қаблӣ мебошад, ки ба хонандагон дар муайян кардани кадом терминал дар соли 2018 кӯмак мекунад. Дар нимаи аввали мақола хусусиятҳо муқоиса карда мешаванд ва дар нимаи дуюми он баҳо дода мешавад.

Инҳоянд терминалҳое, ки ман дида будам:

Баррасии эмуляторҳои терминал

Инҳо шояд версияҳои охирин набошанд, зеро ҳангоми навиштан ман бо сохтани устувор маҳдуд будам, ки ман тавонистам онро дар Debian 9 ё Fedora 27 паҳн кунам. Ягона истисно Alacritty аст. Он насли терминалҳои суръатбахши GPU аст ва бо забони ғайриоддӣ ва нав барои ин вазифа навишта шудааст - Rust. Ман веб терминалҳоро аз баррасии худ хориҷ кардам (аз ҷумла онҳое, ки дар Electron), зеро санчишхои пешакй кори нихоят пасти онхоро нишон доданд.

Дастгирии Юникод

Ман санҷишҳои худро бо дастгирии Юникод оғоз кардам. Санҷиши аввалини терминалҳо намоиш додани сатри Юникод аз Мақолаҳои Википедиа: "é, Δ, И, ק, م, ๗, あ, 叶, 葉 ва 말." Ин санҷиши оддӣ нишон медиҳад, ки оё терминал метавонад дар саросари ҷаҳон дуруст кор кунад. терминали xterm аломати арабиро намоиш намедиҳад Мем дар конфигуратсияи пешфарз:

Баррасии эмуляторҳои терминал

Бо нобаёнӣ, xterm шрифти классикии "собит" -ро истифода мебарад, ки мувофиқи он то ҳол ҳамон Вики, "аз соли 1997 фарогирии назарраси Юникод" дорад. Дар ин шрифт чизе рух медиҳад, ки боиси он мегардад, ки аломат ҳамчун чаҳорчӯбаи холӣ пайдо шавад ва танҳо вақте ки ҳуруфи матн то 20+ нуқта зиёд карда мешавад, аломат ниҳоят ба намоиши дуруст оғоз мекунад. Аммо, ин "ислоҳ" намоиши дигар аломатҳои Юникодро вайрон мекунад:

Баррасии эмуляторҳои терминал

Ин скриншотҳо дар Fedora 27 гирифта шудаанд, зеро он нисбат ба Debian 9 натиҷаҳои беҳтар дод, ки дар он баъзе версияҳои кӯҳнаи терминалҳо (махсусан mlterm) шрифтҳоро дуруст идора карда наметавонистанд. Хушбахтона, ин дар версияҳои баъдӣ ислоҳ карда шуд.

Акнун бубинед, ки хат дар xterm чӣ гуна нишон дода мешавад. Маълум мешавад, ки рамзи Mem ва семитии зерин қоф ба скриптҳои услуби RTL муроҷиат кунед (аз рост ба чап), аз ҷиҳати техникӣ онҳо бояд аз рост ба чап нишон дода шаванд. Веб-браузерҳо ба монанди Firefox 57 сатри болоро дуруст кор мекунанд. Варианти соддатари матни RTL калимаи "Сара" дар ибрӣ (שרה). Саҳифаи Wiki дар матнҳои дуҷониба чунин мегуяд:

"Бисёр барномаҳои компютерӣ наметавонанд матни дуҷонибаро дуруст нишон диҳанд. Масалан, номи ибронии "Сара" аз аломатҳои sin (ש) (ки дар тарафи рост пайдо мешавад), сипас resh (ר) ва дар ниҳоят ӯ (ה) (ки бояд дар тарафи чап пайдо шавад) иборат аст."

Бисёр терминалҳо аз ин санҷиш ноком мешаванд: терминалҳои Alacritty, Gnome ва XFCE аз VTE гирифташуда, urxvt, st ва xterm "Sara"-ро бо тартиби баръакс нишон медиҳанд, гӯё ки мо номро ҳамчун "Арас" навиштаем.

Баррасии эмуляторҳои терминал

Мушкилоти дигар бо матнҳои дуҷониба дар он аст, ки онҳо бояд бо ягон роҳ мувофиқ карда шаванд, хусусан вақте ки сухан дар бораи омехта кардани матнҳои RTL ва LTR меравад. Скриптҳои RTL бояд аз тарафи рости равзанаи терминал кор кунанд, аммо барои терминалҳое, ки ба забони LTR English пешфарз ҳастанд, чӣ мешавад? Аксарияти онҳо ягон механизми махсус надоранд ва ҳама матнро ба чап мувофиқат мекунанд (аз ҷумла дар Konsole). Истисноҳо pterm ва mlterm мебошанд, ки ба стандартҳо мувофиқат мекунанд ва чунин хатҳоро ба рост мувофиқ мекунанд.

Баррасии эмуляторҳои терминал

Муҳофизати воридшавӣ

Хусусияти навбатии муҳиме, ки ман муайян кардам, муҳофизати зидди воридкунӣ мебошад. Гарчанде ки он ба таври васеъ маълум аст, ки имло чунин аст:

$ curl http://example.com/ | sh

фармонҳои пахшкунии коди иҷрошаванда мебошанд, кам одамон медонанд, ки фармонҳои пинҳонӣ ҳангоми нусхабардорӣ ва часбондан аз браузери веб ҳатто пас аз санҷиши дақиқ метавонанд ба консол ворид шаванд. Сайти тасдиқи Gianna Horna Ба таври олиҷаноб нишон медиҳад, ки фармон то чӣ андоза безарар аст:

git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git

Вақте ки аз вебсайти Horn ба терминал часбонед, ба чунин нороҳатӣ табдил меёбад:

git clone /dev/null;
    clear;
	echo -n "Hello ";
	whoami|tr -d 'n';
	echo -e '!nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust! 
	Here'"'"'s the first line of your /etc/passwd: ';
	head -n1 /etc/passwd
	git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

Он чӣ гуна кор мекунад? Рамзи зараровар ба блок дохил карда шудааст , ки бо истифода аз CSS аз назари корбар хориҷ карда мешавад.

Ҳолати часбонидан ба қавс барои безарар гардондани ин гуна хучумхо равшан пешбинй шудааст. Дар ин реҷа, терминалҳо матни часпонидашударо ба як ҷуфт пайдарпаии махсуси фирорӣ иҳота мекунанд, то ба ҷабҳа дар бораи пайдоиши матн нақл кунанд. Ин ба ҷабҳа мегӯяд, ки он метавонад аломатҳои махсусеро, ки матни часпондашуда дар бар мегирад, сарфи назар кунад. Ҳама терминалҳои бозгашт ба xterm мӯҳтарам ин хусусиятро дастгирӣ мекунанд, аммо часбондан дар реҷаи қавсаро дастгирӣ аз қабат ё барномае, ки дар терминал кор мекунад, талаб мекунад. Масалан, истифодаи нармафзор GNU Readline (ҳамон Bash), файл лозим аст ~/.inputrc:

set enable-bracketed-paste on

Мутаассифона, сайти санҷишии Хорн инчунин нишон медиҳад, ки чӣ гуна ин муҳофизатро тавассути худи форматкунии матн гузарад ва бармаҳал ба кор бурдани режими қавсаро ба он анҷом диҳад. Ин кор мекунад, зеро баъзе терминалҳо пеш аз илова кардани худ, пайдарпайии фирорро дуруст филтр намекунанд. Масалан, ман ҳеҷ гоҳ натавонистам санҷишҳои Konsole-ро ҳатто бо конфигуратсияи дуруст бомуваффақият анҷом диҳам .inputrc файл. Ин маънои онро дорад, ки шумо метавонед ба осонӣ конфигуратсияи системаи худро бо сабаби барномаи дастгирӣнашаванда ё қабати нодуруст танзимшуда вайрон кунед. Ин махсусан ҳангоми ворид шудан ба серверҳои дурдаст хатарнок аст, ки дар он ҷо кори конфигуратсияи бодиққат камтар маъмул аст, хусусан агар шумо чунин мошинҳои дурдаст зиёд дошта бошед.

Ҳалли хуби ин мушкилот плагини тасдиқи часбонӣ барои терминал мебошад urxvt, ки танҳо барои ворид кардани ҳар як матне, ки дорои сатрҳои нав аст, иҷозат мепурсад. Ман барои ҳамлаи матние, ки Хорн тавсиф кардааст, як варианти бехатартаре наёфтам.

Ҷадвалҳо ва профилҳо

Ҳоло як хусусияти маъмул ин дастгирии интерфейси ҷадвалбандӣ мебошад, ки мо онро ҳамчун як равзанаи терминали дорои якчанд терминалҳои дигар муайян мекунем. Ин функсия барои терминалҳои гуногун фарқ мекунад ва гарчанде ки терминалҳои анъанавии xterm ҷадвалҳоро умуман дастгирӣ намекунанд, инкарнатсияҳои муосиртари терминал ба монанди Xfce Terminal, GNOME Terminal ва Konsole ин вазифаро доранд. Urxvt инчунин ҷадвалҳоро дастгирӣ мекунад, аммо танҳо агар шумо плагинро истифода баред. Аммо аз нуқтаи назари дастгирии ҷадвалҳо, Terminator пешвои бебаҳс аст: он на танҳо ҷадвалҳоро дастгирӣ мекунад, балки инчунин метавонад терминалҳоро бо ҳама гуна тартиб ҷойгир кунад (нигаред ба тасвири дар поён).

Баррасии эмуляторҳои терминал

Хусусияти дигари Terminator ин қобилияти "гурӯҳ" кардани ин ҷадвалҳо ва фиристодани тугмаҳои якхела ба якчанд терминалҳо мебошад, ки асбоби хомро барои иҷрои амалиёти оммавӣ дар як вақт дар серверҳои сершумор таъмин мекунад. Хусусияти шабеҳ дар Konsole низ амалӣ карда мешавад. Барои истифодаи ин хусусият дар терминалҳои дигар, шумо бояд нармафзори тарафи сеюмро истифода баред, масалан Кластери SSH, xlax ё tmux.

Ҷадвалҳо махсусан ҳангоми ҷуфт кардани профилҳо хуб кор мекунанд: масалан, шумо метавонед як ҷадвалро барои почтаи электронӣ, дигаре барои сӯҳбат ва ғайра дошта бошед. Ин аз ҷониби Terminal Konsole ва Terminal GNOME хуб дастгирӣ карда мешавад. Ҳарду имкон медиҳанд, ки ҳар як ҷадвал профили худро ба таври худкор оғоз кунад. Терминатор инчунин профилҳоро дастгирӣ мекунад, аммо ман роҳи ба таври худкор оғоз кардани барномаҳои муайянро ҳангоми кушодани ҷадвали мушаххас пайдо карда натавонистам. Дигар терминалҳо умуман мафҳуми “профил” надоранд.

Руфлҳо

Охирин чизе, ки ман дар қисми аввали ин мақола мефаҳмам, намуди терминалҳост. Масалан, GNOME, Xfce ва urxvt шаффофиятро дастгирӣ мекунанд, аммо ба наздикӣ дастгирии тасвирҳои пасзаминаро қатъ карданд ва баъзе корбаронро маҷбур карданд, ки ба терминал гузаранд Тилик. Шахсан ман аз он қаноатмандам ва ин содда аст Сарчашмаҳо, ки маҷмӯи асосии рангҳои заминаро барои urxvt муқаррар мекунад. Аммо, мавзӯъҳои рангҳои ғайристандартӣ низ метавонанд мушкилот эҷод кунанд. Барои намуна, Офтобӣ кор намекунад бо барномаҳо htop и IPTraf, зеро онҳо аллакай рангҳои худро истифода мебаранд.

Терминали аслии VT100 рангҳоро дастгирӣ намекарданд ва рангҳои нав аксар вақт бо палитраи 256 ранг маҳдуд мешуданд. Барои корбарони пешрафтае, ки терминалҳои худро тарҳрезӣ мекунанд, дархостҳои ҷабҳа ё сатри ҳолатиро бо роҳҳои мураккаб метавонанд як маҳдудияти озорикунанда бошанд. Гист пайгирӣ мекунад, ки терминалҳо "Ранги ҳақиқӣ"-ро дастгирӣ мекунанд. Санҷишҳои ман тасдиқ мекунанд, ки терминалҳои ба st, Alacritty ва VTE асосёфта True Color-ро комилан дастгирӣ мекунанд. Дигар терминалҳо дар ин бобат чандон хуб нестанд ва дарвоқеъ ҳатто 256 рангро намоиш намедиҳанд. Дар зер шумо фарқияти байни дастгирии ранги ҳақиқиро дар терминалҳои GNOME, st ва xterm, ки бо 256 палитраи рангҳои худ кори хуб мекунанд ва urxvt-ро мебинед, ки на танҳо аз санҷиш ноком мешавад, балки ҳатто ба ҷои онҳо аломатҳои чашмакзаниро нишон медиҳад.

Баррасии эмуляторҳои терминал

Баъзе терминалҳо инчунин матнро барои намунаҳои URL таҳлил мекунанд, то истинодҳоро клик карда тавонанд. Ин ба ҳама терминалҳои аз VTE гирифташуда дахл дорад, дар ҳоле ки urxvt плагини махсусро талаб мекунад, ки URL-ро бо як клик ё бо истифода аз миёнабурҳои клавиатура табдил медиҳад. Дигар терминалҳое, ки ман URL-ро бо роҳҳои дигар санҷидам.

Ниҳоят, тамоюли нав дар терминалҳо ихтиёрии буфери ҳаракаткунанда мебошад. Масалан, st буфери ҳаракаткунанда надорад; тахмин карда мешавад, ки корбар як мултиплекси терминалро ба монанди tmux ва Экрани GNU.

Alacritty низ намерасад буферҳои backscroll, аммо ба зудӣ илова карда мешавад дастгирии он аз сабаби "фикри васеъ" дар ин мавзӯъ аз ҷониби корбарон. Ба ғайр аз ин оғозёбӣ, ҳар як терминали санҷидаам, ки ман метавонам паймоиши баръаксро дастгирӣ кунам.

Мобайнҳо

Дар қисми дуюми мавод (дар асл ин ду мақолаи гуногун буданд - тақрибан. хати) мо иҷрои кор, истифодаи хотира ва таъхирро муқоиса хоҳем кард. Аммо мо аллакай мебинем, ки баъзе терминалҳои мавриди назар камбудиҳои ҷиддӣ доранд. Масалан, корбароне, ки мунтазам бо скриптҳои RTL кор мекунанд, метавонанд мехоҳанд mlterm ва pterm-ро баррасӣ кунанд, зеро онҳо нисбат ба дигарон дар иҷрои вазифаҳои шабеҳ беҳтаранд. Консол хам нагз баромад кард. Истифодабарандагоне, ки бо скриптҳои RTL кор намекунанд, метавонанд чизи дигареро интихоб кунанд.

Дар робита ба муҳофизат аз ворид кардани коди зараровар, urxvt аз сабаби татбиқи махсуси муҳофизат аз ин намуди ҳамла, ки барои ман бешубҳа қулай аст, фарқ мекунад. Барои онҳое, ки зангӯла ва ҳуштакҳоро меҷӯянд, Консол сазовори дидан аст. Дар ниҳоят, бояд қайд кард, ки VTE як пойгоҳи аъло барои терминалҳо мебошад, ки дастгирии рангҳо, шинохти URL ва ғайраро кафолат медиҳад. Дар назари аввал, терминали пешфарз, ки бо муҳити дӯстдоштаи шумо меояд, метавонад ба ҳама талабот ҷавобгӯ бошад, аммо биёед ин саволро то он даме, ки мо иҷрои онро фаҳмем, кушода монем.

Биёед сӯҳбатро идома диҳем


Дар маҷмӯъ, иҷрои терминалҳо дар худ метавонад як мушкили дурдаст ба назар расад, аммо тавре маълум мешавад, баъзеи онҳо барои нармафзори чунин навъи бунёдӣ таъхири ҳайратангези баланд доранд. Инчунин дар оянда мо ба он чизе, ки ба таври анъанавӣ "суръат" номида мешавад (воқеан, ин суръати ҳаракат аст) ва истеъмоли хотираи терминалро дида мебароем (бо огоҳии он, ки ин имрӯз мисли даҳсолаҳои пеш муҳим нест).

Таъхир

Пас аз омӯзиши ҳамаҷонибаи иҷрои терминал, ман ба хулосае омадам, ки параметри муҳимтарин дар ин замина таъхир (ping) аст. Дар маколаи худ "Мо бо хушнудӣ чоп мекунем" Павел Фатин ба таъхири муҳаррирони матнии гуногун назар кард ва ишора кард, ки терминалҳо дар ин замина метавонад нисбат ба муҳаррирони матнии тезтар сусттар бошанд. Ин маслиҳат буд, ки дар ниҳоят маро водор кард, ки санҷишҳои шахсии худро гузаронам ва ин мақоларо нависам.

Аммо таъхир чист ва чаро он ин қадар муҳим аст? Фатин дар мақолаи худ онро ҳамчун "таъхир байни пахш кардани тугма ва навсозии мувофиқи экран" муайян кард ва иқтибос овард. "Дастур оид ба ҳамкории инсон ва компютер", ки мегӯяд: "Таъхир дар аксуламали визуалӣ дар экрани компютер ба рафтор ва қаноатмандии машинист таъсири муҳим дорад."

Фатин мефаҳмонад, ки ин пинг на танҳо қаноатмандӣ оқибатҳои амиқтар дорад: "навиштан сусттар мешавад, хатогиҳо бештар рух медиҳанд ва шиддати чашм ва мушакҳо меафзояд." Ба ибораи дигар, таъхири калон метавонад ба хатогиҳо ва инчунин паст шудани сифати код оварда расонад, зеро он ба сарбории иловагии маърифатӣ ба майна оварда мерасонад. Аммо бадтараш он аст, ки пинг "шиддати чашм ва мушакҳоро зиёд мекунад", ки ба назар чунин менамояд инкишофи ҷароҳатҳои касбӣ дар оянда (Эҳтимол, муаллиф мушкилоти мушакҳои чашм, пушт, дастҳо ва, албатта, бинишро дар назар дорад - тақрибан. хати) аз сабаби фишори такрорӣ.

Баъзе аз ин таъсирот барои муддати тӯлонӣ маълуманд ва натиҷаҳо тадқиқот, ки ҳанӯз соли 1976 дар маҷаллаи Ergonomics нашр шудааст, гуфта буд, ки таъхири 100 миллисония "суръати чопкуниро ба таври назаррас коҳиш медиҳад". Ба наздикӣ, дастури корбари GNOME муаррифӣ шуд вақти ҷавоби қобили қабул дар 10 миллисония ва агар шумо минбаъд равед, пас Таҳқиқоти Microsoft нишон медиҳад, ки 1 миллисония беҳтарин аст.

Фатин санҷишҳои худро дар таҳриркунандагони матн гузаронд; ба ном асбоби сайёр офаридааст Типометр, ки ман барои санҷиши пинг дар эмуляторҳои терминал истифода мебурдам. Дар хотир доред, ки санҷиш дар реҷаи симулятсия гузаронида шуд: дар асл, мо бояд ҳам таъхири вуруд (клавиатура, контроллер USB ва ғайра) ва баромади (буфери корти видео, монитор) ба назар гирем. Ба гуфтаи Фатин, дар конфигуратсияҳои маъмулӣ он тақрибан 20 мс аст. Агар шумо таҷҳизоти бозӣ дошта бошед, шумо метавонед ин рақамро дар тӯли 3 миллисония ба даст оред. Азбаски мо аллакай чунин сахтафзори зуд дорем, барнома набояд таъхири худро илова кунад. Ҳадафи Фатин ин аст, ки таъхири барномаро то 1 миллисония расонад ё ҳатто бидуни рақамзанӣ муваффақ шавад таъхири ченшавандачунон ки дар IntelliJ IDEA 15.

Инҳоянд натиҷаҳои андозагирии ман, инчунин баъзе натиҷаҳои Фатин, то нишон диҳанд, ки таҷрибаи ман бо санҷишҳои ӯ мувофиқ аст:

Баррасии эмуляторҳои терминал

Аввалин чизе, ки маро ба ҳайрат овард, вақти вокуниши беҳтари барномаҳои кӯҳна ба монанди xterm ва mlterm буд. Бо бадтарин таъхири сабти ном (2,4 мс), онҳо нисбат ба зудтаринтарин терминали муосир (10,6 мс барои st) беҳтар кор карданд. Ягон терминали муосир аз ҳадди 10 миллисония пасттар намеояд. Махсусан, Alacritty ба даъвои "тезтарин эмулятори терминали дастрас" ҷавобгӯ нест, гарчанде ки холҳои он пас аз баррасии аввалинаш дар соли 2017 беҳтар шудаанд. Дар хакикат, муаллифони лоиха аз вазъият бохабар ва барои такмил додани намоиш кор мекунанд. Инчунин бояд қайд кард, ки Vim бо истифода аз GTK3 нисбат ба ҳамтои GTK2 дараҷаи миқёс сусттар аст. Аз ин хулоса баровардан мумкин аст, ки GTK3 таъхири иловагиро эҷод мекунад ва ин дар ҳама терминалҳои дигаре, ки онро истифода мебаранд (Terminator, Xfce4 Terminal ва GNOME Terminal) инъикос ёфтааст.

Аммо, фарқиятҳо метавонанд ба чашм намоён набошанд. Тавре Фатин мефаҳмонад, "ба шумо лозим нест, ки аз таъхир огоҳ бошед, то он ба шумо таъсир расонад." Фатин инчунин дар бораи инҳирофоти стандартӣ ҳушдор медиҳад: "ҳар гуна ихтилоли латентӣ (jitter) аз сабаби пешгӯинашавандаи худ стресси иловагиро ба вуҷуд меорад."

Баррасии эмуляторҳои терминал

Графикаи дар боло овардашуда дар Debian 9 (дароз) бо тоза гирифта шудааст мудири равзанаи i3. Ин муҳит дар санҷишҳои таъхирнопазир натиҷаҳои беҳтарин медиҳад. Тавре маълум мешавад, GNOME барои ҳама ченакҳо як пинги иловагии 20 мс эҷод мекунад. Шарҳи имконпазири ин мавҷудияти барномаҳо бо коркарди синхронии рӯйдодҳои воридотӣ мебошад. Фатин барои чунин ходиса мисол меорад Меҳнатӣ, ки тавассути коркарди ҳама рӯйдодҳои вуруд ба таври синхронӣ таъхирро илова мекунад. Бо нобаёнӣ, GNOME инчунин бо мудири тиреза меояд Мутаассифона, ки қабати иловагии буфериро эҷод мекунад, ки ба пинг таъсир мерасонад ва ҳадди аққал 8 миллисония таъхирро илова мекунад.

Баррасии эмуляторҳои терминал

Суръати ҳаракат

Санҷиши навбатӣ санҷиши анъанавии "суръат" ё "барои фарохмаҷро" мебошад, ки чен мекунад, ки терминал то чӣ андоза зуд метавонад саҳифаро ҳангоми намоиши миқдори зиёди матн дар экран ҳаракат кунад. Механикаи санҷиш гуногун аст; санҷиши аслӣ танҳо тавлиди як сатри матн бо истифода аз фармони seq буд. Санҷишҳои дигар санҷиши Томас Э. Дикки (мутахассиси xterm) -ро дар бар мегиранд, ки такроран файли terminfo.src бор карда мешавад. Дар баррасии дигари иҷрои терминал Ден Лу сатри рамзгузоришудаи base32-и байтҳои тасодуфиро истифода мебарад, ки бо истифода аз cat ба терминал бароварда мешавад. Луу чунин санҷишро "ба андозае, ки тасаввур кардан мумкин аст, бефоида аст" мешуморад ва ба ҷои он истифодаи вокуниши терминалро ҳамчун метрикаи асосӣ пешниҳод мекунад. Дики инчунин санҷиши худро гумроҳкунанда меномад. Аммо, ҳарду муаллиф эътироф мекунанд, ки маҷрои равзанаи терминал метавонад мушкилот бошад. Луу яхкунии Emacs Eshell-ро ҳангоми намоиш додани файлҳои калон кашф кард ва Дики терминалро оптимизатсия кард, то аз сустии визуалии xtrerm халос шавад. Ҳамин тавр, барои ин санҷиш ҳанӯз ҳам бартарият вуҷуд дорад, аммо азбаски раванди коркард аз терминал ба терминал хеле фарқ мекунад, онро инчунин ҳамчун ҷузъи санҷиш барои санҷиши параметрҳои дигар истифода бурдан мумкин аст.

Баррасии эмуляторҳои терминал

Дар ин ҷо мо rxvt ва st-ро пеш аз рақобат мебинем, пас аз он Alacritty хеле навтар аст, ки бо таваҷҷӯҳ ба иҷроиш тарҳрезӣ шудааст. Дар оянда Xfce (оилаи VTE) ва Konsole мебошанд, ки қариб ду маротиба тезтаранд. Охирин xterm аст, ки аз rxvt панҷ маротиба сусттар аст. Ҳангоми санҷиш, xterm низ хеле печида буд, ки гузариши матнро душвор мегардонад, ҳатто агар он як сатр бошад. Konsole зуд буд, аммо баъзан душвор буд: дисплей гоҳ-гоҳ ях карда, матнро қисман нишон медод ё тамоман нишон намедиҳад. Дигар терминалҳо сатрҳоро равшан нишон доданд, аз ҷумла st, Alacritty ва rxvt.

Дикки мефаҳмонад, ки фарқиятҳои кор аз тарҳрезии буферҳои ҳаракаткунанда дар терминалҳои гуногун вобастаанд. Аз чумла, вай rxvt ва дигар терминалхоро ба «риоя накардани коидахои умумй» айбдор мекунад:

"Баръакси xterm, rxvt кӯшиш накард, ки ҳама навсозиро намоиш диҳад. Агар он қафо афтад, он баъзе навсозиҳои навсозиро рад мекунад. Ин назар ба ташкили хотираи дохилӣ ба суръати ҳаракати намоён таъсири бештаре дошт. Як нуқсон ин буд, ки аниматсияи ASCII то андозае номуайян буд."

Барои ислоҳ кардани ин сустии даркшудаи xterm, Дикки истифодаи захираро пешниҳод мекунад fastScroll, ба xterm имкон медиҳад, ки баъзе навсозиҳои экранро партофт, то бо ҷараён нигоҳ дошта шавад. Санҷишҳои ман тасдиқ мекунанд, ки fastScroll иҷроишро беҳтар мекунад ва xterm-ро бо rxvt баробар мекунад. Аммо, ин як асои хеле ноҳамвор аст, тавре ки худи Дикки мефаҳмонад: "баъзан xterm - ба монанди konsole - ба назар мерасад, зеро он маҷмӯи нави навсозиҳои экранро пас аз нест кардани баъзеҳо интизор мешавад." Аз ин рӯ, чунин ба назар мерасад, ки терминалҳои дигар беҳтарин созишро байни суръат ва якпорчагии намоиш пайдо кардаанд.

Истеъмоли захираҳо

Новобаста аз он, ки оё суръати ҳаракатро ҳамчун як метрикаи иҷроиш баррасӣ кардан маъно дорад, ин санҷиш ба мо имкон медиҳад, ки сарбориро дар терминалҳо тақлид кунем, ки дар навбати худ ба мо имкон медиҳад, ки параметрҳои дигарро ба монанди хотира ё истифодаи диск чен кунем. Метрикҳо тавассути гузаронидани санҷиши мушаххас ба даст оварда шуданд пайдарпай зери назорати раванди Python. Ӯ маълумоти ҳисобкунакҳоро ҷамъоварӣ кард getrusage () барои ru_maxrss, маблаг ru_oublock и ru_inblock ва таймери оддӣ.

Баррасии эмуляторҳои терминал

Дар ин санҷиш, ST бо камтарин истеъмоли хотираи миёнаи 8 МБ ҷои аввалро ишғол мекунад, ки ин тааҷҷубовар нест, зеро идеяи асосии тарроҳӣ содда аст. mlterm, xterm ва rxvt каме бештар истеъмол мекунанд - тақрибан 12 МБ. Натиҷаи дигари назаррас Alacritty аст, ки барои кор 30 МБ лозим аст. Сипас терминалҳои оилаи VTE бо рақамҳои аз 40 то 60 МБ мавҷуданд, ки ин хеле зиёд аст. Ин истеъмолро бо он шарҳ додан мумкин аст, ки ин терминалҳо аз китобхонаҳои сатҳи баландтар, масалан, GTK истифода мебаранд. Konsole бо истеъмоли зиёди хотираи 65 МБ ҳангоми санҷишҳо дар ҷои охир ҷойгир аст, гарчанде ки ин метавонад бо доираи васеи хусусиятҳои он асоснок карда шавад.

Дар муқоиса бо натиҷаҳои қаблии даҳ сол пеш, ҳама барномаҳо хотираи назаррасро бештар истеъмол карданд. Xterm пештар 4 МБ талаб мекард, аммо ҳоло танҳо ҳангоми оғозёбӣ 15 МБ талаб мекунад. Ҳамин гуна афзоиши истеъмол барои rxvt вуҷуд дорад, ки ҳоло 16 МБ аз қуттӣ талаб мекунад. Xfce Terminal 34 МБ-ро мегирад, ки нисбат ба пештара се маротиба калонтар аст, аммо GNOME Terminal ҳамагӣ 20 МБ талаб мекунад. Албатта, ҳама санҷишҳои қаблӣ дар меъмории 32-бит гузаронида шуданд. Дар LCA 2012 Rusty Russell гуфт, ки бисёр сабабҳои нозук бештар вуҷуд доранд, ки метавонанд афзоиши истеъмоли хотираро шарҳ диҳанд. Бо гуфтани ин, мо ҳоло дар замоне зиндагӣ мекунем, ки хотираи гигабайтҳо дорем, аз ин рӯ мо бо ягон роҳ идора мекунем.

Бо вуҷуди ин, ман наметавонам ҳис кунам, ки ҷудо кардани хотираи бештар ба чизи асосӣ ба мисли терминал сарфи беҳудаи захираҳо аст. Ин барномаҳо бояд хурдтарин аз ҳама хурдтарин бошанд, бояд дар ҳама гуна "қуттӣ", ҳатто қуттии пойафзол кор кунанд, агар мо ба он ҷое расем, ки онҳо бояд бо системаҳои Linux муҷаҳҳаз карда шаванд (ва шумо медонед, ки ин чунин хоҳад буд. ). Аммо бо ин рақамҳо, истифодаи хотира дар оянда дар ҳама гуна муҳите, ки бо терминалҳои сершумор, ғайр аз чанде аз сабуктарин ва маҳдудтарин қобилиятҳо кор мекунанд, мушкил хоҳад шуд. Барои ҷуброни ин, GNOME Terminal, Konsole, urxvt, Terminator ва Xfce Terminal дорои реҷаи Демон мебошанд, ки ба шумо имкон медиҳад, ки терминалҳои сершуморро тавассути як раванд идора карда, истеъмоли хотираи онҳоро маҳдуд кунед.

Баррасии эмуляторҳои терминал

Ҳангоми санҷишҳо ман ба як натиҷаи дигари ғайричашмдошт дар бораи хондан-навиштани диск омадам: Ман интизор будам, ки дар ин ҷо ҳеҷ чизро намебинам, аммо маълум шуд, ки баъзе терминалҳо маълумоти ҳаҷмтаринро ба диск менависанд. Ҳамин тавр, китобхонаи VTE воқеан буфери ҳаракатро дар диск нигоҳ медорад (ин хусусият соли 2010 мушоҳида шуда буд, ва ин ҳоло ҳам рӯй медиҳад). Аммо бар хилофи татбиқҳои кӯҳна, ҳоло ҳадди аққал ин маълумот бо истифода аз AES256 GCM (аз версияи 0.39.2). Аммо як саволи асоснок ба миён меояд: китобхонаи ВТЭ чӣ хос аст, ки барои татбиқи он чунин муносибати ғайристандартиро талаб мекунад...

хулоса

Дар қисми аввали мақола, мо дарёфтем, ки терминалҳои VTE дар асоси маҷмӯи хуби хусусиятҳо доранд, аммо ҳоло мо мебинем, ки ин бо баъзе хароҷоти иҷроиш меояд. Ҳоло хотира мушкилот нест, зеро ҳама терминалҳои VTE метавонанд тавассути раванди Демон назорат карда шаванд, ки иштиҳои онҳоро маҳдуд мекунад. Бо вуҷуди ин, системаҳои кӯҳна, ки дар ҳаҷми RAM ва буферҳои ядро ​​маҳдудиятҳои ҷисмонӣ доранд, метавонанд ба версияҳои қаблии терминалҳо ниёз дошта бошанд, зеро онҳо захираҳои хеле камтарро истеъмол мекунанд. Гарчанде ки терминалҳои VTE дар санҷишҳои гузаранда (пайравӣ) хуб кор карданд, таъхири намоиши онҳо аз ҳадди муқарраршуда дар Дастури корбари GNOME болотар аст. Эҳтимол, таҳиягарони VTE бояд инро ба назар гиранд. Агар мо ба назар гирем, ки ҳатто барои корбарони навгони Linux дучор шудан бо терминал ногузир аст, онҳо метавонанд онро ба корбарон осонтар созанд. Барои геикҳои ботаҷриба, гузариш аз терминали пешфарз метавонад ҳатто маънои камтар фишори чашм ва қобилияти пешгирӣ кардани ҷароҳатҳо ва бемориҳои вобаста ба кор бо сабаби ҷаласаҳои тӯлонии корӣ дошта бошад. Мутаассифона, танҳо xterm ва mlterm-и кӯҳна моро ба ҳадди пинги ҷодугарӣ 10 миллисония меорад, ки барои бисёриҳо қобили қабул нест.

Андозаҳои бенчмарк инчунин нишон доданд, ки аз сабаби таҳияи муҳити графикии Linux, таҳиягарон маҷбур шуданд як қатор созишҳо кунанд. Баъзе корбарон метавонанд ба менеҷерҳои муқаррарии тиреза назар андозанд, зеро онҳо коҳиши назарраси пингро таъмин мекунанд. Мутаассифона, чен кардани таъхир дар Wayland имконнопазир буд: барномаи Typometer, ки ман истифода мекардам, барои он сохта шудааст, ки Wayland барои пешгирӣ кардани он тарҳрезӣ шудааст: ҷосусӣ дар тирезаҳои дигар. Ман умедворам, ки Wayland compositing нисбат ба X.org беҳтар кор мекунад ва ман инчунин умедворам, ки дар оянда касе роҳи чен кардани таъхирро дар ин муҳит пайдо мекунад.

Манбаъ: will.com

Илова Эзоҳ