前言
這里,我們打算對虛幻4 中藍(lán)圖虛擬機(jī)的實(shí)現(xiàn)做一個大概的講解,如果對其它的腳本語言的實(shí)現(xiàn)有比較清楚的認(rèn)識,理解起來會容易很多,我們先會對相關(guān)術(shù)語進(jìn)行一個簡單的介紹,然后會對藍(lán)圖虛擬機(jī)的實(shí)現(xiàn)做一個講解。
術(shù)語
編程語言一般分為編譯語言和解釋型語言。
編譯型語言
程序在執(zhí)行之前需要一個專門的編譯過程,把程序編譯成 為機(jī)器語言的文件,運(yùn)行時不需要重新翻譯,直接使用編譯的結(jié)果就行了。程序執(zhí)行效率高,依賴編譯器,跨平臺性差些。如C、C++、Delphi等.
解釋性語言
編寫的程序不進(jìn)行預(yù)先編譯,以文本方式存儲程序代碼。在發(fā)布程序時,看起來省了道編譯工序。但是,在運(yùn)行程序的時候,解釋性語言必須先解釋再運(yùn)行。
然而關(guān)于Java、C#等是否為解釋型語言存在爭議,因?yàn)樗鼈冎髁鞯膶?shí)現(xiàn)并不是直接解釋執(zhí)行的,而是也編譯成字節(jié)碼,然后再運(yùn)行在jvm等虛擬機(jī)上的。
UE4中藍(lán)圖的實(shí)現(xiàn)更像是lua的實(shí)現(xiàn)方式,它并不能獨(dú)立運(yùn)行,而是作為一種嵌入宿主語言的一種擴(kuò)展腳本,lua可以直接解釋執(zhí)行,也可以編譯成字節(jié)碼并保存到磁盤上,下次調(diào)用可以直接加載編譯好的字節(jié)碼執(zhí)行。
什么是虛擬機(jī)
虛擬機(jī)最初由波佩克[a]與戈德堡定義為有效的、獨(dú)立的真實(shí)機(jī)器的副本。當(dāng)前包括跟任何真實(shí)機(jī)器無關(guān)的虛擬機(jī)。虛擬機(jī)根據(jù)它們的運(yùn)用和與直接機(jī)器的相關(guān)性分為兩大類。系統(tǒng)虛擬機(jī)(如VirtualBox)提供一個可以運(yùn)行完整操作系統(tǒng)的完整系統(tǒng)平臺。相反的,程序虛擬機(jī)(如Java JVM)為運(yùn)行單個計算機(jī)程序設(shè)計,這意謂它支持單個進(jìn)程。虛擬機(jī)的一個本質(zhì)特點(diǎn)是運(yùn)行在虛擬機(jī)上的軟件被局限在虛擬機(jī)提供的資源里——它不能超出虛擬世界。