Kürzester Code zum legitimen Nachlassen

146

Ich bin Entwickler und habe keine Lust, meine Arbeit zu erledigen. Ich weiß von XKCD, dass die beste Entschuldigung dafür ist, dass Ihr Code kompiliert wird . Aus diesem Grund brauche ich wahrscheinlich Code, der für immer kompiliert werden kann! Und weil ich faul bin und nicht viel tippen möchte, muss dies mit dem kürzestmöglichen Code geschehen.

Ihre Aufgabe ist es also, ein Programm zu schreiben, das syntaktisch gültig ist, aber den Compiler dazu veranlasst, in eine Endlosschleife zu gelangen.

Spezifikationen

  • Sie müssen natürlich eine Sprache verwenden, die einen Compiler hat.
  • Geben Sie die in jeder Lösung verwendete Implementierung an.
  • Das ist , also gewinnt die kürzeste gültige Lösung (in Bytes).
  • Dem Compiler kann der Arbeitsspeicher oder der Stapelspeicherplatz ausgehen.
Esolanging Fruit
quelle
1
@obarakon Ich bin anderer Meinung. Code aus der anderen Herausforderung kann nicht einfach auf diese Herausforderung portiert werden. Die Herausforderungen, während beide Endlosschleifen beinhalten, sind grundlegend unterschiedlich.
Sriotchilism O'Zaic
1
@obarakon Auch von dieser Frage keine Rede , da es sich nicht um Code-Golf handelt.
Esolanging Fruit
2
Related
Sriotchilism O'Zaic
1
Ich bin mir nicht sicher, ob es zu dieser Herausforderung passt (und selbst wenn es das tut, würde es schrecklich punkten), aber für die Interessierten ist hier, wie ich es machen würde Java: Definieren Sie einen Annotation-Prozessor (Ideone-Snippet), den Sie beim Aufrufen javacmit its verwenden -processorMöglichkeit. Dadurch bleibt die Zusammenstellung einer Klasse für immer hängen.
Aaron
6
Für die Antworten, die zum Absturz des Compilers führen: Zum Zweck des Lockerns möchte ich, dass es noch so lange dauert, bis der Compiler abstürzt.
GuitarPicker

Antworten:

16

Japt , 2 Bytes

`ÿ

Sie können dies hier online testen , aber ich würde es nicht empfehlen, da es Ihren Browser einfrieren wird.

Erläuterung

Japt verwendet die Shoco-Bibliothek zum Komprimieren von Strings. Ein Backtick weist den Compiler an, alles bis zum nächsten Backtick oder bis zum Ende der Datei zu dekomprimieren. Jedes Byte hat folgende Funktionen:

  • 00-7F sind intakt gelassen.
  • 80-BFjede Transformation in ein gemeinsamen aus zwei Kleinbuchstabenpaaren ( at, oo, th, etc.).
  • C0-DFJedes verbraucht das nächste Byte und wandelt sich in eine gemeinsame Zeichenfolge mit vier Buchstaben um .
  • E0-EFJedes davon verbraucht die nächsten drei Bytes und wandelt sich in eine "gemeinsame" Zeichenfolge mit acht Buchstaben um (beginnend bei Wherererund abwärts von dort).
  • F0-F7 Brechen Sie den Dekomprimierer, obwohl er immer noch alles bis zum Breaking-Byte zurückgibt.
  • F8-FFLassen Sie den Dekomprimierer in eine Endlosschleife eintreten. Ich bin mir nicht sicher, warum das so ist, da ich mit dem inneren Ablauf der shoco-Bibliothek nicht sehr vertraut bin (und der JavaScript-Code ist völlig unlesbar ), aber in diesem Fall ist es recht praktisch.

Ich glaube nicht, dass es eine andere Möglichkeit gibt, sich mit dem Japt-Compiler herumzuschlagen, aber man weiß nie ...

ETHproductions
quelle
10
Was meinst du damit, es ist unlesbar. Offensichtlich sind Sie einfach nicht stark genug.
Freitag,
Ich wünschte, es gäbe einen Emscripten-Decompiler ...
bis zum
58

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

Dank wchargin wird eine Menge Bytes gespart

Ein Byte gespart dank Chris H.

\input tikz
\tikz\pic

Ich bin auf diese zufällig gestoßen, als ich an Hausaufgaben arbeitete. Ich habe eine ganze Weile darauf gewartet, dass es kompiliert wird, bevor mir klar wurde, was passierte.

Dies hat zwei Teile:

\input tikz

Dies lädt das TikZ-Paket

und:

\tikz\pic

Dies startet eine \tikzUmgebung und einen Zeichenbefehl.

Was ist los

Der pdflatex-Compiler hat Probleme \tikz\picund wechselt in den interaktiven Modus, wodurch er auf unbestimmte Zeit blockiert.

Sriotchilism O'Zaic
quelle
(1/2) Ich kann das nicht reproduzieren. Ich erhalte die Meldung "Runaway argument?! \draw l\end {document}Datei wurde beim Scannen mit \tikz@next." pdflatex 3.1415926-2.5-1.40.14 (TeX Live 2013 / Debian) beendet. tikz 13.10.2010 v2.10. Dies ist Standard apt install texlive-fullunter Ubuntu 14.04.
wchargin
1
@ Wchargin Ich verwende die gleiche Version von pdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016) und es wird in der Tat auf unbestimmte Zeit wiederholt. Danke für die Tipps.
Sriotchilism O'Zaic
1
Sie können ein Byte speichern, indem Sie \picanstelle von \ draw` verwenden - genau dasselbe Verhalten (getestet mit tikz 1.142)
Chris H
3
Ich kann nicht glauben, dass ich eigentlich befürworte , TikZ nicht zu verwenden, aber die Verwendung ist hier sicherlich übertrieben. Was ist los mit dem alten \def\a{\a}\a(12 Bytes)? Oder, da dies Codegolf ist und ~standardmäßig aktiviert ist \def~{~}~(9 Byte)?
Loop Space
2
@LoopSpace Nichts ist los mit ihnen. Ich wusste einfach nicht, dass es sie gibt. Wenn Sie Ihre eigene Antwort geben möchten, fühlen Sie sich frei.
Sriotchilism O'Zaic
40

C 18 Bytes

#include __FILE__

Compiler geben in der Regel nach etwa 200-maliger Wiederholung auf.

Zählt die DOM-Konstruktion als Kompilierungsschritt? Wenn ja, dann x.htm:

<iframe src=x.htm>
Neil
quelle
14
Ich erinnere mich, dass rekursive Framesets den IE4 so stark zum Absturz brachten, dass manchmal wichtige Betriebssystemkomponenten heruntergefahren wurden. Der HTML-Code dort zählt also wahrscheinlich.
10
@ ais523, das ist, weil in den IE4 Tagen, Internet Explorer war eine "wichtige OS - Komponente".
Mark
2
Ein bisschen Zwicken und es gilt PHP: <?include __FILE__;.
Ismael Miguel
6
Diese Antwort kann nicht gepostet werden, da mein Mitarbeiter nicht hoch genug ist. Es gibt jedoch zwei Alternativen:
Rrauenza
2
Als ich es versuchte, begann die Speichernutzung von gcc schnell zu wachsen, das System reagierte nicht mehr und mein Watchdog wurde schließlich aktiviert und neu gestartet. Es war ziemlich amüsant :)
Rrauenza
38

Java, 102 95 89 88 78 Bytes

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

Dies endet mit einem, StackOverflowErrorwas passiert, weil das generische Auflösungssystem keinen Stamm bestimmen kann, gegen den die anderen Generika aufgelöst werden sollen.

Credits sind fällig .

was geschieht hier?

  1. A<T>ist nur da, um einen 1-Buchstaben-Elternteil zu haben. Es ist generisch. Ich hätte es gebrauchen können List, aber der Import und die Wiederholung von 4 Buchstaben sind zu lang.
  2. B<T> deklariert ein grundlegendes Generikum.
  3. B extends Amuss eine Hierarchie zwischen Bund haben A.
  4. extends A<A>Erstellt eine Selbstreferenz auf A<T>.
  5. A<? super B> Löst die Suche nach Generika aus A<T>
  6. B<B<T>>erstellt eine Selbstreferenz auf B<T>.
  7. A<...> a=new B<>()erzwingt die Verwendung der Generika, anstatt nur deren Definition, und erzwingt die Auflösung beim Kompilieren Bund nicht danach.
  8. A<?super Berstellt eine Nicht-Selbstreferenz, so dass wir in den Generika von sowohl eine Referenz auf einen Typ als auch auf einen anderen haben A.
  9. B<A>erstellt eine Nicht-Selbstreferenz, so dass wir in den Generika von sowohl eine Referenz auf einen Typ als auch auf einen anderen haben B.

Nun, der Typ Ahat generischen Typ Aund B, aber welcher ist zu wählen? Vergessen Sie sich selbst, versuchen wir es zu lösen B. Klingeln.

Okay, Bhat Generika Typ Aund B, aber welches ist zu wählen? Vergessen Sie sich selbst, versuchen wir es zu lösen A. Pong.

Diese Art von Rekursion kann nicht wirklich vermieden werden , weil es berechtigte Fälle wie A<B<A<B<A<B<Object>>>>>>: zum Beispiel eines JSON - Objekt: List<Map<String,Map<String,List<Map<String,List<String>>>>>>.

Kompilierungsergebnis

$ 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)

Auf meinem System stoppt der Stack-Trace, nachdem 1024 Zeilen angezeigt wurden. Dies sind tatsächlich die 4 gleichen Zeilen, die 256 Mal wiederholt wurden, was eine unendliche Rekursion beweist. Ich werde dir die ganze Spur ersparen.

Ersparnisse

  1. 102 → 95 Bytes: interface+ implementsdurch class+ ersetzt extends.
  2. 95 → 89 Bytes: ersetzt Longdurch A(zweimal).
  3. 89 → 88 Bytes: Verwendeter Diamantoperator ( new B<A>()new B<>()).
  4. 88 → 78 Bytes: Die Variablendeklaration wurde dank VoteToClose in ein Klassenmitglied verschoben .
Olivier Grégoire
quelle
1
Was schaue ich an
Addison Crump
Sie können dies auf 78 Bytes verkürzen mit:class A<T>{}class B<T>extends A<A<?super B<B<T>>>>{A<?super B<A>>b=new B<>();}
Addison Crump
@VoteToClose Sie sehen ein erstklassiges Beispiel für Unentscheidbarkeit in Javas Generika. Jedes Generikum soll gegen eine gemeinsame Wurzel aufgelöst werden, gegen die dann validiert wird. Die Sache hier ist, dass das Generikum von Beinen unentscheidbaren Verweis auf das Generikum von Aenthält, der wiederum einen unentscheidbaren Verweis auf das Generikum von B enthält. Wenn der Resolver nicht entscheiden kann, prüft er eingeschlossene Verweise, aber hier verweisen beide Generika aufeinander auf eine unentschlossene Art und Weise (hauptsächlich dank Selbstreferenzen und dem superSchlüsselwort. Der Resolver ping-pongs also tatsächlich zwischen den beiden Generika.
Olivier Grégoire
Ich habe darüber nachgedacht, ein Kompilierungsproblem mit zyklischen Anmerkungen zu erstellen: public @interface X {@X(x=X.class)Class<? extends X> x();}... Aber ich habe schnell gemerkt, warum das nicht funktioniert, lol.
Magic Octopus Urn
34

GNU Makefile, 8 7 Bytes

Ein Byte gespart dank KonradRudolph

Gespeichert als Makefileund aufgerufen von make:

x:;make

Dies erzeugt eine unendliche Build-Rekursion für das erste gefundene Ziel "x".

Unnötig zu erwähnen, dass Sie diese Gabelbombe nicht wirklich auf Ihrem Produktionsserver ausführen möchten. :-)

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
...

Alternative Version, 5 Bytes

Vorgeschlagen von KonradRudolph:

x:;$_

$_ist ein Verweis auf das letzte Argument des vorherigen Befehls. Insbesondere wird es hier als absoluter Pfad zum auszuführenden Befehl aufgelöst - der makeselbst ist.

Dies sollte in einer echten Bash-Umgebung funktionieren, jedoch nicht unter Windows + MinGW.

Arnauld
quelle
2
Hmm, ich glaube nicht, dass das Makefile makewirklich kompiliert wird (es interpretiert es nur).
Zeppelin
3
@zeppelin Du hast recht, das ist wahrscheinlich eine Grenzantwort. Das heißt, dass Übermittlungen, die eine Makro-Rekursion auf der Präprozessor-Ebene beinhalteten, niemals beginnen, einen tatsächlichen Code zu kompilieren.
Arnauld
11
Es passt zum angestrebten Ziel: einen unendlichen Build-Prozess. +1!
YSC
23

C ++, 60 58

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

Dadurch werden rekursiv Instanzen von class amit verschiedenen Vorlagenparametern erstellt. GCC 7.0 stoppt nach 900 Rekursionsstufen mit tonnenweise Fehlern, operator->weil es nicht mehr privat ist, aber beispielsweise bei ICC 17 und Microsoft (R) C / C ++ Optimizing Compiler 19 tritt eine Zeitüberschreitung bei Godbolt auf .

Das Problem dabei ist, dass wahrscheinlich allen Compilern irgendwann der Speicher ausgeht, sodass dies auch ohne Rekursionsbeschränkungen zum Erliegen kommt. Gleiches gilt wahrscheinlich auch für die Antwort von Clojure.

Edit: 2 Bytes von bolov gespeichert - Danke

Christoph
quelle
1
kürzer:a<int>i=i->b;
bolov
1
@Pockets, wie ich in meiner Antwort angegeben habe, weil das operator->in einer Klasse standardmäßig privat ist. Innerhalb einer Struktur ist sie öffentlich und i->bkann daher darauf zugreifen.
Christoph
1
gcc 4.4.7 scheint hier auf unbestimmte Zeit zu hängen. Warten auf Unendlich oder darauf, dass die Ausgabe angezeigt wird, je nachdem, was zuerst eintritt. Will update
osuka_
1
@osuka_ Läuft es noch?
Christoph
1
@Christoph Nein, es ist mit einem SIGSEGV abgestürzt, nachdem ich es ein paar Tage laufen gelassen habe. Ich habe allerdings vergessen zu aktualisieren - danke für die Erinnerung!
osuka_
23

Perl , 15 13 Bytes

BEGIN{{redo}}

Probieren Sie es online!

Jetzt mit 2 Bytes gespart: @Zaid erinnerte mich an eine schnellere Möglichkeit, eine Schleife in Perl zu machen.

Das ist ganz einfach: Es wird nur ein Parser-Hook mit einer Endlosschleife installiert, sodass das Parsen des Codes unendlich lange dauert. (Perl hat den Vorteil, dass Sie mitten in der Analyse beliebigen Code ausführen können. Die Parser-Hooks sind in Perl selbst angegeben und werden häufig verwendet, um beispielsweise Bibliotheken zu importieren oder die Analyseregeln für einen Bezeichner zu ändern, den Sie behandeln möchten ein Stichwort.) Das Online ausprobieren! Der obige Link gibt die -cOption (den Code zu kompilieren, um die Syntax auf Richtigkeit zu überprüfen, aber nicht auszuführen), um zu beweisen, dass die Endlosschleife beim Kompilieren auftritt.

Für den Fall, dass Sie sich über "Kompilierungszeit" in einer Skriptsprache wundern: Perl kompiliert tatsächlich in Bytecode und führt dann den Bytecode aus. Dies ist jedoch ein Detail, das bei der Programmierung selten relevant ist. Die -MO=Befehlszeilenoptionsfamilie kann verwendet werden, um andere Aufgaben mit dem Bytecode auszuführen als ihn auszuführen (obwohl dies bei diesem Programm nicht der Fall ist, da die Endlosschleife erfolgt, bevor der Bytecode generiert werden kann).


quelle
1
a:goto asieht auch gut aus (selbe bytecount leider).
Dada
3
BEGIN{{redo}}Sparen Sie ein paar Bytes
Zaid
20

C ++, 37 30 29 Bytes

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

Es wird der zukünftige Auto-Funktionsparameter verwendet. Es wurde in C ++ 17 vorgeschlagen, aber ich glaube nicht, dass es es geschafft hat. gccunterstützt es jedoch als erweiterung.

Grundsätzlich gilt

void foo(auto p);

ist äquivalent zu

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

Der Code versucht, fmit verschiedenen Vorlagenargumenten rekursiv zu instanziieren . gccscheitert mit

Schwerwiegender Fehler: Die Tiefe der Vorlageninstanziierung überschreitet das Maximum von 900 (verwenden Sie -ftemplate-depth =, um das Maximum zu erhöhen).

Mit -ftemplate-depth=10000bekam ich es auf Godbolt zu spucken "Killed - Bearbeitungszeit überschritten".

Überprüfen Sie es auf Godbolt


1 Byte von Quentin gespeichert. Danke.

bolov
quelle
1
Ein Byte kann mit intals Rückgabetyp gespeichert werden :)
Quentin
In der Tat haben es autoFunktionsparameter nicht in C ++ 17 geschafft. und int f() { ... }, a;ist auch keine rechtliche Erklärung, als ich sie das letzte Mal überprüft habe. (Sie können Funktionsdeklarationen nicht mit Variablendeklarationen wie diesen mischen.) Was Sie hier haben, ist ein extrem GCC-spezifischer Dialekt von C ++. Nicht, dass daran in diesem Zusammenhang etwas auszusetzen wäre. :)
Quuxplusone
19

Common Lisp, 8 Bytes

#.(loop)

Der Compiler versucht, ein Formular zu lesen, und trifft auf das Sharpsign-Dot- Reader-Makro, das den Code zum Zeitpunkt des Lesens auswertet und dessen Ergebnis als Formular zum Kompilieren verwendet. Hier ist der ausgeführte Code eine Endlosschleife.

Core-Dump
quelle
17

TeX, 9 Bytes

\def~{~}~

TeX funktioniert durch das Erweitern von Makros. Meistens haben die Makros von TeX (auch Steuersequenzen genannt ) die Form, \nameaber es ist auch möglich, bestimmte Zeichen als Makros zu definieren, die als aktive Zeichen bezeichnet werden . Das Zeichen ~ist in TeX standardmäßig aktiv und kann daher ohne weitere Deklaration als Makroname verwendet werden. Das \def~{~}oben definierte wird ~so definiert , dass es sich zu erweitert ~. Das heißt, wann immer TeX darauf stößt ~, ersetzt es es durch ~und überprüft es dann erneut, was bedeutet, dass es auf ein völlig neues Vorkommen stößt ~und dieses durch ersetzt ~. Dies definiert die Endlosschleife. Alles was dann benötigt wird, ist die Schleife zu starten und das ist, was das Finale ~tut.


In Bearbeitung hinzugefügt

Um dies korrekt zu kompilieren , rufen Sie Folgendes auf:

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

Die -iniFlagge sagt, pdftexsoll kompiliert eine neue Formatdatei. Dies ist ein vorkompilierter Satz von Definitionen, der geladen werden kann, wenn TeX später aufgerufen wird, um die Verarbeitung eines Dokuments zu beschleunigen (LaTeX2e ist ein Beispiel dafür). Ich vermute, dass das &pdftexein paar Bytes hinzufügt und die Summe auf 17 erhöht.

Loop Space
quelle
Geschieht dies zur Kompilierungszeit? Die Frage erfordert, dass die Endlosschleife beim Kompilieren ausgeführt wird, nicht beim Ausführen.
@ ais523 Hatte noch nicht ganz darüber nachgedacht. Ich habe die TikZ-Antwort abgehört. Ich habe eine Alternative hinzugefügt, die definitiv auf Kosten einiger weiterer Bytes kompiliert wird.
Loop Space
2
@ ais523: Wie immer sind "Kompilieren" und "Ausführen" zwei Seiten derselben Medaille. Persönlich stelle ich mir TeX-Quellcode als "Kompilieren" in PDF-Dokumenten vor (die dann beim Anzeigen "ausgeführt" werden), genauso wie C ++ - Quellcode in EXE-Dateien "kompiliert" wird (die dann von "ausgeführt" werden Laufen). Sie können sich das pdftexProgramm aber auch als TeX-Eingabe "interpretieren", um eine PDF-Datei als "Ausgabe" zu erzeugen - genauso wie das g++Programm C ++ -Eingaben "interpretiert", um eine EXE-Datei als "Ausgabe" zu erzeugen. ;)
Quuxplusone
13

Haskell, 25 + 17 = 42 Bytes

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

Ein einfaches Haskell-Metaprogramm, das einen unendlichen Wert definiert und versucht, diesen Wert zur Kompilierungszeit zu berechnen.

Aufruf mit ghc -XTemplateHaskell <file.hs>(+17 für den Parameter an den Compiler)

user2407038
quelle
Funktioniert $(let a=a in a)nicht (für 32 Bytes)?
Ry
1
Nee! GHC ist zu schlau. Jede Endlosschleife des Formulars let a = a in awird in eine Ausnahme umgeschrieben, die im Gegensatz zu einer Endlosschleife lediglich einen Compilerfehler verursacht. (obwohl dies vielleicht mit einem anderen Haskell-Compiler funktionieren würde, aber ich habe keinen zur Hand, um es zu versuchen)
user2407038
Es funktioniert mit runghc für mich, also würde ich sagen, dass es gültig ist. (Tatsächlich funktioniert es auch mit ghc. 8.0.1 hier.)
Ry
"Ja wirklich?" Ich bin auch auf ghc 8.0.1 - für mich gibt es Exception when trying to run compile-time code: <<loop>>sowohl im Interpreter als auch beim Kompilieren ... technisch gesehen stirbt der obige Code mit einer Ausnahme, aber einem Stapelüberlauf, der von der Spezifikation ausdrücklich erlaubt wird - und wenn Sie unendlich viel Gedächtnis hätten, würde es sich wirklich für immer wiederholen. Die <<loop>>Ausnahme wird lange vor dem Ende des Arbeitsspeichers meines Computers ausgelöst.
user2407038
12

Gradle, 10 9 Bytes

for(;;){}

mit dem obigen Code in einer build.gradleDatei platziert. Gradle verwendet Groovy als Basissprache, also sprechen wir hier wirklich über Groovy, aber da die Frage nach der Build-Zeit lautete, hielt ich Gradle für angemessener.

Wenn Sie Gradle-Build-Befehle mit dem oben genannten Code ausführen, wird die spitze, bosskompatible Build-Statuszeile ausgegeben:

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

Wenn Sie eine Erhöhung anstreben, fügen Sie das Debug- -dFlag für Folgendes hinzu :

$ 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

das sieht nicht nur beeindruckend kompliziert aus, sondern aktualisiert sich auch mit einem neuen Satz von:

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.

Statuszeilen alle 10 Sekunden lassen es so aussehen, als wäre der Build mit wichtigen technischen ... Dingen beschäftigt.

Matias Bjarland
quelle
8

SWI-Prolog, 34 Bytes

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

Erläuterung

term_expansion/2 wird vom Compiler automatisch aufgerufen, bevor der Code kompiliert wird, um einige Begriffe im Quellcode in andere umzuwandeln.

Hier stellen wir eine neue Regel für term_expansion/2: repeat,1=0..

repeat/0 ist ein Prädikat, das immer erfolgreich ist und unendlich viele Auswahlpunkte bietet.

1=0versucht zu vereinen 1mit 0, was immer ist false. Dies führt dazu, dass der Compiler zurückverfolgt repeat(da er immer einen Auswahlpunkt bereitstellt) und es 1=0erneut versucht , usw.

Tödlich
quelle
Funktioniert nicht in GNU Prolog, daher gehe ich davon aus, dass dies implementierungsspezifisch ist. Möglicherweise möchten Sie den Namen eines Compilers in die Überschrift einfügen. (Ich gehe von SWI Prolog aus.)
@ ais523 Danke, habe nicht bei anderen Distributionen nachgesehen, aber da Compiler-Sachen normalerweise ziemlich spezifisch sind, hätte ich es besser
wissen
@ ais523 jedoch nach diesem , könnten Sie in der Lage sein zu verwenden , expand_termanstatt (wie sie sagt , term_expansionkann nicht wie hier in GNU Prolog verwendet werden). Bei expand_termSWI funktioniert das allerdings nicht .
Fatalize
7

GNU Make, 44

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

Das kann ich nicht gutschreiben. Es ist aus Robert Mecklenburgs Buch Managing Projects with GNU Make: Die Kraft von GNU Make zum Bauen von Gegenständen abgeleitet .

Wenn make dieses Makefile ausführt, sieht es, dass das Makefile veraltet ist (da das PHONY-Ziel veraltet ist, führt es den Touch-Befehl aus, der den Zeitstempel des Makefiles aktualisiert. Dann liest make die Datei erneut und entdeckt das makefile ist nicht mehr aktuell .... Na du kommst auf die Idee.

Ich ziehe dies der anderen Antwort vor, da es keine Rekursion verwendet. Auf meiner VM gabelt die andere Antwort weiter Prozesse und bei einer Tiefe von etwa 7.000 kommt die VM nicht mehr zum Stillstand. Mit dieser Antwort ist es jedoch möglich, unbegrenzt fortzufahren, ohne Systemressourcen zu verbrauchen. Sie werden wirklich in der Lage sein, mit diesem Build nachzulassen. Ich habe über 1.000.000 Iterationen ohne erkennbare Systemverschlechterung durchgeführt.

Hinweis Ich musste das hinzufügen, sleep 1damit der Makefile-Zeitstempel tatsächlich jedes Mal aktualisiert wird. Sie können dies ändern, sleep 0.01wenn Sie möchten, dass Iterationen etwas schneller durchgebrannt werden.

Digitales Trauma
quelle
6

GNU Forth, 15 Bytes

Golf gespielt

: : [do] [loop]

Definiert das Wort neu (kompiliert es neu) :und ruft eine sofortige Endlosschleife [do] [loop]innerhalb der neuen Definition auf (direkt zur Kompilierungszeit).

Eine Kategorie von Wörtern wird nicht kompiliert. Diese sogenannten Sofortwörter werden ausgeführt (werden jetzt ausgeführt), unabhängig davon, ob der Textinterpreter interpretiert oder kompiliert.

Probieren Sie es online!

Zeppelin
quelle
5

Clojure, 21 Bytes

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

Bindet den Compiler, indem ein Makro definiert wird, das wiederholt Aufrufe an sich selbst ausgibt.

Auf meinem Telefon führt dies dazu, dass die REPL aufhängt und das Gerät verzögert. Auf meinem Laptop schlägt dies mit einem StackOverflow völlig fehl.

Leider passiert der StackOverflow sofort, ist aber nach den Regeln immer noch gültig.

Karzigenat
quelle
5

MSBuild, 130 Bytes

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

Speichern Sie diese Datei als Datei mit der .projErweiterung und führen Sie sie msbuildan der Eingabeaufforderung aus. MSBuild führt das einzige Ziel aus, das einfach einen anderen msbuildProzess erzeugt.

Danko Durbić
quelle
Ist die Einrückung erforderlich, damit dies funktioniert? Was ist mit den Zeilenumbrüchen? Es ist normalerweise möglich, Leerzeichen auszuspielen.
Nein, es ist nur einfacher zu lesen. Die Zeichenanzahl enthält keine Leerzeichen.
Danko Durbić
1
Ah richtig. In diesem Fall sollten Sie das wahrscheinlich im Hauptteil des Posts erwähnen.
5

C 31 Bytes

main[-1llu]={1};

Inspiriert von Digital Trauma . Kompilieren Sie mit der -mcmodel=mediumFlagge.

Viel Glück beim Kompilieren, Sie benötigen 1,8 Yottabyte RAM und Festplattenspeicher.

MD XF
quelle
4

Mathematica 33 Bytes

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

Der Code versucht, das Argument vor dem Kompilieren symbolisch auszuwerten, und das Argument selbst ist eine Endlosschleife. Die While-Funktion hat ein Null-Sekunden-Argument, da es nicht wichtig ist.

Kelly Lowder
quelle
"vor dem kompilieren" Ja ... nein.
CalculatorFeline
Bitte geben Sie ein gültiges Argument an. reference.wolfram.com/language/tutorial/…
Kelly Lowder
Die Frage ist, ob die Schleife während des CompileAnrufs oder davor stattfindet.
CalculatorFeline
3

Haskell (GHC, ohne Template-Haskell oder benutzerdefinierte Umschreibregeln) , 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()

Theoretisch tritt dies in eine Endlosschleife ein, ähnlich wie dies beim C ++ - Ansatz der Fall ist : Die polymorphe Methode ywird für immer mehr verschachtelte Typen instanziiert. In der Praxis läuft die standardmäßig zugewiesene Stapelgröße schnell über:

$ 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 ()

Dank an Luke Palmer .

hörte auf, sich gegen den Uhrzeigersinn zu drehen
quelle
1

Haskell (ghc), 32 + 2 = 34 Bytes

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

renn mit ghc -O <file>. Löst eine Umschreiberegel für die Hauptfunktion aus, die auf dieselbe Sache umschreibt. Die einzige unglückliche Eigenschaft ist, dass ghc klug genug ist, dies zu erkennen und nach 100 Iterationen anzuhalten. Ich kenne keine einfache Möglichkeit, dieses Verhalten zu deaktivieren.

Programm Mann
quelle
1

Boo, 25 Bytes

macro l:
 x=0 while 1>0
l

Dies definiert ein Makro, das zur Kompilierungszeit ausgeführt wird, eine Endlosschleife ausführt und dann das Makro aufruft.

Mason Wheeler
quelle
1

Rust, 18 Bytes

include!(file!());

Klassisches Self-Include. Rustc ist jedoch ärgerlich vernünftig und wird standardmäßig nach 128 Rekursionen aussteigen, und es erweitert sich zuerst in der Tiefe, so dass auch das exponentielle Wachstum nicht funktioniert. Gleiches gilt jedoch für die C- und C ++ - Lösungen.

CensoredUsername
quelle
0

Factor , 29 16

<< [ t ] loop >>

Der Teil zwischen << >>wird zur Analysezeit ausgeführt.

Was das [ t ] loopangeht, lass ich dich raten ...

Sie können das in den Listener einfügen, wie es ist, oder es zu einem beliebigen Vokabular oder einer Skriptdatei mit den entsprechenden Boilerplate-Inhalten hinzufügen.

fede s.
quelle
0

PHP, 19 Bytes

<?include __FILE__;
MD XF
quelle