bayt kodu - Bytecode
P-code olarak da adlandırılan bayt kodu , bir yazılım yorumlayıcısı tarafından verimli bir şekilde yürütülmesi için tasarlanmış bir talimat seti biçimidir . İnsan tarafından okunabilen kaynak kodunun aksine , bayt kodları, derleyici ayrıştırmasının ve program nesnelerinin türü, kapsamı ve iç içe yerleştirme derinlikleri gibi şeylerin anlamsal analizini gerçekleştirmenin sonucunu kodlayan kompakt sayısal kodlar, sabitler ve referanslardır (normalde sayısal adresler) .
Program yürütme |
---|
Genel konseptler |
Kod türleri |
Derleme stratejileri |
|
Önemli çalışma zamanları |
|
Önemli derleyiciler ve araç zincirleri |
|
Bayt kodu adı, bir baytlık işlem kodları ve ardından isteğe bağlı parametreler içeren komut kümelerinden kaynaklanır . Bayt kodu gibi ara temsiller , yorumlamayı kolaylaştırmak için programlama dili uygulamaları tarafından çıkarılabilir veya aynı kodun farklı cihazlarda çapraz platform çalışmasına izin vererek donanım ve işletim sistemi bağımlılığını azaltmak için kullanılabilir . Bayt kodu genellikle bir sanal makinede (bir p-kod makinesi, yani yorumlayıcı) doğrudan yürütülebilir veya daha iyi performans için makine kodunda daha fazla derlenebilir .
Bayt kodu talimatları yazılım tarafından işlendiğinden, keyfi olarak karmaşık olabilirler, ancak yine de genellikle geleneksel donanım talimatlarına benzerler: sanal yığın makineleri en yaygın olanıdır, ancak sanal kayıt makineleri de oluşturulmuştur. Farklı parçalar genellikle nesne modüllerine benzer şekilde ayrı dosyalarda saklanabilir , ancak yürütme sırasında dinamik olarak yüklenebilir.
Uygulamak
Bir bayt kodu programı , talimatların birer birer ayrıştırılması ve doğrudan yürütülmesiyle yürütülebilir. Bu tür bir bayt kodu yorumlayıcısı çok taşınabilir. Dinamik çevirmenler veya tam zamanında (JIT) derleyiciler olarak adlandırılan bazı sistemler, çalışma zamanında gerektiği gibi bayt kodunu makine koduna çevirir . Bu, sanal makineyi donanıma özgü yapar ancak bayt kodunun taşınabilirliğini kaybetmez. Örneğin, Java ve Smalltalk kodu tipik olarak bayt kodu biçiminde depolanır; bu, tipik olarak, çalıştırmadan önce bayt kodunu makine koduna çevirmek için JIT derlenir. Bu, bayt kodu yerel makine koduna derlendiğinde bir program çalıştırılmadan önce bir gecikmeye neden olur, ancak kaynak kodunu doğrudan yorumlamaya kıyasla yürütme hızını önemli ölçüde artırır, normalde yaklaşık bir büyüklük (10x).
Performans avantajı nedeniyle, günümüzde birçok dil uygulaması bir programı iki aşamada yürütür, önce kaynak kodu bayt koduna derler, ardından bayt kodunu sanal makineye geçirir. Java , Raku , Python , PHP , Tcl , mawk ve Forth için bu tür bayt kodu tabanlı sanal makineler vardır (ancak Forth nadiren bu şekilde bayt kodları aracılığıyla derlenir ve bunun yerine sanal makinesi daha geneldir). Perl ve Ruby 1.8'in uygulanması, bunun yerine kaynak koddan türetilen soyut bir sözdizimi ağacı temsilini yürüterek çalışır .
Daha yakın zamanlarda, V8 ve Dart'ın yazarları, hızlı ve verimli VM uygulaması için ara bayt kodunun gerekli olduğu fikrine meydan okudular. Bu dil uygulamalarının her ikisi de şu anda kaynak kodundan makine koduna bayt kodu aracı olmadan doğrudan JIT derlemesi yapıyor.
Örnekler
- ActionScript , Flash Player ve AIR'in bir parçası olan ActionScript Sanal Makinesi'nde (AVM) yürütülür . ActionScript kodu genellikle bir derleyici tarafından bayt kodu biçimine dönüştürülür . Derleyici örnekleri arasında Adobe Flash Professional'da yerleşik ve Adobe Flash Builder'da yerleşik ve Adobe Flex SDK'da bulunan bir tane bulunur .
- Adobe Flash nesneleri
- BANCStar , orijinal olarak bir arayüz oluşturma aracı için bayt kodudur , ancak aynı zamanda bir dil olarak da kullanılır
- Berkeley Paket Filtre
- Bayt Kodu Mühendislik Kitaplığı
- C'den Java'ya sanal makine derleyicileri
- Common Lisp'in CLISP uygulaması, uzun yıllar boyunca yalnızca bayt kodunu derlemek için kullanıldı; ancak artık GNU yıldırım yardımıyla yerel koda derlemeyi de destekliyor.
- CMUCL ve Scieneer Common Lisp uygulamaları Common Lisp veya yerel kod çok daha kompakt baytkoduna, ya derlemek olabilir
- C# gibi .NET Framework dilleri tarafından kullanılan, Common Language Runtime tarafından yürütülen Ortak Ara Dil
- Android platformu için tasarlanan Dalvik bayt kodu, Dalvik sanal makinesi tarafından yürütülür.
- Inferno (işletim sistemi) için tasarlanmış Dis bayt kodu, Dis sanal makinesi tarafından yürütülür.
- Eiffel programlama dili için EiffelStudio
- EM, bir ara derleme dili ve modern bir bayt kodu dili olarak kullanılan Amsterdam Derleyici Kiti sanal makinesi
- Emacs , işlevlerinin çoğu , yerleşik Lisp lehçesi olan Emacs Lisp tarafından uygulanan bir metin düzenleyicisidir . Bu özellikler bayt kodunda derlenir. Bu mimari, kullanıcıların düzenleyiciyi bayt kodunda derlendikten sonra makul performans sağlayan yüksek seviyeli bir dille özelleştirmesine olanak tanır.
- Gömülebilir Common Lisp uygulaması Common Lisp bayt veya C koduna derlemek olabilir
- Erlang'ın Ericsson uygulaması BEAM bayt kodlarını kullanır
- Ethereum'un Sanal Makinesi (EVM), Ethereum'da (akıllı sözleşmeler) işlem yürütmek için kendi bayt kodunu kullanan çalışma zamanı ortamıdır.
- Simge ve Unicon programlama dilleri
- Infocom , yazılım uygulamalarını daha taşınabilir hale getirmek için Z-makinesini kullandı
- Java sanal makinesi tarafından yürütülen Java bayt kodu
- KEYB , yerleşik sürücü içinde bir yorumlayıcı tarafından yürütülen yerleşim bilgileri ve kısa p-kodu dizilerini içeren KEYBOARD.SYS kaynak dosyasıyla MS-DOS / PC DOS klavye sürücüsü.
- Sanal dünyalarda kullanılan bir betik dili olan LSL, sanal bir makinede çalışan bayt kodunda derlenir. Second Life'ın orijinal Mono versiyonu var, Inworldz Phlox versiyonunu geliştirdi.
- Lua dili, kayıt tabanlı bir bayt kodu sanal makinesi kullanır
- MATLAB dilinin m kodu
- Malbolge , üçlü bir sanal makine için ezoterik bir makine dilidir .
- çok planlı
- O-kod ait BCPL programlama dili
- OCaml dili isteğe bağlı olarak kompakt bir bayt kodu biçiminde derlenir
- P-kodu ve UCSD Pascal uygulanması Pascal dili
- Papağan sanal makinesi
- TEMEL kıracağı da Veri BASIC veya olarak anılacaktır MultiValue BASIC
- İstatistiksel işlem için R ortamı R versiyonu 2.13.0 ile artık standart bir bayt kodu derleyici derleyici paketi ile servis. Temel ve önerilen paketlerin bundan yararlanması için R'nin bu sürümünü derlemek mümkündür.
- Piramit 2000 macera oyunu
- Python komut dosyaları, yürütülürken Python'un bayt kodu diline göre derlenir ve derlenen dosyalar (.pyc), komut dosyasının klasöründe önbelleğe alınır.
Derlenmiş kod, düşük seviyeli bayt kodunun hatalarını ayıklamak için yerleşik bir araç kullanılarak analiz edilebilir ve araştırılabilir. Araç, kabuktan başlatılabilir, örneğin:
>>> import dis # "dis" - Disassembler of Python byte code into mnemonics.
>>> dis.dis('print("Hello, World!")')
1 0 LOAD_NAME 0 (print)
2 LOAD_CONST 0 ('Hello, World!')
4 CALL_FUNCTION 1
6 RETURN_VALUE
- Bayt kodu yorumlayıcısı kullanarak Scheme 48 uygulaması
- Smalltalk dilinin birçok uygulamasının bayt kodları
- Spin tercüman yerleşik Paralaks Pervane mikrodenetleyici
- SQLite veritabanı altyapısı ısmarlama bayt kod biçime SQL ifadelerini çevirir.
- TATLI 16
- Tcl
- küçük TEMEL
- Visual FoxPro bayt kodu için derler
- WebAssembly
- Ruby için YARV ve Rubinius