前言
這里,我們打算對(duì)虛幻4 中藍(lán)圖虛擬機(jī)的實(shí)現(xiàn)做一個(gè)大概的講解,如果對(duì)其它的腳本語言的實(shí)現(xiàn)有比較清楚的認(rèn)識(shí),理解起來會(huì)容易很多,我們先會(huì)對(duì)相關(guān)術(shù)語進(jìn)行一個(gè)簡單的介紹,然后會(huì)對(duì)藍(lán)圖虛擬機(jī)的實(shí)現(xiàn)做一個(gè)講解。
術(shù)語
編程語言一般分為編譯語言和解釋型語言。
編譯型語言
程序在執(zhí)行之前需要一個(gè)專門的編譯過程,把程序編譯成 為機(jī)器語言的文件,運(yùn)行時(shí)不需要重新翻譯,直接使用編譯的結(jié)果就行了。程序執(zhí)行效率高,依賴編譯器,跨平臺(tái)性差些。如C、C++、Delphi等.
解釋性語言
編寫的程序不進(jìn)行預(yù)先編譯,以文本方式存儲(chǔ)程序代碼。在發(fā)布程序時(shí),看起來省了道編譯工序。但是,在運(yùn)行程序的時(shí)候,解釋性語言必須先解釋再運(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)提供一個(gè)可以運(yùn)行完整操作系統(tǒng)的完整系統(tǒng)平臺(tái)。相反的,程序虛擬機(jī)(如Java JVM)為運(yùn)行單個(gè)計(jì)算機(jī)程序設(shè)計(jì),這意謂它支持單個(gè)進(jìn)程。虛擬機(jī)的一個(gè)本質(zhì)特點(diǎn)是運(yùn)行在虛擬機(jī)上的軟件被局限在虛擬機(jī)提供的資源里——它不能超出虛擬世界。