Kontes Bloatware: menghasilkan 100+ MiB yang dapat dieksekusi [ditutup]

22

Buat kode sumber pendek dalam bahasa kompilasi favorit Anda yang mengkompilasi menjadi file yang besar (tidak kurang dari 104857600 byte) yang dapat dieksekusi. Program ini harus dapat dijalankan (dengan asumsi 1GB memori bebas) dan dapat melakukan apa saja (lebih disukai sesuatu yang sederhana seperti hello world).

Penggunaan trik yang tidak jelas sangat dianjurkan.

Contoh membosankan dalam C:

int a[1024*1024*25] = { 1 };

int main(){}

Poin bonus jika dapat "dijelaskan" mengapa executable tidak dapat dikurangi ukurannya (yaitu semua mengasapi sebenarnya digunakan entah bagaimana).

Vi.
sumber
7
Tautkan SEMUA perpustakaan secara statis!
marinus
Itu sebabnya awalnya berpikir tentang 10+ MiB, tetapi direvisi menjadi 100+ ... Atau itu berarti semua perpustakaan dalam sistem?
Vi.
Bisakah file HTML dianggap sebagai file yang dapat dieksekusi?
xem
Tidak mungkin.󠀠󠀠󠀠
Vi.
Ini bisa tetap pada topik jika kriteria pemenang diubah menjadi "file keluaran terbesar" atau sesuatu, tetapi itu akan membatalkan jawaban saat ini dan menjadikan ini duplikat dari setidaknya satu tantangan lain. Lihat Keadaan dari tag kontes popularitas
cat

Jawaban:

13

OK, ini satu lagi di C, pergi untuk poin bonus yang tidak jelas:

#define a(x) x,x|1,x|2,x|3,x|4,x|5,x|6,x|7
#define b(x) a(x),a(x|8),a(x|16),a(x|24)
#define c(x) b(x),b(x|32),b(x|64),b(x|96)
#define d(x) c(x),c(x|128),c(x|256),c(x|384)
#define e(x) d(x),d(x|512),d(x|4<<8),d(x|6<<8)
#define f(x) e(x),e(x|2048),e(x|4096),e(x|6144)
#define g(x) f(x),f(x|8192),f(x|4<<12),f(x|6<<12)
#define h(x) g(x),g(x|2<<14),g(x|4<<14),g(x|6<<14)
#define i(x) h(x),h(x|2<<16),h(x|4<<16),h(x|6<<16)
#define j(x) i(x),i(x|2<<18),i(x|4<<18),i(x|6<<18)
#define k(x) j(x),j(x|2<<20),j(x|4<<20),j(x|6<<20)
int u,v,z[]={k(0),k(2<<22),k(4<<22),k(6<<22)}
int main(){for(u=v=0;u<1<<25;u++)v|=u!=z[u];return v;}

Pada dasarnya, pada waktu kompilasi, ia membangun urutan bilangan bulat dari 0 hingga 2 25 - 1. Saat runtime, ia memverifikasi bahwa urutan tersebut memang berisi nilai yang diharapkan, dan jika tidak, mengembalikan kode kesalahan yang tidak nol.

Ps. Jika saya melakukan matematika saya dengan benar, executable harus lebih dari 100 MiB. Saya akan memberi tahu Anda ukuran persisnya setelah kompilasi selesai ...

Ilmari Karonen
sumber
1
Ps. Upaya saya untuk memverifikasi ukuran sebenarnya telah (mudah-mudahan sementara) terhalang oleh apa yang saya menduga menjadi pesan kesalahan GCC agak tidak biasa: virtual memory exhausted: Cannot allocate memory. o_O Akan mencoba mengubah opsi untuk melihat apakah saya bisa membuatnya untuk dikompilasi.
Ilmari Karonen
Juga tidak dapat membangun dengan clang(ICE) dan tcc.
Vi.
1
Matikan semua optimisasi ( -O0) untuk meminimalkan tuntutan pada kompiler, dan mengaktifkan pipa ( -pipe) mungkin atau mungkin tidak membantu.
dmckee
3
Masalah kompilasi itu mengingatkan pada entri pemenang IOCCC yang menulis preprocessornya sendiri untuk memverifikasi bahwa program itu benar: ioccc.org/2004/vik2.hint
Christian Semrau
6

C #

Tidak yakin apakah ini memenuhi syarat pendek, karena kode sumber berakhir> 30rb :)

Yaitu - terlalu besar untuk dikutip. Ini versi yang agak singkat

using System.Collections.Generic;
class Program
{
    static void Main()
    {
        var a = new List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<int>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>();
    }
}

Kode yang saya kompilasi sebenarnya dapat ditemukan di sini: http://pastebin.com/R5T3e3J0

Ini akan membuat file .EXE ~ 45KiB ketika dikompilasi tanpa optimasi. Kompilasi lagi dengan Ngen.exe (Native Image Generator) dan itu menjadi 104MiB!

Ini berfungsi karena cara kerja sistem tipe generik CLR. Setiap Daftar <> dalam kode di atas akan menghasilkan deklarasi tipe baru (biasanya melalui kompilasi JIT, tetapi Ngen melakukan kompilasi AOT). Jadi satu jenis untuk Daftar <int>, yang lain untuk Daftar <Daftar <int>>, dan seterusnya. Jadi untuk kode ini, total 5160 daftar generik yang berbeda akan dibuat.

Christian Palmstierna
sumber
1
Yang Anda butuhkan adalah skrip yang akan menulis program Anda.
Hildred
Agak sepele untuk mengurangi ukuran program (dengan menghapus daftar tingkat bersarang). Bisakah itu dibuat sehingga Anda tidak dapat dengan mudah menghapus kode berulang tanpa mempengaruhi fungsi program?
Vi.
Yah tentu saja Anda bisa menghapus sarang, tetapi juga, dalam contoh C Anda hanya bisa menghapus beberapa #define dan membuat program lebih kecil. Cara saya mengartikan persyaratan bahwa itu tidak dapat dikurangi ukurannya, adalah bahwa itu tidak dapat dioptimalkan jauh. Jika Anda diizinkan untuk memodifikasi kode sumber saya tidak mengerti intinya. :)
Christian Palmstierna
1
Meskipun harus dicatat bahwa ini mungkin dapat dioptimalkan jauh, karena variabel a tidak pernah digunakan.
Christian Palmstierna
4

COBOL

   ID DIVISION. 
   PROGRAM-ID. BLOAT. 
   ENVIRONMENT DIVISION. 
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   01  THE-TEST-STRINGS. 
       05  FILLER OCCURS 11584 TIMES. 
           10  TEST-STRING          PIC X(11584). 
   LOCAL-STORAGE SECTION. 
   01  FIRST-TIME-FLAG              PIC X VALUE "Y". 
   01  DISP-BEFORE-STRING     COMP  PIC 9(8). 
   01  LOOP-COUNTER           COMP  PIC 9(8). 
   01  START-STRING. 
       05  FILLER OCCURS 0 TO 11584 TIMES 
           DEPENDING ON DISP-BEFORE-STRING. 
           10  FILLER               PIC X. 
       05  THE-SUBSTRING            PIC X(12). 
   01  INITIAL-STRING               PIC X(12) 
                                     VALUE "HELLO WORLD!".
   LINKAGE SECTION. 
   01  STRING-PARAMETER             PIC X(11584). 
   01  THE-RESULT                   PIC X. 
   PROCEDURE DIVISION USING 
                                    STRING-PARAMETER 
                                    THE-RESULT 
                                    . 

       IF FIRST-TIME-FLAG = "Y" 
           PERFORM                  SET-UP-STRINGS 
       END-IF 
       PERFORM 
         VARYING                    LOOP-COUNTER 
         FROM                       1 
           BY                       1 
         UNTIL                      LOOP-COUNTER 
           GREATER THAN 11584 
         OR STRING-PARAMETER 
             EQUAL TO               TEST-STRING 
                                        ( LOOP-COUNTER ) 
       END-PERFORM 
       IF STRING-PARAMETER 
         EQUAL TO TEST-STRING ( LOOP-COUNTER ) 
           MOVE "Y"                TO THE-RESULT 
       ELSE 
           MOVE "N"                TO THE-RESULT 
       END-IF 
       GOBACK 
       . 
   SET-UP-STRINGS. 
       PERFORM 
         VARYING                    LOOP-COUNTER 
         FROM                       0 
           BY                       1 
         UNTIL                      LOOP-COUNTER 
           EQUAL TO 11584 
           MOVE 11584               TO DISP-BEFORE-STRING 
           MOVE SPACE               TO START-STRING 
           MOVE LOOP-COUNTER        TO DISP-BEFORE-STRING 
           MOVE INITIAL-STRING      TO THE-SUBSTRING 
           MOVE START-STRING        TO TEST-STRING 
                                        ( LOOP-COUNTER + 1 )
       END-PERFORM 
       MOVE "N"                     TO FIRST-TIME-FLAG 
       . 

Sedikit pengetahuan bisa menjadi hal yang berbahaya.

Bisa lebih cepat untuk melakukan satu perbandingan besar daripada banyak perbandingan kecil; Enterprise COBOL IBM (hingga Versi 4.2) dapat memiliki PENYIMPANAN KERJA maksimum 128 MB (Versi 5.0 dapat memiliki 2GB); LOCAL-STORAGE menawarkan 128MB lebih lanjut jika Anda membutuhkan lebih banyak ruang.

Tugasnya adalah untuk mengkonfirmasi bahwa sepotong penyimpanan 11584 byte memiliki nilai "HELLO WORLD!" suatu tempat, dan sisanya adalah ruang.

Programmer, fiktif, memutuskan untuk menulis sub-program untuk ini (kalau-kalau diperlukan di tempat lain), dan untuk memasukkan teknik kinerja tinggi (bonus).

Programmer menghitung bahwa 11584 * 11584 adalah 128MB, jadi gunakan WORKING-STORAGE untuk tabel besar, dan LOCAL-STORAGE untuk semua hal lain yang diperlukan.

Programmer mengkodekannya, dan tersenyum dengan sadar ketika kompilasi bersih. Mereka benar tentang 128MB.

Menguji kodenya. Berhasil. Mungkin agak lambat, tetapi ada beban berat pada mesin. Tersenyum lagi, berpikir betapa lambatnya jika dikodekan tanpa tingkat pengetahuan ahli mereka.

STORAGE KERJA hadir di 134.189.056 byte, dan ada beberapa byte yang baik dari hal-hal lain juga. Harus cukup besar.

Kenyataannya adalah melakukan perbandingan panjang dan bukan perbandingan singkat, seperti yang diterapkan di sini, adalah cara yang sangat lambat untuk melakukannya.

Bahkan lebih lambat, LOCAL-STORAGE, yang diinisialisasi dengan run-time rutin setiap kali sebuah sub-program dipanggil, menyebabkan 128MB seluruh diatur untuk setiap PANGGILAN.

Programmer hanya salah tentang ukuran tabel, ada cukup ruang tanpa menggunakan PENYIMPANAN LOKAL. Perbandingan panjang dapat mengalahkan perbandingan pendek, tetapi hanya ketika jumlah aktual perbandingan dikurangi.

Saya mempertimbangkan untuk menukar sekitar PENYIMPANAN LOKAL dan PENYIMPANAN KERJA di sekitar, itu jauh lebih kecil kemungkinan seseorang akan mengkodekannya seperti itu, jadi saya tidak melakukannya. Menempatkan VALUE SPACE di atas meja (jika sudah di LOCAL-STORAGE) akan menginisialisasi tabel dua kali pada setiap CALL, jadi lebih lambat.

The Bloat tidak dapat dihapus, tanpa menulis ulang program. Sebagian besar kode itu buruk, meskipun ada satu teknik yang berguna.

Ini bukan contoh kehidupan nyata, tapi saya bisa membayangkan seseorang melakukannya, jika seseorang itu cukup pintar :-)

Kompilasi sama sekali bukan masalah. Menjalankannya dengan setiap kemungkinan dengan cepat terbukti tidak layak dicoba.

Tentu saja, ada Bug tua biasa juga. Yang sangat umum dalam tugas "pencarian".

Bill Woodger
sumber
0

PowerBASIC

#BLOAT(104857600)
FUNCTION PBMAIN
  PRINT "Hello World"
  BEEP
END FUNCTION
Juan Sebastian Lozano
sumber
Ini sebanding dengan contoh C dalam pertanyaan.
Vi.
0

Scala

import scala.{specialized=>s}
import scala.Specializable.{Everything=>E}
class Printer[@s(E) A, @s(E) B, @s(E) C, @s(E) D, @s(E) E, @s(E) F, @s(E) G, @s(E) H]{
    def print(a:A,b:B,c:C)=println(s"$a, $b, $c")
}

object Main extends App{ 
    (new Printer[Int,Int,Int,Int,Int,Int,Int,Int]).print(1,2,3)
}

Anotasi khusus membuat kelas baru untuk setiap jenis untuk mencegah tinju ketika semua jenis akhirnya bisa berubah menjadi objek. Ini akan membuat 10 ^ 8 (( Everythingterdiri dari 10 jenis) ^ (8 parameter parameter pada kelas)) file kelas, masing-masing 300-500 byte, jika tidak crash dulu.


Ini dapat dijelaskan dengan mengatakan bahwa kinerja itu penting, terutama jika kelas benar-benar melakukan lebih dari sekadar memiliki metode untuk mencetak. Menggunakan metode khusus generik alih-alih memasukkan semuanya ke dalam deklarasi juga akan membuat lebih sulit untuk diperhatikan

pengguna60561
sumber
Versi scala mana yang saya perlukan untuk membangun ini? 2.9.2 + dfsg-1 tidak suka s "apapun" dan tidak tahu tentang scala. Khususnya.
Vi.
Scala 2.10 termasuk string interpolasi dengan s "", tetapi Anda dapat menghapus string itu tanpa efek pada ukuran. Scala 2.8 memiliki fitur spesialisasi, jadi jika Anda menghapus string yang diinterpolasi, semuanya akan berfungsi dengan baik.
user60561
-2

Javascript

function bigenough(){
        var kbytes = $('html').html().length;
        return (kbytes>1024*100);
}
while(!bigenough()){
$('html').append('<p>WASSUP</p>');}

Jalankan kode ini di Browser Console di halaman ini dan saat selesai, simpan halaman tersebut. itu harus menghasilkan ukuran file lebih besar dari 100 MB. Masih menguji. Akan memposting ukuran sebenarnya setelah selesai.

pembaruan
- halaman yang disimpan adalah hasil yang dapat dieksekusi. Mesin v8 chrome adalah kompiler. Dan kode yang saya posting adalah programnya. saya akui bahwa memang butuh waktu lama untuk dikompilasi. : D

rahulroy9202
sumber
1
Tidak berfungsi seperti yang diminta. Tugasnya adalah membuat file yang dapat dieksekusi yang terlalu besar, bukan yang menghabiskan terlalu banyak memori saat dijalankan. Juga, terlalu sering menggunakan jQuery.
John Dvorak
@JanDvorak itu akan membuat File HTML dengan ukuran lebih besar dari 100MB. Pertanyaan juga tidak menentukan batasan penggunaan JQuery. Program ini masih dieksekusi di Chrome saya dan halaman ini menghabiskan 300mb memori seperti yang dilaporkan oleh Chrome Task Manager.
rahulroy9202
Tidak akan. Setiap penambahan yang Anda lakukan murni terjadi di memori. Ini hanya akan membuat file HTML 100MB jika pengguna memicu operasi penyimpanan. Yang mungkin tidak bisa dia lakukan, juga tidak mau. Juga, bahkan jika Anda menyebut proses ini menambahkan "kompilasi" dan Anda berhasil menyimpan HTML yang dihasilkan sebagai file, saya tidak berpikir Anda diizinkan untuk menulis kompiler Anda sendiri.
John Dvorak
@ JanDvorak Saya telah menunjukkan dalam jawaban bahwa halaman tersebut harus disimpan. di sini, halaman adalah hasil yang dapat dieksekusi. Mesin v8 chrome adalah kompiler. Dan kode yang saya posting adalah programnya.
rahulroy9202
2
V8 adalah kompiler yang menghasilkan "executable" kecil (yang tidak pernah sampai ke hard drive) dan mengeksekusinya, yang kemudian melanjutkan untuk menghasilkan "file sumber" yang sangat besar (dalam bahasa yang bahkan tidak dikompilasi, juga tidak bahasa pemrograman). Jika Anda menyebut hasil skrip Anda sebagai executable (tidak ...) maka kami harus menyebut skrip Anda kompiler, bukan V8. Ini tidak disebut kompilasi jika skrip Anda dieksekusi dalam proses (makro agak mengaburkan garis itu, tapi ini bukan makro)
John Dvorak