Studiowałem źródło v8, szczególnie w tym, w jaki sposób narzędzie "mksnapshot" zawiera skompilowany obraz macierzystych plików javascript (runtime.js, json.js ...) w plikach binarnych w wersji 8 i zauważył, że zawiera również (nieco) zminimalizowana wersja źródła. Na przykład podczas sprawdzania zawartości pliku wykonywalnego d8, widzę następujący fragment:Dlaczego v8 zapisuje kod źródłowy macierzystego javascript w wygenerowanych plikach binarnych?
var $JSON=global.JSON;
function Revive(a,b,c){
var d=a[b];
if((%_IsObject(d))){
if((%_IsArray(d))){
var g=d.length;
i na początku 'src/json.js' I See:
var $JSON = global.JSON;
function Revive(holder, name, reviver) {
var val = holder[name];
if (IS_OBJECT(val)) {
if (IS_ARRAY(val)) {
var length = val.length;
wyraźnie zarówno krótkich fragmentów są równoważne, ale druga została przekształcona w pierwszą w procesie kompilacji.
Zrozumiałbym, jeśli oryginalny kod został dołączony do kontroli za pomocą "toString", ale kiedy wpisuję "JSON.stringify" w d8, wszystko co widzę to "funkcja stringify() {[kod natywny]}", więc co czy to ma sens?
Powinieneś zadać to pytanie podczas Google IO 2012 :) –
Oto kilka moich spostrzeżeń na ten temat. Czy potrafisz zapisać wynik tego http://nodejs.org/api/vm.html#vm_vm_createscript_code_filename i uruchomić go po raz drugi? Kiedy kompilujesz nodejs, wydaje się, że nadal nie korzystamy z plików javascript, ponieważ nie mogę znaleźć ani zlokalizować ich gdziekolwiek poza źródłem. – Prospero