Аввалин хатои ман ин буд, ки версияи худро аз версияи болоравии 2.4.1. Он гоҳ ба назари ман як идеяи хубе менамуд: агар релизи нуқта вуҷуд дошта бошад, пас он эҳтимолан аз 2.4 оддӣ устувортар аст ва ҳатто бештар аз он филиал. master. Ва азбаски ман нақша доштам, ки миқдори одилонаи хатогиҳои худамро илова кунам, ба ман умуман ба ягон каси дигар эҳтиёҷ надоштам. Шояд хамин тавр шуд. Аммо ин аст, ки QEMU дар ҷои худ намеистад ва дар баъзе лаҳзаҳо онҳо ҳатто 10 фоиз оптимизатсияи коди тавлидшударо эълон карданд: "Бале, ҳоло ман ях мекунам" ман фикр кардам ва шикастам. Дар ин ҷо мо бояд як риштаро анҷом диҳем: аз сабаби хусусияти як риштаи QEMU.js ва он, ки QEMU аслӣ мавҷуд набудани чанд риштаро дар назар надорад (яъне қобилияти дар як вақт кор кардани якчанд роҳҳои коди ба ҳам алоқаманд ва на танҳо "ҳамаи ядроҳоро истифода баред") барои он муҳим аст, вазифаҳои асосии риштаҳо ман бояд онро "берун" кунам, то аз берун занг занам. Ин ҳангоми якҷояшавӣ баъзе мушкилоти табииро ба вуҷуд овард. Аммо, дар он аст, ки баъзе тагьирот аз филиал master, ки бо он ман кӯшиш кардам, ки коди худро якҷоя кунам, инчунин гелос дар релизи нуқтаи интихобшуда (ва аз ин рӯ дар филиали ман) низ эҳтимолан бароҳатӣ илова намекард.
Умуман, ман тасмим гирифтам, ки партофтани прототип, ба қисмҳо ҷудо кардани он ва сохтани версияи нав аз сифр дар асоси чизи тару тоза ва ҳоло аз он маъно дорад. master.
Хатогии рақами дуюм: методологияи TLP
Аслан, ин хато нест, дар маҷмӯъ, ин танҳо як хусусияти эҷоди лоиҳа дар шароити нофаҳмии пурраи ҳам "ба куҷо ва чӣ гуна бояд ҳаракат кард?" ва умуман "мо ба он ҷо мерасем?" Дар ин шароит барномасозии бесамар як варианти асоснок буд, аммо, табиист, ки ман намехостам онро такрор кунам. Ин дафъа ман мехостам, ки онро оқилона иҷро кунам: иҷроиши атомӣ, тағир додани коди огоҳона (ва на "ҳамбаста кардани аломатҳои тасодуфӣ то тартиб додани он (бо огоҳиҳо)", тавре ки Линус Торвалдс боре дар бораи касе гуфта буд, тибқи Википедиа) ва ғайра.
Хатогии рақами се: бе надонистани гузаргоҳ ба об даромадан
Ман то ҳол аз ин пурра халос нашудаам, аммо ҳоло ман қарор додам, ки роҳи камтарин муқовиматро риоя накунам ва онро бо "роҳи калонсол" иҷро кунам, яъне пуштибонии TCG-и худро аз сифр нависед, то ин ки не. бояд баъдтар бигӯям: "Бале, ин албатта оҳиста аст, аммо ман ҳама чизро идора карда наметавонам - TCI ҳамин тавр навишта шудааст ..." Гузашта аз ин, ин дар аввал як роҳи ҳалли возеҳ менамуд, зеро Ман рамзи дуӣ тавлид мекунам. Чунон ки мегуянд, «Гент чамъ омаду, аммо на он": рамз, албатта, дуӣ аст, аммо назоратро ба он интиқол додан мумкин нест - он бояд ба таври возеҳ ба браузер барои тартиб додан тела дода шавад, ки дар натиҷа объекти муайян аз ҷаҳони JS, ки то ҳол бояд дар ҷое наҷот ёбад. Аммо, дар меъмории муқаррарии RISC, то ҷое ки ман мефаҳмам, вазъияти маъмулӣ зарурати ба таври возеҳ барқарор кардани кэши дастур барои рамзи барқароршуда мебошад - агар ин ба мо лозим набошад, пас, дар ҳар сурат, он наздик аст. Илова бар ин, аз кӯшиши охирини худ ман фаҳмидам, ки назорат ба мобайни блоки тарҷума интиқол дода намешавад, аз ин рӯ ба мо аслан лозим нест, ки байткоди тафсир аз ягон офсет тафсир карда шавад ва мо метавонем онро танҳо аз функсияи ТБ тавлид кунем. .
Онхо омада лагад заданд
Гарчанде ки ман дар моҳи июл ба дубора навиштани код шурӯъ кардам, як зарбаи ҷодугарӣ нодида гирифт: одатан номаҳо аз GitHub ҳамчун огоҳинома дар бораи посухҳо ба саволҳо ва дархостҳо меоянд, аммо дар ин ҷо, ногаҳон зикр дар ришта Binaryen ҳамчун пуштибони qemu дар контекст, "Ӯ чунин кард, шояд чизе бигӯяд." Мо дар бораи истифодаи китобхонаи марбути Emscripten сӯҳбат мекардем Бинарйен барои сохтани WASM JIT. Хуб, ман гуфтам, ки шумо дар он ҷо литсензияи Apache 2.0 доред ва QEMU дар маҷмӯъ таҳти GPLv2 тақсим карда мешавад ва онҳо чандон мувофиқ нестанд. Ногаҳон маълум шуд, ки иҷозатнома метавонад бошад онро бо ягон роҳ ислоҳ кунед (Ман намедонам: шояд онро тағир диҳам, шояд иҷозатномадиҳии дугона, шояд чизи дигар ...). Ин, албатта, маро шод кард, зеро то он вакт ман аллакай ба он бодиккат назар карда будам формати дуӣ WebAssembly, ва ман гӯё ғамгин ва нофаҳмо будам. Инчунин китобхонае мавҷуд буд, ки блокҳои асосиро бо графики гузариш мехӯрад, байткодро тавлид мекунад ва ҳатто агар лозим бошад, онро дар худи тарҷумон иҷро мекард.
Он гоҳ бештар буд нома дар рӯйхати почтаи QEMU, аммо ин бештар дар бораи саволи "Ба ҳар ҳол ба кӣ лозим аст?" Ва он аст ногаҳон, маълум шуд, ки зарур аст. Ҳадди ақал, шумо метавонед имконоти зерини истифодаро якҷоя кунед, агар он зудтар ё камтар кор кунад:
аст суръатдиҳандагон, яъне KVM барои виртуализатсияи сахтафзор дар Linux (барои системаҳои меҳмонон ва мизбон бо ҳамдигар мувофиқ), TCG барои тавлиди коди JIT дар ҳама ҷо. Аз QEMU 2.9 сар карда, дастгирии стандарти виртуализатсияи сахтафзори HAXM дар Windows пайдо шуд (тафсилот)
агар TCG истифода шавад, на виртуализатсияи сахтафзор, он гоҳ он барои ҳар як меъмории мизбон ва инчунин барои тарҷумони универсалӣ дастгирии тавлиди коди алоҳида дорад.
... ва дар атрофи ҳамаи ин - перифериҳои тақлидшуда, интерфейси корбар, муҳоҷират, сабти такрорӣ ва ғайра.
Воқеан, шумо медонистед: QEMU метавонад на танҳо ба тамоми компютер, балки ба протсессори як раванди корбари алоҳида дар ядрои ҳост, ки масалан аз ҷониби fuzzer AFL барои асбобҳои бинарӣ истифода мешавад, тақлид кунад. Шояд касе мехоҳад ин режими кори QEMU-ро ба JS интиқол диҳад? 😉
Мисли аксари нармафзори ройгони дарозмуддат, QEMU тавассути занг сохта мешавад configure и make. Фарз мекунем, ки шумо қарор додед, ки чизе илова кунед: пуштибонии TCG, татбиқи ришта, чизи дигар. Аз эҳтимоли муошират бо Autoconf ба шодӣ/даҳшатнок шудан шитоб накунед (ба қадри зарурӣ зерро хат кунед) - дар асл, configure QEMU аз афташ худаш навишта шудааст ва аз чизе тавлид нашудааст.
WebAssembly
Пас, ин чизест, ки WebAssembly (aka WASM) номида мешавад? Ин ивазкунандаи Asm.js аст, ки дигар рамзи JavaScript-ро дуруст вонамуд намекунад. Баръакс, он сирф дуӣ ва оптимизатсияшуда аст ва ҳатто ба он навиштани бутуни он чандон осон нест: барои паймонӣ он дар формат нигоҳ дошта мешавад. LEB128 нест.