Kode Terpendek untuk Mengendur secara Sah

146

Saya seorang pengembang, dan saya tidak ingin melakukan pekerjaan saya. Saya tahu dari XKCD bahwa alasan terbaik untuk bersantai adalah bahwa kode Anda dikompilasi . Karena itu, saya pikir saya memerlukan beberapa kode yang akan dikompilasi selamanya! Dan karena saya malas dan tidak mau harus mengetik banyak, ini harus dilakukan dengan kode sesingkat mungkin.

Jadi, tugas Anda adalah menulis sebuah program yang secara sintaksis valid, tetapi akan menyebabkan kompiler memasuki infinite loop.

Spesifikasi

  • Anda harus menggunakan bahasa yang memiliki kompiler, jelas.
  • Tentukan implementasi yang digunakan dalam setiap solusi.
  • Ini adalah , sehingga solusi terpendek yang valid (dalam byte) menang.
  • Kompilator dapat berhenti kehabisan memori atau menumpuk ruang.
Buah Esolanging
sumber
1
@obarakon saya tidak setuju. Kode dari tantangan lain tidak dapat diangkut ke tantangan ini dengan mudah. Tantangan sementara keduanya melibatkan perulangan tak terbatas pada dasarnya berbeda.
Sriotchilism O'Zaic
1
@obarakon Juga bukan tipu daya dari pertanyaan ini , karena ini bukan kode-golf.
Buah Esolanging
2
Terkait
Sriotchilism O'Zaic
1
Saya tidak yakin itu cocok dengan tantangan ini (dan bahkan jika itu akan skor sangat), tetapi bagi mereka yang tertarik di sini adalah bagaimana saya akan melakukannya Java: mendefinisikan prosesor anotasi (potongan ideone) yang akan Anda gunakan ketika menjalankan javacdengan -processorpilihan. Itu membuat kompilasi kelas mana pun menggantung selamanya.
Aaron
6
Untuk jawaban yang menyebabkan crash pada kompiler: Untuk tujuan slacking, saya pikir Anda masih ingin itu memakan waktu selama Anda bisa crash.
GuitarPicker

Jawaban:

16

Japt , 2 byte

`ÿ

Anda dapat menguji ini secara online di sini , tetapi saya tidak akan merekomendasikannya karena ini akan membekukan browser Anda.

Penjelasan

Japt menggunakan perpustakaan shoco untuk mengompresi string. Sebuah backtick memberitahu compiler untuk mendekompres semuanya sampai backtick berikutnya atau akhir file. Setiap byte melakukan hal berikut:

  • 00-7F dibiarkan utuh.
  • 80-BFmasing-masing berubah menjadi huruf kecil pasangan dua huruf yang umum ( at, oo, th, dll).
  • C0-DFmasing-masing mengkonsumsi byte berikutnya dan mengubahnya menjadi string empat huruf yang umum .
  • E0-EFmasing-masing mengonsumsi tiga byte berikutnya dan mengubahnya menjadi string delapan huruf "umum" (mulai dari Wherererdan menurun dari sana).
  • F0-F7 hancurkan decompressor, meskipun masih mengembalikan semuanya hingga byte yang putus
  • F8-FFmenyebabkan decompressor masuk ke loop infinite. Saya tidak yakin mengapa ini terjadi, karena saya tidak terlalu terbiasa dengan cara kerja bagian dalam perpustakaan shoco (dan kode JavaScript benar-benar tidak dapat dibaca ), tetapi cukup berguna dalam kasus ini.

Saya tidak percaya ada cara lain untuk mengacaukan kompiler Japt, tetapi Anda tidak pernah tahu ...

Produksi ETH
sumber
10
Apa maksudmu itu tidak bisa dibaca. Jelas Anda tidak berusaha cukup keras.
fəˈnɛtɪk
Saya berharap ada dekompiler emscripten ...
tbodt
58

TikZ (pdfTeX 3.14159265-2.6-1.40.17), 85 79 74 24 22 21 byte

Banyak byte yang disimpan berkat wchargin

Satu byte disimpan berkat Chris H

\input tikz
\tikz\pic

Saya benar-benar menemukan ini secara tidak sengaja ketika saya sedang mengerjakan pekerjaan rumah. Saya menghabiskan waktu cukup lama menunggu untuk dikompilasi sebelum saya menyadari apa yang terjadi.

Ini memiliki dua bagian:

\input tikz

Ini memuat paket TikZ

dan:

\tikz\pic

Ini memulai \tikzlingkungan dan perintah undian.

Apa yang sedang terjadi

Compiler pdflatex memiliki masalah dengan \tikz\pic, dan memasuki mode interaktif yang menyebabkannya berhenti tanpa batas.

Sriotchilism O'Zaic
sumber
(1/2) Saya tidak bisa mereproduksi ini. Saya mendapatkan "Argumen pelarian \draw l\end {document}?! File berakhir saat memindai penggunaan \tikz@next." pdflatex 3.1415926-2.5-1.40.14 (TeX Live 2013 / Debian). tikz 2010/10/13 v2.10. Ini standar apt install texlive-fullpada Ubuntu 14.04.
wchargin
1
@wchargin Saya menggunakan versi yang sama pdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016) dan itu memang loop tanpa batas. Terima kasih atas tipsnya.
Sriotchilism O'Zaic
1
Anda dapat menyimpan byte dengan menggunakan \picalih-alih \ draw` - perilaku yang persis sama (diuji menggunakan tikz 1.142)
Chris H
3
Saya tidak percaya saya sebenarnya menganjurkan tidak menggunakan TikZ, tapi pasti penggunaannya berlebihan di sini. Apa yang salah dengan yang lama \def\a{\a}\a(12 byte)? Atau, karena ini kode golf dan ~aktif secara default, \def~{~}~(9 byte)?
Loop Space
2
@ LoopSpace Tidak ada yang salah dengan mereka, saya hanya tidak tahu yang ada. Jika Anda ingin membuat jawaban Anda sendiri, silakan.
Sriotchilism O'Zaic
40

C, 18 byte

#include __FILE__

Kompiler biasanya akan menyerah setelah berulang sekitar 200 kali.

Apakah konstruksi DOM dianggap sebagai langkah kompilasi? Jika demikian, maka x.htm:

<iframe src=x.htm>
Neil
sumber
14
Saya ingat bahwa frameset rekursif digunakan untuk crash IE4 begitu keras sehingga kadang-kadang menurunkan komponen OS penting dengan itu. Jadi HTML di sana mungkin diperhitungkan.
10
@ ais523, itu karena, pada masa IE4, Internet Explorer adalah "komponen OS penting".
Tandai
2
Sedikit tweaker dan itu adalah PHP yang valid: <?include __FILE__;.
Ismael Miguel
6
Tidak dapat memposting jawaban ini karena perwakilan saya tidak cukup tinggi, tetapi ada dua alternatif: #include "/ dev / zero" dan #include "/ dev / stdin" - hati-hati menjalankan yang pertama !!
rrauenza
2
Ketika saya mencobanya penggunaan memori gcc mulai tumbuh dengan cepat tanpa batas, sistem menjadi tidak responsif, dan pengawas saya akhirnya menendang dan reboot. Itu cukup lucu :)
rrauenza
38

Java, 102 95 89 88 78 byte

class A<T>{}class B<T>extends A<A<?super B<B<T>>>>{A<?super B<A>>a=new B<>();}

Ini berakhir dengan StackOverflowErroryang terjadi karena sistem resolusi generik tidak dapat memutuskan root untuk menyelesaikan generik lainnya.

Kredit yang jatuh tempo .

Apa yang terjadi di sini?

  1. A<T>hanya ada untuk memiliki 1 huruf induk. Itu generik. Saya bisa saja menggunakannya List, tetapi impor dan pengulangan 4 huruf terlalu panjang.
  2. B<T> mendeklarasikan generik dasar.
  3. B extends Adiperlukan untuk memiliki hierarki antara Bdan A.
  4. extends A<A>membuat referensi diri pada A<T>.
  5. A<? super B> memicu pencarian untuk obat aktif A<T>
  6. B<B<T>>membuat referensi diri pada B<T>.
  7. A<...> a=new B<>()memaksa penggunaan obat generik, bukan hanya definisi dari mereka, memaksa resolusi saat kompilasi B, dan tidak sesudahnya.
  8. A<?super Bmenciptakan referensi-sendiri, jadi kami memiliki referensi untuk satu jenis dan yang lain dalam generik A.
  9. B<A>menciptakan referensi-sendiri, jadi kami memiliki referensi untuk satu jenis dan yang lain dalam generik B.

Sekarang, tipe Amemiliki tipe generik Adan B, tetapi mana yang harus dipilih? Lupakan tentang diri, mari kita coba untuk menyelesaikannya B. Ping.

Oke, Bpunya tipe obat generik Adan B, tapi mana yang harus dipilih? Lupakan tentang diri, mari kita coba untuk menyelesaikannya A. Pong.

Semacam ini rekursi dapat benar-benar dihindari karena ada kasus-kasus yang sah seperti A<B<A<B<A<B<Object>>>>>>: misalnya objek JSON: List<Map<String,Map<String,List<Map<String,List<String>>>>>>.

Hasil kompilasi

$ javac NoCompile.java


The system is out of resources.
Consult the following stack trace for details.
java.lang.StackOverflowError
        at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3260)
        at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2587)
        at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579)
        at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554)
        at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3260)
        at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2592)
        at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579)
        at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554)

Pada sistem saya, jejak stack berhenti setelah menunjukkan 1024 baris, yang sebenarnya adalah 4 baris yang sama diulang 256 kali, sehingga membuktikan rekursi tak terbatas. Saya akan menghindarkan Anda dari seluruh jejak itu.

Tabungan

  1. 102 → 95 byte: diganti interface+ implementsdengan class+ extends.
  2. 95 → 89 byte: diganti Longdengan A(dua kali).
  3. 89 → 88 byte: operator berlian bekas ( new B<A>()new B<>()).
  4. 88 → 78 byte: memindahkan deklarasi variabel ke anggota kelas, terima kasih kepada VoteToClose .
Olivier Grégoire
sumber
1
Apa yang saya lihat
Addison Crump
Anda dapat mempersingkat ini menjadi 78 byte dengan:class A<T>{}class B<T>extends A<A<?super B<B<T>>>>{A<?super B<A>>b=new B<>();}
Addison Crump
@VoteToClose Anda sedang melihat contoh utama dari keraguan dalam generik Java. Setiap generik seharusnya diselesaikan terhadap akar yang sama yang kemudian divalidasi. Masalahnya di sini adalah bahwa generik Bberisi referensi yang tidak dapat diputuskan untuk generik Ayang pada gilirannya berisi referensi yang tidak dapat diputuskan untuk generik B. Ketika resolver tidak dapat memutuskan, ia memeriksa referensi yang disertakan, tetapi di sini kedua generik merujuk satu sama lain dengan cara yang tidak dapat ditentukan (sebagian besar berkat referensi diri dan superkata kunci. Jadi resolver sebenarnya melakukan ping-pong antara dua obat generik.
Olivier Grégoire
Saya sedang berpikir tentang membuat masalah waktu kompilasi dengan anotasi siklus: public @interface X {@X(x=X.class)Class<? extends X> x();}... Tapi saya segera menyadari mengapa itu tidak berhasil lol.
Magic Octopus Mm
34

GNU Makefile, 8 7 byte

Satu byte disimpan berkat KonradRudolph

Disimpan sebagai Makefiledan dipanggil oleh make:

x:;make

Ini akan menghasilkan rekursi build tak terbatas pada target pertama yang ditemukan "x".

Tidak perlu dikatakan bahwa Anda tidak benar - benar ingin menjalankan bom fork ini di server produksi Anda. :-)

make
make[1]: Entering directory `/path/to/my/dir'
make
make[2]: Entering directory `/path/to/my/dir'
make
make[3]: Entering directory `/path/to/my/dir'
make
make[4]: Entering directory `/path/to/my/dir'
make
make[5]: Entering directory `/path/to/my/dir'
make
make[6]: Entering directory `/path/to/my/dir'
make
make[7]: Entering directory `/path/to/my/dir'
make
...

Versi alternatif, 5 byte

Disarankan oleh KonradRudolph:

x:;$_

$_adalah referensi ke argumen terakhir dari perintah sebelumnya. Lebih khusus, itu diselesaikan di sini sebagai jalur absolut ke perintah yang dieksekusi - yang itu makesendiri.

Ini seharusnya bekerja dengan baik di lingkungan Bash asli, tetapi tidak pada Windows + MinGW.

Arnauld
sumber
2
Hmm, saya pikir maketidak benar-benar mengkompilasi Makefile (hanya menafsirkannya).
zeppelin
3
@ zeppelin Anda benar, ini mungkin jawaban batas. Yang mengatakan, pengiriman yang melibatkan rekursi makro di tingkat preprosesor tidak akan pernah mulai mengkompilasi kode aktual apa pun.
Arnauld
11
Ini sesuai dengan tujuan yang diinginkan: memiliki proses pembangunan tanpa batas. +1!
YSC
23

C ++, 60 58

template<class T>class a{a<T*>operator->();};a<int>i=i->b;

Secara berulang ini membuat instance class adengan parameter templat yang berbeda. GCC 7.0 berhenti setelah 900 tingkat rekursi dengan banyak kesalahan tentang operator->menjadi pribadi tetapi misalnya ICC 17 dan Microsoft (R) C / C ++ Pengoptimal Pengoptimal 19 waktu habis di godbolt .

Masalah dengan itu adalah bahwa mungkin semua kompiler akan kehabisan memori di beberapa titik waktu sehingga bahkan tanpa batas rekursi ini akan berhenti. Hal yang sama mungkin berlaku untuk jawaban Clojure juga.

Sunting: 2 byte disimpan oleh bolov - Terima kasih

Christoph
sumber
1
lebih pendek:a<int>i=i->b;
bolov
1
Saku @ seperti yang saya nyatakan dalam jawaban saya itu karena operator->default adalah pribadi dalam kelas. Dalam sebuah struct itu publik dan karenanya i->bdapat mengaksesnya.
Christoph
1
gcc 4.4.7 tampaknya menggantung tanpa batas di sini. Menunggu infinity atau untuk menampilkan output, mana yang lebih dulu. Akan memperbarui
osuka_
1
@osuka_ apakah masih berjalan?
Christoph
1
@Christoph tidak, itu jatuh dengan SIGSEGV setelah saya membiarkannya berjalan selama beberapa hari. Tapi lupa untuk memperbarui - terima kasih atas pengingatnya!
osuka_
23

Perl , 15 13 byte

BEGIN{{redo}}

Cobalah online!

Sekarang dengan 2 byte yang disimpan: @Zaid mengingatkan saya pada cara terser untuk melakukan loop di Perl.

Ini cukup sederhana: itu hanya menginstal parser hook dengan loop tak terbatas, membuat kode membutuhkan waktu yang sangat lama untuk diuraikan. (Perl bagus karena memungkinkan Anda untuk menjalankan kode arbitrer di tengah parse; kait parser ditentukan dalam Perl itu sendiri, dan sering digunakan untuk melakukan hal-hal seperti mengimpor perpustakaan atau mengubah aturan parsing untuk pengidentifikasi yang ingin Anda perlakukan seperti kata kunci.) Coba online! tautan di atas memberikan -copsi (untuk mengkompilasi kode untuk memverifikasi sintaksis untuk kebenaran, tetapi tidak menjalankannya), untuk membuktikan bahwa loop tak terbatas terjadi pada waktu kompilasi.

Jika Anda bertanya-tanya tentang "waktu kompilasi" dalam bahasa scripting: Perl sebenarnya mengkompilasi ke bytecode dan kemudian menjalankan bytecode, tetapi ini adalah detail yang jarang relevan ketika memprogramnya. Keluarga -MO=opsi baris perintah dapat digunakan untuk melakukan hal-hal dengan bytecode selain menjalankannya (meskipun tidak dengan program ini, karena loop infinite terjadi sebelum bytecode dapat dihasilkan).


sumber
1
a:goto aterlihat bagus juga (bytecount sedih).
Dada
3
BEGIN{{redo}}akan menghemat beberapa byte
Zaid
20

C ++, 37 30 29 byte

int f(auto p){f(&p);},a=f(0);

Ini menggunakan parameter fungsi otomatis masa depan. Itu diusulkan ke C ++ 17, tapi saya tidak berpikir itu berhasil. gccNamun mendukungnya sebagai ekstensi.

Pada dasarnya

void foo(auto p);

setara dengan

template <class T>
void foo(T p);

Kode mencoba untuk instantiate fsecara rekursif dengan argumen templat yang berbeda. gccgagal dengan

kesalahan fatal: kedalaman instantiasi templat melebihi maksimum 900 (gunakan -ftemplate-depth = untuk menambah maksimum)

Dengan -ftemplate-depth=10000saya mendapatkannya meludah "Dibunuh - waktu pemrosesan melebihi" pada godbolt.

Periksa di godbolt


1 byte disimpan oleh Quentin. Terima kasih.

bolov
sumber
1
Satu byte dapat disimpan dengan menggunakan intsebagai tipe pengembalian :)
Quentin
Memang, autoparameter fungsi tidak membuatnya menjadi C ++ 17; dan juga int f() { ... }, a;bukan deklarasi hukum terakhir kali aku memeriksa. (Anda tidak dapat mencampur deklarasi fungsi dengan deklarasi variabel seperti itu.) Apa yang Anda dapatkan di sini adalah dialek CCC yang sangat spesifik untuk G ++. Bukan berarti ada yang salah dengan itu dalam konteks ini. :)
Quuxplusone
19

Gangguan Umum, 8 byte

#.(loop)

Kompiler akan mencoba membaca formulir dan akan menemukan makro sharpsign-dot reader, yang mengevaluasi kode pada waktu baca dan menggunakan hasilnya sebagai formulir untuk dikompilasi. Di sini, kode yang dieksekusi adalah infinite loop.

coredump
sumber
17

TeX, 9 byte

\def~{~}~

TeX bekerja dengan memperluas makro. Sebagian besar waktu, makro TeX (juga disebut urutan kontrol ) berbentuk \nametetapi juga dimungkinkan untuk mendefinisikan karakter tertentu sebagai makro, ini disebut karakter aktif . Karakter ~aktif secara default di TeX polos dan dapat digunakan sebagai nama makro tanpa deklarasi lebih lanjut. The \def~{~}di atas mendefinisikan ~sehingga mengembang ~. Yaitu, setiap kali TeX bertemu ~maka ia menggantikannya ~dan kemudian memeriksa kembali penggantian, yang berarti bahwa ia menemukan kejadian yang sepenuhnya baru ~dan menggantikannya dengan ~. Ini mendefinisikan infinite loop. Yang diperlukan hanyalah memulai loop dan itulah yang dilakukan oleh final ~.


Ditambahkan di edit

Untuk membuatnya dikompilasi dengan benar , aktifkan sebagai:

pdftex -ini "&pdftex \def~{~}~"

The -iniflag mengatakan bahwa pdftexharus mengkompilasi file format baru. Ini adalah sekumpulan definisi yang dikompilasi yang dapat dimuat ketika TeX kemudian dipanggil untuk mempercepat pemrosesan dokumen (LaTeX2e adalah contohnya). Saya kira itu &pdftexmenambahkan beberapa byte, sehingga total menjadi 17.

Loop Space
sumber
Apakah ini terjadi pada waktu kompilasi? Pertanyaannya mengharuskan loop tak terbatas terjadi saat kompilasi, bukan saat menjalankan.
@ ais523 Belum sepenuhnya memikirkan tentang itu. Saya riffing dari jawaban TikZ. Saya telah menambahkan alternatif yang sudah dikompilasi, dengan mengorbankan beberapa byte lagi.
Loop Space
2
@ ais523: Seperti biasa, "kompilasi" dan "berlari" adalah dua sisi dari koin yang sama. Secara pribadi, saya menganggap kode sumber TeX sebagai "kompilasi" ke dalam dokumen PDF (yang kemudian "dieksekusi" dengan melihat), dengan cara yang sama dengan kode sumber C ++ "dikompilasi" menjadi file .exe (yang kemudian "dieksekusi" oleh berjalan). Tetapi Anda juga bisa menganggap pdftexprogram sebagai "menafsirkan" input TeX untuk menghasilkan PDF sebagai "output" - dengan cara yang sama seperti g++program "menafsirkan" input C ++ untuk menghasilkan file .exe sebagai "output". ;)
Quuxplusone
13

Haskell, 25 + 17 = 42 byte

a= $(let a='a':a in[|a|])

Metaprogram Haskell sederhana yang mendefinisikan nilai tak terbatas dan berupaya menghitung nilai itu pada waktu kompilasi.

Diminta dengan ghc -XTemplateHaskell <file.hs>(+17 untuk parameter ke kompiler)

pengguna2407038
sumber
Tidak $(let a=a in a)berfungsi (untuk 32 byte)?
Ry-
1
Nggak! GHC terlalu pintar. Setiap loop infinite dari formulir let a = a in aakan ditulis ulang menjadi pengecualian, yang hanya menyebabkan kesalahan kompiler sebagai lawan dari loop infinite. (walaupun mungkin ini akan bekerja dengan kompiler Haskell yang berbeda, tapi saya tidak punya satu di tangan untuk mencoba)
user2407038
Ini berfungsi dengan runghc untuk saya, jadi saya akan mengatakan itu valid. (Sebenarnya, ini bekerja dengan ghc, 8.0.1 di sini.)
Ry-
Benarkah? Saya di ghc 8.0.1 juga - bagi saya itu memberi Exception when trying to run compile-time code: <<loop>>, baik dalam penerjemah dan ketika mengkompilasi ... secara teknis kode di atas mati dengan pengecualian juga, tetapi stack overflow, yang secara eksplisit diizinkan oleh spesifikasi - dan jika Anda memiliki memori tak terbatas, itu akan benar-benar berulang selamanya. The <<loop>>pengecualian kebakaran jauh sebelum komputer saya kehabisan memori.
user2407038
12

gradle, 10 9 byte

for(;;){}

dengan kode di atas ditempatkan di build.gradlefile. Gradle menggunakan groovy sebagai bahasa dasarnya sehingga kami benar-benar berbicara tentang groovy di sini, tetapi karena pertanyaannya adalah tentang waktu pembuatan, saya pikir gradle akan lebih sesuai.

Menjalankan perintah gradle build apa pun dengan kode di atas mencetak baris status build yang kompatibel dengan ratu-berambut:

$ gradle tasks
> Configuring > 0/1 projects > root project

jika Anda bertujuan untuk kenaikan gaji, tambahkan -dbendera debug untuk:

$ gradle -d tasks
14:56:25.522 [INFO] [org.gradle.internal.nativeintegration.services.NativeServices] Initialized native services in: .gradle/native
14:56:25.757 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClient] Executing build 84908c0d-f28d-4c57-be61-40eaf0025e16.1 in daemon client {pid=27884}
14:56:25.761 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding IP addresses for network interface tun0
14:56:25.762 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a loopback interface? false
14:56:25.762 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a multicast interface? false
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /x:x:x:x:x:x:%tun0
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /x.x.x.x
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding IP addresses for network interface eth1
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a loopback interface? false
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a multicast interface? true
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /x:x:x:x:x:x:%eth1
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /x.x.x.x
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote multicast interface eth1
14:56:25.764 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding IP addresses for network interface lo
<snip>
14:57:07.055 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
14:57:07.056 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
14:57:07.056 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
14:57:07.056 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
> Configuring > 0/1 projects > root project

yang selain tampak rumit rumit juga diperbarui dengan perangkat baru:

15:07:57.054 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck running
15:07:57.054 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
15:07:57.054 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
15:07:57.055 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
15:07:57.055 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
15:07:57.055 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
15:07:57.055 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.

baris status setiap 10 detik membuatnya terlihat seperti build sibuk melakukan hal-hal teknis penting.

Matias Bjarland
sumber
8

SWI-Prolog, 34 byte

term_expansion(_,_):-repeat,1=0.

Penjelasan

term_expansion/2 adalah sesuatu yang dipanggil secara otomatis oleh kompiler sebelum benar-benar mengkompilasi kode untuk mengubah beberapa istilah dalam kode sumber menjadi istilah lain.

Di sini, kami memperkenalkan aturan baru untuk term_expansion/2: repeat,1=0..

repeat/0 adalah predikat yang selalu berhasil, dan memberikan jumlah poin pilihan yang tidak terbatas.

1=0sedang mencoba untuk menyatukan 1dengan 0, yang selalu false. Ini akan menyebabkan compiler mundur repeat(karena selalu memberikan titik pilihan) dan coba 1=0lagi, dll.

Fatalisasi
sumber
Tidak berfungsi di GNU Prolog, jadi saya menganggap ini khusus implementasi. Anda mungkin ingin memasukkan nama kompiler di pos. (Saya mengasumsikan SWI Prolog.)
@ ais523 Terima kasih, tidak memeriksa distribs lain, tetapi karena hal-hal kompiler biasanya cukup spesifik, saya seharusnya tahu lebih baik ...
Fatalize
@ ais523 Namun menurut ini , Anda mungkin dapat menggunakan expand_termsebagai gantinya (seperti yang dikatakan term_expansiontidak dapat digunakan seperti di sini di GNU Prolog). Itu tidak bekerja dengan expand_termpada SWI sekalipun.
Fatalkan
7

GNU Make, 44

.PHONY:x
$(MAKEFILE_LIST):x;sleep 1;touch $@

Saya tidak dapat mengklaim kredit untuk ini. Ini berasal dari buku Robert Mecklenburg, Managing Projects with GNU Make: The Power of GNU Make untuk Membangun Apa Pun .

Ketika make mengeksekusi makefile ini, makefile terlihat ketinggalan zaman (karena target .PHONY sudah ketinggalan zaman, sehingga mengeksekusi perintah sentuh, yang memperbarui stempel waktu dari makefile. Kemudian buat membaca ulang file dan menemukan file tersebut. makefile kedaluwarsa .... Yah, Anda sudah tahu.

Saya lebih suka ini daripada yang lain. Buat jawaban karena tidak menggunakan rekursi. Pada VM saya, jawaban Make lainnya melanjutkan proses forking dan pada kedalaman sekitar 7.000, VM terhenti dengan tidak responsif. Namun, dengan jawaban ini dapat terus tanpa batas tanpa memakan sumber daya sistem. Anda benar-benar dapat mengendur dengan bangunan ini. Saya telah melakukan lebih dari 1.000.000 iterasi tanpa degradasi sistem yang jelas.

Catatan saya harus menambahkan sleep 1agar cap waktu makefile benar-benar diperbarui setiap waktu. Anda dapat mengubah ini menjadi sleep 0.01jika Anda ingin membakar melalui iterasi sedikit lebih cepat.

Digital Trauma
sumber
6

GNU Forth, 15 byte

Golf

: : [do] [loop]

Mendefinisikan ulang (mengkompilasi ulang) kata :dan memanggil loop tak terbatas langsung [do] [loop]di dalam definisi baru (tepat pada waktu kompilasi).

Satu kategori kata tidak bisa dikompilasi. Kata-kata langsung yang disebut ini dieksekusi (dilakukan sekarang) terlepas dari apakah penerjemah teks menginterpretasikan atau mengkompilasi.

Cobalah secara Online!

zeppelin
sumber
5

Clojure, 21 byte

(defmacro a[]`(a))(a)

Mengikat kompiler dengan mendefinisikan makro yang berulang kali memancarkan panggilan untuk dirinya sendiri.

Di ponsel saya, ini menyebabkan REPL untuk menggantung dan tertinggal perangkat. Di laptop saya, ini gagal dengan StackOverflow.

Sayangnya StackOverflow terjadi secara instan, tetapi masih berlaku sesuai aturan.

Carcigenicate
sumber
5

MSBuild, 130 byte

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="X">
        <Exec Command="msbuild"/>
    </Target>
</Project>

Simpan ini sebagai file dengan .projekstensi, dan jalankan dengan msbuilddari command prompt. MSBuild akan menjalankan satu-satunya target yang hanya memunculkan msbuildproses lain .

Danko Durbić
sumber
Apakah lekukan diperlukan agar ini berfungsi? Bagaimana dengan baris baru? Biasanya memungkinkan untuk bermain golf di luar ruang putih.
Tidak, hanya saja lebih mudah dibaca. Hitungan karakter tidak termasuk spasi.
Danko Durbić
1
Ah benar. Dalam hal ini Anda mungkin harus menyebutkan hal itu di badan pos.
5

C, 31 byte

main[-1llu]={1};

Terinspirasi oleh Digital Trauma . Kompilasi dengan -mcmodel=mediumbendera.

Semoga berhasil mengompilasi ini, Anda akan membutuhkan 1,8 yottabytes RAM dan ruang disk.

MD XF
sumber
4

Mathematica 33 Bytes

Compile[{},Evaluate@While[True,]]

Kode akan berusaha mengevaluasi argumen secara simbolis sebelum kompilasi, dan argumen itu sendiri adalah loop tak terbatas. Fungsi While memiliki argumen nol detik karena tidak penting.

Kelly Lowder
sumber
"sebelum kompilasi" Ya ... tidak.
CalculatorFeline
Berikan argumen yang valid. reference.wolfram.com/language/tutorial/…
Kelly Lowder
Pertanyaannya adalah, apakah loop itu terjadi selama Compilepanggilan atau sebelum itu?
CalculatorFeline
3

Haskell (GHC, tanpa templat Haskell atau aturan penulisan ulang kustom) , 138

{-#LANGUAGE FlexibleContexts,UndecidableInstances#-}
data A x=A
class C y where y::y
instance C(A(A x))=>C(A x)where y=A
main|A<-y=pure()

Secara teoritis, ini memasuki loop tak terbatas dengan cara yang hampir sama dengan pendekatan C ++ : metode polimorfik ydipakai untuk tipe yang lebih berbelit-belit. Dalam praktiknya, ukuran tumpukan yang dialokasikan sebenarnya meluap dengan cepat:

$ ghc-7.10 wtmpf-file14146.hs 
[1 of 1] Compiling Main             ( wtmpf-file14146.hs, wtmpf-file14146.o )

wtmpf-file14146.hs:5:9:
    Context reduction stack overflow; size = 101
    Use -fcontext-stack=N to increase stack size to N
      C (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A (A t0))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    In a stmt of a pattern guard for
                   an equation for ‘main’:
      A <- y
    In an equation for ‘main’: main | A <- y = pure ()

Penghargaan untuk Luke Palmer .

berhenti mengubah counterclockwis
sumber
1

Haskell (ghc), 32 + 2 = 34 byte

{-#RULES""main=main#-}
main=main

jalankan bersama ghc -O <file>. Memicu aturan penulisan ulang untuk fungsi utama yang menulis ulang untuk hal yang sama. Satu-satunya fitur malang adalah bahwa ghc cukup pintar untuk mendeteksi ini dan berhenti setelah 100 iterasi. Saya tidak tahu cara mudah untuk menonaktifkan perilaku ini.

Program man
sumber
1

Boo, 25 byte

macro l:
 x=0 while 1>0
l

Ini mendefinisikan makro, yang mengeksekusi pada waktu kompilasi, yang mengeksekusi loop tak terbatas, dan kemudian memanggil makro.

Mason Wheeler
sumber
1

Karat, 18 byte

include!(file!());

Klasik termasuk diri. Rustc adalah waras yang mengganggu, dan secara default akan menyelamatkan setelah 128 rekursi, dan itu memperluas kedalaman-pertama sehingga pertumbuhan eksponensial tidak bekerja baik. Hal yang sama berlaku untuk solusi C dan C ++.

Nama Pengguna yang Disensor
sumber
0

Faktor , 29 16

<< [ t ] loop >>

Bagian di antara << >>dieksekusi pada waktu parse.

Adapun apa yang [ t ] loopterjadi, saya akan membiarkan Anda menebak ...

Anda dapat meletakkannya di Listener apa adanya, atau menambahkannya ke file kosakata atau skrip apa pun dengan hal-hal boilerplate yang sesuai.

fede s.
sumber
0

PHP, 19 byte

<?include __FILE__;
MD XF
sumber