- Ikhodi yomshini iqondene nekhodi enambambili ku-CPU ngayinye futhi isetshenziswa ngqo yiyo. hardware, kuyilapho i-bytecode ihloselwe imishini engokoqobo.
- I-Bytecode isebenza njengesendlalelo esiphakathi esiphathekayo nesiqinisekiswayo, lapho abahumushi kanye ne-JIT bakhiqiza khona ikhodi yomshini elungiselelwe ukusebenza kwesikhathi.
- Izilimi ezifana neJava, Python I-C# ithembele ku-bytecode ukuhlanganisa ukuphatheka, ukuphepha, kanye nokusebenza okuseduze nendawo ngokusebenzisa imishini ebonakalayo ethuthukisiwe.

Uma uhlela nge-Java, i-Python, i-C#, noma olunye ulimi lwesimanje, ikhodi oyibhalayo akuyona into eyenziwa yiprosesa. ikhodi yomthombo efundeka kubantu kanye nalezo kanye no-zero abaqondwa yi-CPU Kunezingqimba eziningana zokuhumusha, ukwenza ngcono, ngisho nokuqinisekisa ukuphepha okuvame ukunganakwa uma uhlala kumhleli kuphela.
Ingxenye enkulu yalowo "mlingo" incike emiqondweni emibili ebalulekile: ikhodi yomshini (ikhodi yomshini) kanye nekhodi ye-byte (noma ikhodi ephakathi)Ukuqonda ukuthi ngayinye iyini, ukuthi ihlobene kanjani ne-JVM, i-.NET CLR, noma umhumushi we-Python, nokuthi zingaki izendlalelo ezikhona ngempela phakathi kwekhodi yakho yomthombo kanye nehadiwe, kusiza kakhulu ekwenzeni izinqumo mayelana nokusebenza, ukuphatheka, kanye nokwakhiwa kwesofthiwe.
Ikhodi yomshini: imiyalelo eqondwa yi-CPU
El Ikhodi yomshini iyisibonakaliso esiphansi kakhulu sesofthiweIqukethe ama-bits kuphela (0s kanye no-1s) ahlelwe ngemiyalelo iprosesa engayenza ngqo. Umndeni ngamunye weprosesa (x86, ARM, RISC-V, njll.) uchaza isethi yawo yemiyalelo kanye nefomethi ye-binary.
Isibonelo, umyalelo ovela kuprosesa ye-x86 ungase ubonakale, njengo-binary, kanje: 10110000 01100001Lokho kulandelana kutshela iprosesa okuthile okucacile kakhulu, njengokuthi "hambisa inani elingu-97 ukuze ubhalise u-X". Asikwazi ukukufunda, kodwa kwi-CPU kungumsebenzi wansuku zonke.
Uma ubhala into elula njengolimi olusezingeni eliphezulu int x = 5;Ekugcineni, i-compiler ikhiqiza imiyalelo eyodwa noma ngaphezulu yekhodi yomshini eyabela isikhala, ihambise u-5 kurejista, iyikopishe ibe yimemori, njll. Umphumela uba yi-executable ukuthi uhlelo lokusebenza lungalayisha ku-RAM futhi Ukulandelana kwemiyalelo enambambili kuthunyelwa njengoba kunjalo kuphrosesa.
Isihluthulelo ukuthi ikhodi yomshini kuncike ngokuphelele kwihadiweI-executable ekhiqizwe nge-x86 ngeke isebenze ku-ARM, futhi ngokuphambene nalokho, ngaphandle kokuthi kuhileleke ukulingisa. Lokhu kuncika yisona sizathu sokuthi kungani kukhona izakhiwo eziphakathi ezifana ne-bytecode, ezizama ukukhipha ihadiwe yangempela.
Ulimi lokuhlanganisa, isinyathelo esisodwa ngaphezu kwekhodi yomshini
Ulimi lokuhlanganisa luyi- izinga lokuqala lokucashunwa phezu kwekhodi yomshiniEsikhundleni sokubhala ukulandelana kwama-bits, umhleli wezinhlelo usebenzisa ama-mnemonics afana nalawa I-MOV, i-ADD, i-JMP kanye namalebula angokomfanekiso amakheli noma iziguquguquko.
Ngaphansi kwalokho, i-mnemonic ngayinye ihambisana cishe nomuntu ngamunye kanye nemiyalelo yekhodi yomshini. ukuhlanganisa Ihumusha lolo hlelo kusukela olimini lokuhlanganisa luye kolubili oluhlanzekile. Ukuhumusha kulula kakhulu: ezimweni eziningi, kuyindlela elula yokubonisa igama elingokomfanekiso kanye nekhodi ethile ye-opcode, kanye nokulungiswa kwekheli.
Inzuzo enkulu ukuthi i-assembler ivumela ukusebenzisa izinsizakusebenza ezithile ze-CPU ngokugcwele (amarejista, imiyalelo ekhethekile, izindlela zokuthumela ikheli), kodwa ngezindleko ezinkulu: kuyinkimbinkimbi ukubhala, kubiza kakhulu ukunakekela, futhi kuncike kwihadiwe njengekhodi yomshini uqobo.
Uma uzibuza ukuthi zingaki izendlalelo phakathi kwe-assembler kanye ne-real kanye ne-zero, impendulo imfushane kakhulu: ngokuyisisekelo eyodwaIkhodi yakho yokuhlanganisa icutshungulwa yi-assembler, ekhiqiza ikhodi yezinto, futhi ngemva kokuxhumanisa, uthola i-binary executable eya ngqo ku-CPU. Azikho izihumushi noma imishini ebonakalayo ehilelekile.
I-Bytecode: ibhuloho phakathi kwekhodi yomthombo nomshini
El i-bytecode (noma ikhodi ephakathi) Lungolunye uhlobo lolimi olusezingeni eliphansi, kodwa olunefilosofi ehlukile: esikhundleni sokuxhunyaniswa nohlobo oluthile lweprosesa, luklanyelwe ukwenziwa yi- umshini obonakalayo noma umhumushi wekhodi ye-byteNgamanye amazwi, "i-CPU" eqonda ukuthi ulimi alulona olungokoqobo, kodwa luyisofthiwe.
En Java, Ngokwesibonelo, uma ubhala:
System.out.println("Sawubona, mhlaba");
I-javac compiler ayikhiqizi ngqo imiyalelo ye-x86 noma ye-ARM. Iqala ngokuhumusha ikhodi yomthombo ibe yi- Ikhodi yebhayithi ye-JVMigcinwe kumafayela e-.class. Le bytecode ifana ne-assembler ye-CPU ebonakalayo esekelwe ku-stack, enemiyalelo efana aload_0, getstatic, invokevirtual, Njll
Into efana nalokhu:
0: getstatic #2 // System.out
3: ldc #3 // «Sawubona, mhlaba»
5: invokevirtual #4 // PrintStream.println
Umyalelo ngamunye uyi-byte (opcode) elandelwa ama-operand angaba khona. Lokhu kulandelana akwenziwa yi-CPU yangempela, kodwa yi- Umshini we-Java Virtual (JVM), esebenza njengomhumushi noma umhlanganisi we-JIT kulowo msinga we-bytecode.
Umqondo ofanayo uyasebenza nakwezinye izindawo: Python Ikhiqiza i-bytecode yayo esetshenziswa ngumhumushi wayo (i-CPython), futhi ku-.NET umqoqi ukhiqiza IL (Ulimi Oluphakathi)uhlobo lwe-bytecode olusebenzisa i- Isikhathi sokusebenza solimi olujwayelekile (CLR).
I-Bytecode noma i-assembler? Ukufana nokwehluka kwangempela
Kuyathakazelisa kakhulu ukusho ukuthi i-bytecode "isezingeni elifanayo ne-assembler," ngoba Kuzo zombili izimo sikhuluma ngemiyalelo elula eseduze nomshini.Kodwa kukhona umehluko obalulekile okufanele ucace.
Ngakolunye uhlangothi, i- I-assembler yenzelwe i-CPU ethile ebonakalayo. (isibonelo, i-x86-64), kuyilapho i-bytecode yenzelwe i-CPU ebonakalayo (i-JVM, i-CLR, umshini obonakalayo we-Python, njll.). Umhumushi we-bytecode yilokho okuhumusha, ngesikhathi sokusebenza, le miyalelo ebonakalayo ibe yizenzo zangempela emshinini ongokoqobo.
Ngakolunye uhlangothi, i-bytecode ivame ukuklanywa ukusekela ukulungiswa okuguquguqukayo kanye nokuhlanganiswa kabusha kwe-JITUmshini obonakalayo ungabona ukuthi uhlelo luziphatha kanjani (yiziphi izindlela ezivame ukubizwa ngazo, yimaphi amagatsha asetshenziswayo, yiziphi izinhlobo zangempela ezisetshenziswayo) futhi, kusukela lapho, ukhiqize ikhodi yomshini ecwengekile kakhulu kunalokho okungenziwa yi-static compilation elula.
Ngokuphambene nalokho, uhlelo lokuhlanganisa luyi- "okungaguquki" ngokupheleleUma sekuhlanganisiwe futhi kwaxhunywa, i-executable iyavalwa: i-CPU isebenzisa imiyalelo yayo njengoba nje yenziwe. Ukulungiswa kwezinga le-CPU (ama-cache, amapayipi, ukuhleleka kabusha kwemiyalelo yangaphakathi) kungase kusebenze, kodwa ukugeleza kwemiyalelo kwimemori akushintshi.
Ukukubeka ngendlela evamile: umhlanganisi “ukhuluma” ulimi lomdabu lomprosesaI-bytecode ikhuluma ulimi lwendabuko lomshini obonakalayo, okuwuhumushela olimini lwe-CPU yangempela.
Izendlalelo phakathi kwe-bytecode nekhodi yomshini (naphakathi kwe-assembler nomshini)
Omunye wemibuzo evamile uthi: Zingaki izendlalelo ezikhona ngempela phakathi kwe-bytecode kanye ne-ones kanye ne-zeros? Futhi okufanayo kusebenza nakwi-assembler. Ake sikuchaze ngaphandle kokuhlobisa kakhulu, kodwa ngokunemba.
Esimweni sakudala se-C noma i-assembler ngaphezulu x86Ukugeleza kungaba cishe noma ngaphansi:
- Ikhodi yomthombo noma i-assembler → Uyayibhala.
- Umhlanganisi/Umhlanganisi → ikhiqiza ikhodi yezinto (okuyingxenye ye-binary).
- Isixhumi → ihlanganisa izinto eziningana kanye nemitapo yolwazi ukuze yakhe i-executable.
- Isistimu yokusebenza → ilayisha okusebenzisekayo kwimemori, ilungiselela izitaki, njll.
- CPU → isebenzisa ngqo imiyalelo yekhodi yomshini.
Ngakho-ke, phakathi kwe-assembler nomshini, singacabanga ukuthi kukhona isendlalelo sokuhumusha (i-assembler) kanye nesendlalelo sokupakisha (i-linker)Ngokombono wokwenza, i-CPU ibona kuphela i-binary.
cunt ikhodi (isibonelo, ku-Java) umlando Kuthatha isikhathi eside:
- Ikhodi yomthombo we-Java → Uyayibhala.
- i-javac compiler → ihumusha ku-Java bytecode (.class).
- Isiqinisekisi se-ClassLoader kanye ne-JVM → Balayisha i-bytecode, bayiqinisekise, bese beyilungiselela.
- Umhumushi we-JVM JIT kanye/noma umhlanganisi → Baguqula i-bytecode ibe ikhodi yomshini yangempela, ngezinye izikhathi ngokushesha.
- Isistimu yokusebenza → ilawula inqubo ye-JVM, inkumbulo, imicu, njll.
- CPU → isebenzisa ikhodi yomshini ekhiqizwe yi-JVM.
Lapha ungabona ngokucacile ukuthi kunezingqimba eziningana ezengeziwe: umshini obonakalayo, ukuqinisekiswa, ukuhlanganiswa kwe-JIT, ukuphathwa kwememori nge-GCnjll. Zonke zimi phakathi kwe-bytecode yakho kanye nalezo kanye no-zero abagcina besetshenziswa.
En I-CPython Nge-CPython, kwenzeka into efanayo kakhulu: ikhodi yomthombo ihlanganiswa ibe yi-bytecode, igcinwe (isibonelo ku-.pyc), nokuthi i-bytecode ihunyushwa yi-loop yangaphakathi ku-C ethumela imiyalelo ngayinye ezakhiweni zedatha zomhumushi, incike kukhodi yomshini yomhumushi uqobo.
Izinzuzo ze-bytecode: ukuphatheka, ukuqinisekiswa, kanye nokwenza ngcono
Njengoba kunezendlalelo eziningi ezengeziwe, ungase uzibuze ukuthi kungani ukhathazeka ngokusebenzisa i-bytecode kuyilapho ikhodi yomshini eqondile ishesha. Impendulo itholakala ku- izinzuzo ezisebenzayo ezinikezwa yileli zinga eliphakathi.
Okokuqala nokusobala kakhulu yilokhu ukuthwalaI-Bytecode yenzelwe ukuba ihadiwe ezimeleI-Java .class ekhiqizwe ku- Mac nge-ARM ingasebenza ku-PC nge Windows kanye nama-CPU e-x86-64, uma nje kukhona i-JVM ehambisanayo kuzo zombili izinhlangothi. Ikhodi ye-byte efanayo, imishini ehlukene ebonakalayo.
Eyesibili yi- ukuqinisekiswa nokuvikelekaNgaphambi kokusebenzisa ikhodi yakho, umshini obonakalayo ungahlola i-bytecode, uhlole ukuthi ayenzi lutho olungekho emthethweni (ukufinyelela okungaphandle kwebanga, ukwephulwa kwemodeli yohlobo, njll.), bese wenqaba noma uhoxise ukusebenza uma uthola noma yini esolisayo. Lesi sinyathelo sibalulekile ezindaweni lapho usebenzisa khona ikhodi yomuntu wesithathu noma ikhodi elandiwe kunethiwekhi.
Inzuzo yesithathu enkulu ukuthi ukwenza kahle okunamandlaI-compiler engaguquki kufanele yenze izinqumo ezithile zokwenza ngcono ngesikhathi sokuhlanganiswa ngaphandle kokwazi ukuthi uhlelo luzoziphatha kanjani ekukhiqizeni. I-compiler ye-JIT, ngakolunye uhlangothi, ingenza lokhu:
- Thola ukuthi yiziphi izindlela ezishisayo (ezivame ukusetshenziswa) futhi ubahlanganise ngamasu anolaka.
- Yenza ikhodi ngokwezifiso ngokwezinhlobo zangempela namaphethini okusetshenziswa (isibonelo, ukufaka umugqa omkhulu, ukususa ukuhlolwa okungadingekile).
- Hlanganisa kabusha izingxenye zekhodi uma izimo zishintsha (isibonelo, uma ikilasi elisha lilayishwa eliphula ukucabanga kwangaphambilini).
Konke lokhu kuvumela ukuthi, noma ngabe i-bytecode yokuqala ijwayelekile, umphumela wokugcina uzoba amabhlogo ekhodi yomshini alungiselelwe kakhulu isimo esithile lapho uhlelo lokusebenza lusebenza khona.
Ukusebenza: Ingabe i-bytecode ihlala ihamba kancane kunekhodi yomshini wendabuko?
Isisho esilula sokuthi "I-Bytecode ihlala ihamba kancane kunekhodi yomshini" Lokhu kuyiqiniso kuphela uma uqhathanisa ne-binary yomdabu ehlanganiswe kahle kakhulu bese ucabanga ukuthi umshini obonakalayo ojwayelekile ngaphandle kwe-JIT noma ukulungiswa.
Empeleni, i-bytecode idlula Izigaba ezimbili:
- Ukubulawa kokuqala lapho kungase kube khona ukuhumusha okumsulwa noma ukuhlanganiswa kwe-JIT okululangokugcwala ngokweqile okwengeziwe.
- Isigaba esizinzile lapho i-JIT isivele iqoqe izindlela ezibalulekile zekhodi yomshini oshisayo kanye Ukusebenza kusondela kakhulu (noma ngezinye izikhathi kufana) nokwekhodi yomdabu.
Ezindaweni ezifana ne-JVM noma i-CLR, umshini obonakalayo ungakhiqiza ikhodi yomshini eyenziwe ngcono kakhulu kuneyomshini wokuhlanganisa ojwayelekilengoba inolwazi mayelana nokuziphatha kwangempela kohlelo okwakungenalo umhlanganisi ngaleso sikhathi.
Kodwa-ke, izindleko zalolo lwazi olwengeziwe azimahhala: kuhilela ukusetshenziswa kwememori okwandisiwe, ukumiswa kokuhlanganiswa kwe-JIT, kanye nobunzima besikhathi sokusebenzaNgakho-ke, ezinhlelweni ezihlanganisiwe kahle noma eziqinile zesikhathi sangempela, i-binary yomdabu ehlanganiswe ngokwezibalo isathandwa kakhulu.
I-Java kanye ne-JVM njengesibonelo esiphelele sepayipi
I-Java iyilabhorethri enhle yokubuka uhambo oluphelele ukusuka kukhodi yomthombo kuya ku-CPU. Kule nqubo, i-Java akuyona nje ulimi: I-Java = i-Java API + i-JVMUlimi luchaza i-syntax kanye ne-semantics, i-API inikeza amalabhulali ajwayelekile, kanti i-JVM inesibopho sokusebenzisa i-bytecode.
Okokuqala sinefayela le- Ikhodi yomthombo we-Java, okubhala kumafayela e-.java. Lawa makilasi adlula ku-compiler I-javac, eyenza ukuhlaziywa kwe-lexical, syntactic kanye ne-semantic, ihlola izinhlobo, ikhiqize izakhiwo eziphakathi, futhi ekugcineni, ikhiqize njengomphumela ikhodi yento ekhethekile: i-bytecode okuqukethwe ku-.class.
Leyo khodi ye-byte ayikasebenziswa ngumshini wangempela. Ukuze isebenze kunoma iyiphi ipulatifomu ehambisanayo, kudlalwa ezinye izingcezu ezimbili: eyodwa Java umshini obonakalayo okuqondile kunhlanganisela ngayinye ye-OS/CPU kanye nokwenzeka Umhlanganisi we-JIT okuguqula, ngokushesha, izingxenye ze-bytecode zibe ikhodi yomdabu.
Ngakho-ke, ifayela elifanayo isigaba ingaqhutshwa Linuxi-macOS noma i-Windows, ku-ARM noma ku-x86 architectures, inqobo nje uma kukhona i-JVM yokusingatha ukulungiselelwa. Inkinga "yokuhlanganisa ipulatifomu ngayinye" ithathelwa indawo "ukuba nomshini obonakalayo wepulatifomu ngayinye," okwenza kube lula kakhulu ukuphila kwabathuthukisi bezinhlelo zokusebenza.
Ukwakhiwa kwe-JVM okuyisisekelo: izitaki, inqwaba kanye ne-bytecode
Ukuze uqonde kangcono i-Java bytecode, kuyasiza ukuthola umbono ojwayelekile wokuthi kanjani I-JVM ihlelwe ngaphakathiNakuba imininingwane ishintshile phakathi kwezinguqulo (isibonelo, ku-Java 8 inkumbulo yahlelwa kabusha), isakhiwo esinengqondo sisalokhu sizinzile.
Ngakolunye uhlangothi, sinefayela le- izakhiwo ngentamboIntambo ngayinye ku-Java ine-stack yayo yokwenza (i-Java stack), equkethe:
- Un ikhawunta yohlelo ngesimo samanje sokwenza ngaphakathi kwe-bytecode.
- Una inqwaba yamafreyimulapho uhlaka ngalunye luhambisana nocingo lwendlela.
- Kuhlaka ngalunye, uhlu lwezinguquko zasendaweni (amapharamitha, iziguquguquko zangaphakathi) kanye ne- inqwaba yama-operands lapho i-bytecode yenza khona imisebenzi yayo (i-push, i-pop, ama-sums, ukuqhathanisa, amakholi, njll.).
Ngakolunye uhlangothi, kukhona inkumbulo eyabiwe phakathi kwezingxoxo, lapho zigqama khona:
- El inqwaba, lapho izinto (izibonelo zekilasi) zihlala khona nalapho uMqoqi Wezibi esebenza khona, ehlukanisa izindawo ezifana nesizukulwane esisha, isizukulwane esidala, njll.
- Isikhala esingeyona inqwaba (kuma-JVM akudala, i-PermGen; kuma-JVM anamuhla, i-Metaspace), lapho kugcinwa khona imethadatha yamakilasi, ama-constant, izintambo, kanye nekhodi ehlanganisiwe uqobo nge-JIT ku-Code Cache.
Uma uqala uhlelo lokusebenza lwe-Java, i-ClassLoader iyanakekela Layisha amakilasi adingekayo, gcwalisa ichibi elihlala njalo, bese uqinisekisa i-bytecode. futhi ulungiselele konke ukuze injini yokusebenza ikwazi ukwenza imiyalelo ngayinye ngayinye ku-JVM stack. Imiyalelo ngayinye ku-bytecode ilawula i-operand stack kanye neziguquguquki zendawo, futhi ingafinyelela ichibi elihlala njalo lekilasi ukuxazulula amasimu, izindlela, amagama angokoqobo, njll.
Izibonelo ezisebenzayo ze-Java bytecode: izimfanelo, izindlela, izitatimende zokuthi uma, kanye nama-loop
Ukuze uqonde le mibono, kuyasiza kakhulu ukubheka indlela yokuhumusha ikhodi ye-Java elula kakhulu ibe yi-bytecode. Cabanga ngeklasi ene- imfanelo eyingqayizivele:
iklasi yomphakathi i-BCTest {inani le-int = 42;}
Uma uhlukanisa ifayela le-.class nge-javap, uzobona imiyalelo efana ne- i-aload_0, i-invokespecial, i-beep 42, i-putfield, i-return ngaphakathi komakhi. Lolo chungechunge lwenza into encane njenge:
- Layisha lokhu ku-operand stack.
- Shayela umakhi we-Object superclass nge invokespecial.
- Layisha kabusha lokhu, cindezela u-42 ongokoqobo i-bipush.
- Hlanganisa lokho okungu-42 nensimu ubuqhawe kwento yamanje ene I-Putfield.
- Qeda nge ukubuya.
Umyalelo ngamunye, ngaphansi kwawo, unesimo sawo ngamabhayithi: 2A ye-aload_0, B7 00 01 ye-invokespecial #1, 10 2A ye-bipush 42, B5 00 02 ye-putfield #2, B1 ye-returnNgamanye amazwi, siseduze kakhulu ne-assembler, kodwa siseduze kakhulu ne-CPU ebonakalayo esekelwe ku-stack.
Uma ungeza indlela elula, isibonelo:
isamba se-int yomphakathi(int a, int b) { buyisela a + b; }
I-bytecode ekhiqizwe izobukeka kanje: iload_1, iload_2, iadd, ireturnAmapharamitha amabili avela ku-array of local variables alayishwa ku-operand stack, ahlanganiswe ndawonye, futhi umphumela uyabuyiselwa.
Uma ungena if njengokugeleza kokulawula, njengesitatimende se-if:
uma (a < b) buyisela 1; kungenjalo buyisela 2;
Imiyalelo yokuqhathanisa kanye nokugxuma ivela njenge uma_icmpgeLezi zitatimende ziqhathanisa izinombolo ezimbili eziphakeme kakhulu ku-stack bese zigxumela kwesinye isikhundla se-bytecode ngokusekelwe kumphumela. Zisebenza ngendlela efanayo kakhulu nokweqa okunemibandela ku-assembler yakudala, kodwa ku-stack ebonakalayo.
Ku-a okwe-loop kubalulekile:
ngoba (int i = 0; i < 5; i++) { vector[i] = i + 2; }
Uzobona iphethini ejwayelekile: ukuqalisa ikhawunta nge i-iconst_0, isitolo_2, ukuhlola isimo nge iload_2, iconst_5, uma_icmpge, umzimba ojikelezayo one aload_1, iload_2, iload_2, iconst_2, iadd, iastore futhi ubuyekeze nge inc 2, 1 elandelwa u-a goto okubuyela endaweni yokuhlola. Kufana nokufunda i-x86 assembler, kodwa ngemisebenzi eqondiswe ku-stack kanye nezinkomba ezingokomfanekiso echibini elihlala likhona.
Ikhodi ye-Byte ngale kweJava: i-Python, i-.NET, kanye ne-JavaScript yesimanje
Nakuba iJava iyisibonelo esivelele kakhulu, Imodeli yekhodi ephakathi ivamile kumapulatifomu amaningi anamuhlaI-Python, isibonelo, ihlanganisa ngaphakathi ikhodi yomthombo ku-bytecode ongayihlola nge-module dis. A elula x = i-5 iguqulwa ibe yimiyalelo efana LOAD_CONST 5, ISITOLO_IGAMA x, okuyinto umhumushi ayenzayo esitokisini sayo.
Kuhlelo lwe-.NET, izilimi ezifana ne-C# zihlanganiswa ukuze I-CIL/MSIL (Ulimi Oluphakathi Oluvamile)Le IL ayisebenzi ngqo, kodwa idlula ku-Common Language Runtime (CLR), eyenza imisebenzi efana ne-JVM: iqinisekisa, iphatha inkumbulo, i-JIT ihlanganisa ikhodi yomshini wendabuko futhi inikeza indawo ephephile yokwenza.
Ngisho neJavaScript, ehunyushwa ngokwesiko, isetshenziswa ezinjinini ezifana ne-V8 (Chrome, Node.js) noma i-SpiderMonkey (Firefox). izethulo eziphakathi nendawo kanye nekhodi ye-byte ngaphambi kokufinyelela ikhodi yomshini. Injini ihlanganisa ikhodi yomthombo ye-JS ibe yi-IR yayo (ukumelwa okuphakathi) noma i-bytecode, futhi ngokusekelwe kulokho, isebenzisa izigaba ezahlukene zokwenza ngcono kanye ne-JIT.
Kuzo zonke lezi zimo, iphethini iyaziphinda: ikhodi yomthombo efundeka ngumuntu → i-bytecode ephathekayo/ehlaziywayo → ikhodi yomshini eqondene neplatifomu, kanye nendawo yokufaka ukuqinisekiswa, ukwenziwa kwezinsimbi, ukuhlaziywa okungaguquki kanye nokulungiswa phakathi.
Ukubheka umjikelezo ophelele kusuka kukhodi yomthombo kuya ku-CPU — ngokusebenzisa ikhodi yezinto, i-bytecode kanye ne-executable — kuvumela qonda lezi zingqimba futhi siqonde kangcono ukuthi kungani ezinye izilimi zibeka phambili ukuphatheka, ezinye ukusebenza kwendawo, kanti ezinye zibeka ibhalansi phakathi kokubili; ukuqonda lezi zingqimba kusiza ekubhaleni izinhlelo ezingasebenzi nje kuphela, kodwa futhi ezisheshayo, eziphephile, futhi ezilula ukuzihambisa phakathi kwamapulatifomu.
Umbhali oshisekayo ngomhlaba wamabhayithi nobuchwepheshe ngokujwayelekile. Ngiyathanda ukwabelana ngolwazi lwami ngokubhala, futhi yilokho engizokwenza kule bhulogi, ngikubonise zonke izinto ezithakazelisayo kakhulu ngamagajethi, isofthiwe, ihadiwe, izitayela zobuchwepheshe, nokuningi. Inhloso yami ukukusiza ukuthi uzulazule emhlabeni wedijithali ngendlela elula nejabulisayo.