Virtuální mašina a mezikód

Martin Simbartl | 4. 11. 2007 | Software | | Přečteno: 1,382

Vyslovíme-li tyto dva pojmy, virtuální mašina a mezikód, mnozí z nás si je automaticky spojí s Javou, JVM (Java Virtual Machine) a bajtkódem. To je vzhledem k popularitě Java technologií zcela pochopitelné. Mnozí si však také myslí, že myšlena mezikódu nezávislého na platformě a jeho interpretace, popř. kompilace do nativního kódu, přišla také s Javou. To ale není pravda. Tato myšlenka je mnohem starší než Java. Dokonce zhruba o 24 let starší.

Tento koncept byl poprvé implementován u O-code (Object-code) machine a kompilátoru pro BCPL (Basic Combined Programming Language) někdy kolem roku 1966. Jeho autorem je brit Martin Richards. Ten navrhl mezikód (mezijazyk) O-code, který byl produkován jeho kompilátorem jazyka BCPL, aby dosáhl nezávislosti na cílové platformě a možnosti snadné přenositelnosti programů mezi různými cílovými platformami. O-code byl pak pomocí O-code machine interpretován, nebo častěji kompilován na dané platformě do nativního kódu a následně spouštěn.

Tento koncept byl později použit v mnoha kompilátorech a technologiích jako P-code (pro Pascal), Java, .NET, YARV (pro Ruby), a mnoha dalších. Teprve Java udělala tuto myšlenku tak populární, jak je dnes.

Mimochodem, když už jsme zmínili BCPL, tento programovací jazyk byl prvním jazykem, který zavedl složené závorky {}. Tento jazyk byl také zvláštní tím, že měl pouze jeden datový typ, a sice word, který měl pevný počet bitů. Tento počet byl vybrán na základě architektury platformy, aby bylo možné adresovat odpovídající paměťový prostor. Toho času to pro mnoho platforem bylo 16 bitů. To se však později ukázalo jako problém, když na některých architekturách nebyla nejmenší adresovatelná jednotka word, ale byte, nebo kde délka wordu nebyla 16 bitů, ale 32 nebo 64 bitů. Hmm. Zvláštní, nemyslíte? V té době už existovali 64-bitové superpočítače. Pokud chci dosáhnout nezávislosti na platformě, proč bych něco takového dělal?

S hodnotou proměnné v jazyce BCPL bylo zacházeno na základě operátoru, který byl na ni použit. Například při použití operátoru + bylo s hodnotami zacházeno jako s celými čísly (integer). To znamená, že BCPL neposkytoval typovou kontrolu. To bylo i jedním z důvodů, proč programátoři používali tzv. Maďarskou notaci, kterou dneska strašíme své potomky, když zlobí.

V BCPL bylo napsáno i několi operačních systémů, nebo jejich částí, např. TRIPOS (ten asi moc lidí znát nebude), ale také část AmigaOS.

Závěrem ještě krátký prográmek v BCPL na počítání faktoriálů. Nezkoušel jsem ho spustit. Věřme lidem na Wikipedii, že nás netahají za nos. Možná to zkusím později.

GET "libhdr"
LET start() = VALOF
{ FOR i = 1 TO 5 DO writef("fact(%n) = %i4*n", i, fact(i))
RESULTIS 0
}
AND fact(n) = n=0 -> 1, n*fact(n-1)

Další reference

Domovská stránka Martina Richardse
BCPL
BCPL Reference Manual

Sdílení:
  • Facebook
  • Google Bookmarks
  • Linkuj.cz