合法的にスラックオフするための最短コード


146

私は開発者であり、自分の仕事をする気はありません。私はXKCDから、あなたのコードがコンパイルされていることを怠ることの最良の言い訳であることを知っています。このため、永久コンパイルできるコードが必要だと思います!そして、私は怠け者であり、あまり入力する必要がないので、これは可能な限り短いコードで行わなければなりません。

したがって、あなたのタスクは、構文的には有効であるが、コンパイラーが無限ループに入るプログラムを作成することです。

仕様書

  • もちろん、コンパイラーを備えた言語を使用する必要があります。
  • 各ソリューションで使用される実装を指定します。
  • これはであるため、最短の有効なソリューション(バイト単位)が優先されます。
  • コンパイラは、メモリまたはスタック領域が不足することで終了する場合があります。

1
@obarakon私は同意しません。他のチャレンジのコードをこのチャレンジに簡単に移植することはできません。両方に無限ループが含まれる一方で、課題は根本的に異なります。
スリオチリズムO'Zaic

1
@obarakon これはコードゴルフではないので、この質問の欺peでもありません。
エソランジングフルーツ


1
私は(とそれがない場合でも、それはひどくスコアでしょう)、それはこの挑戦に合うわからないんだけど、興味がある方のために、ここで私はそれを行うだろうかですJava:定義する注釈プロセッサを呼び出すときに使用します(ideoneスニペット)をjavacそのと-processorオプション。クラスのコンパイルが永久にハングします。
アーロン

6
コンパイラーのクラッシュにつながる答えについて:スラックの目的のために、クラッシュするのにできるだけ長くかかるようにしたいと思うと思います。
GuitarPicker

回答:


16

Japt、2バイト

`ÿ

こちらでオンラインテストできますが、ブラウザがフリーズするのでお勧めしません。

説明

Japtは、文字列の圧縮にshocoライブラリを使用します。バックティックは、次のバックティックまたはファイルの終わりまですべてを解凍するようコンパイラーに指示します。各バイトは次のことを行います。

  • 00-7F そのままです。
  • 80-BFそれぞれは、共通の小文字2文字対(変身atooth、など)。
  • C0-DFそれぞれが次のバイトを消費し、共通の4文字の文字列に変換します
  • E0-EFそれぞれが次の3バイトを消費し、「共通」の8文字の文字列に変換されます(Wherererそこから始まり、そこから下り坂になります)。
  • F0-F7 圧縮解除プログラムを解除しますが、それでもまだ分割バイトまですべてを返します。
  • F8-FF減圧装置が無限ループに入るようにします。shocoライブラリーの内部動作にあまり詳しくないので(そしてJavaScriptコードが完全に読めないので)、これがなぜなのかわかりませんが、この場合は非常に便利です。

私はJaptコンパイラを台無しにする他の方法があるとは思わないが、あなたは決して知らない...


10
読めないというのはどういう意味ですか。明らかに、あなたは十分な努力をしていないだけです。
fənɛtɪk

emscriptenの逆コンパイラがあればいいのに…
tbodt

58

TikZ(pdfTeX 3.14159265-2.6-1.40.17)、85 79 74 24 22 21バイト

wcharginのおかげで大量のバイトを節約

Chris Hのおかげで1バイト節約

\input tikz
\tikz\pic

宿題に取り組んでいたときに、実際に偶然これに遭遇しました。何が起こっているのか気付く前に、コンパイルするのを待つのにかなりの時間を費やしました。

これには2つの部分があります。

\input tikz

これにより、TikZパッケージがロードされます。

そして:

\tikz\pic

これにより、\tikz環境と描画コマンドが開始されます。

何が起こっている

pdflatexコンパイラーはに問題があり\tikz\pic、対話モードに入り、無期限に停止します。


(1/2)これを再現できません。「Runaway argument?!」の\draw l\end {document}使用をスキャン中にファイルが終了しました\tikz@next.pdflatex 3.1415926-2.5-1.40.14(TeX Live 2013 / Debian)。tikz 2010/10/13 v2.10 これはapt install texlive-fullUbuntu 14.04の標準です。
wchargin

1
@wchargin同じバージョンを使用しpdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016) ていますが、実際には無限にループします。ヒントをありがとう。
スリオチリズムオジーク

1
\pic\ draw`の代わりにバイトを保存できます-まったく同じ動作(tikz 1.142を使用してテスト済み)
Chris H

3
私は実際にTikZを使用しないことを主張しているとは信じられませんが、確かにここで使用するのはやり過ぎです。古い\def\a{\a}\a(12バイト)の何が問題になっていますか?または、これはコードゴルフであり~、デフォルトでアクティブになっているため\def~{~}~(9バイト)?
ループスペース

2
@LoopSpace彼らには何も悪いことはありません。あなたがあなた自身の答えを作りたいなら、気軽に。
スリオチリズムO'Zaic

40

C、18バイト

#include __FILE__

コンパイラーは通常、約200回再帰した後にあきらめます。

DOM構築はコンパイルステップとしてカウントされますか?もしそうなら、それからx.htm

<iframe src=x.htm>

14
再帰的なフレームセットはIE4をクラッシュさせるために使用されていたため、時々重要なOSコンポーネントを壊してしまったことを覚えています。したがって、そこにあるHTMLはおそらく重要です。

10
@ ais523、これは、IE4の時代、Internet Explorer 「重要なOSコンポーネント」だったためです。
マーク

2
少し調整して、有効なPHPです:<?include __FILE__;
イスマエルミゲル

6
私の担当者が十分に高くないため、この回答を投稿できませんが、2つの選択肢があります:#include "/ dev / zero"と#include "/ dev / stdin"-最初のものを注意して実行してください!!
rrauenza

2
試してみると、gccのメモリ使用量が無制限に急速に増加し始め、システムが応答しなくなり、最終的にウォッチドッグが起動して再起動しました。それはかなり面白かったです:)
rrauenza

38

Java、102 95 89 88 78バイト

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

これStackOverflowErrorは、ジェネリック解決システムが他のジェネリックを解決するルートを決定できないために発生します。

期限のあるクレジット

そこで何が起こるの?

  1. A<T>1文字の親を持つためだけにあります。ジェネリックです。を使用することもできましたListが、インポートと4文字の繰り返しが長すぎます。
  2. B<T> 基本的なジェネリックを宣言します。
  3. B extends A間の階層構造を有することが必要であるBA
  4. extends A<A>で自己参照を作成しA<T>ます。
  5. A<? super B> ジェネリックの検索をトリガーします A<T>
  6. B<B<T>>で自己参照を作成しB<T>ます。
  7. A<...> a=new B<>()単にジェネリックを定義するのではなく、ジェネリックの使用を強制し、Bその後ではなく、コンパイル時に解決を強制します。
  8. A<?super B非自己参照を作成するため、のジェネリックには1つの型と別の型の両方への参照がありAます。
  9. B<A>非自己参照を作成するため、のジェネリックには1つの型と別の型の両方への参照がありBます。

ここで、型にAはジェネリック型ABがありますが、どちらを選択するのですか?自己を忘れて、解決してみましょうB。ピン。

さて、Bジェネリック型ABはありますが、どちらを選択するのですか?自己を忘れて、解決してみましょうA。ポン。

この種の再帰はA<B<A<B<A<B<Object>>>>>>、たとえばJSONオブジェクト:などの正当なケースがあるため、実際に回避することはできませんList<Map<String,Map<String,List<Map<String,List<String>>>>>>

コンパイル結果

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

私のシステムでは、1024行が表示された後にスタックトレースが停止します。実際には、同じ4行が256回繰り返されているため、無限の再帰が証明されています。その痕跡全体をspareしまない。

貯蓄

  1. 102→95バイト:interface+ implementsclass+に置き換えますextends
  2. 95→89バイト:置き換えLongA(2回)。
  3. 89→88バイト:ダイヤモンド演算子(new B<A>()new B<>())を使用。
  4. 88→78バイト:VoteToCloseのおかげで、変数宣言をクラスメンバーに移動しました

1
私は何を見ている
アディソンクランプ

次の方法でこれを78バイトに短縮できます。class A<T>{}class B<T>extends A<A<?super B<B<T>>>>{A<?super B<A>>b=new B<>();}
Addison Crump

@VoteToCloseあなたは、Javaのジェネリックにおける決定不能性の典型的な例を見ていきます。各ジェネリックは共通のルートに対して解決されることになっており、そのルートに対して検証されます。ここでの事柄は、ジェネリックのジェネリック BへのA未決定の参照が含まれており、ジェネリックのジェネリックへの未決定の参照が含まれていることです。リゾルバが決定できない場合、含まれている参照をチェックしますが、ここでは両方のジェネリックが相互に参照しています決定不能な方法で(自己参照とに主に感謝superキーワードリゾルバように、2つのジェネリック医薬品の間に、実際のping-pongs。。
オリヴィエ・グレゴワール

私は、循環アノテーションを使用してコンパイル時の問題を作成することを考えていましたpublic @interface X {@X(x=X.class)Class<? extends X> x();}
魔法のタコUr

34

GNU Makefile、8 7バイト

KonradRudolphのおかげで1バイト節約

次の名前で保存されMakefile、呼び出されましたmake

x:;make

これにより、最初に見つかっ"x"たターゲットで無限のビルド再帰が生成されます。

言うまでもなく、このフォーク爆弾を運用サーバーで実行したくないの当然です。:-)

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

代替バージョン、5バイト

KonradRudolphによる提案:

x:;$_

$_前のコマンドの最後の引数への参照です。より具体的には、ここでは、実行中のコマンドへの絶対パスとして解決されます-これmake自体です。

これは正規のBash環境では正常に機能するはずですが、Windows + MinGWでは機能しません。


2
うーん、Makefileをmake実際にコンパイルしているとは思いません(単に解釈するだけです)。
ツェッペリン

3
@zeppelinそうですね、これはおそらく境界線上の答えでしょう。そうは言っても、プリプロセッサレベルでのマクロ再帰を伴うサブミッションは、実際のコードのコンパイルも開始しません。
アーナルド

11
それは意図した目標、つまり無限のビルドプロセスを持つことに適合します。+1!
YSC

23

C ++、60 58

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

これによりclass a、さまざまなテンプレートパラメータを持つインスタンスが再帰的に作成されます。GCC 7.0は900回の再帰レベルで停止しますoperator->が、たとえばgodboltではICC 17やMicrosoft(R)C / C ++ Optimizing Compiler 19がタイムアウトするなどプライベートであるという大量のエラーが発生します

問題は、おそらくすべてのコンパイラーがある時点でメモリーを使い果たすため、再帰制限がなくてもこれが停止することです。同じことがおそらくClojureの回答にも当てはまります。

編集:bolovによって保存された2バイト-ありがとう


1
短縮:a<int>i=i->b;
bolov

1
@Pocketsは、私の回答で述べたようにoperator->、クラス内でデフォルトがプライベートになっているためです。構造体内ではパブリックなので、i->bアクセスできます。
クリストフ

1
gcc 4.4.7はここで無期限にハングアップするようです。無限、または出力の表示のいずれか早い方を待ちます。更新します
osuka_

1
@osuka_はまだ実行中ですか?
クリストフ

1
@Christophいや、数日間走らせた後にSIGSEGVでクラッシュした。更新するのを忘れましたが、リマインダーをありがとう!
osuka_

23

Perl15 13バイト

BEGIN{{redo}}

オンラインでお試しください!

これで2バイトが保存されました。@ Zaidは、Perlでループを行うためのより簡単な方法を思い出しました。

これは非常に簡単です:無限ループのパーサーフックをインストールするだけで、コードの解析に無限に時間がかかります。(Perlは、解析の途中で任意のコードを実行できるという点で優れています。パーサーフックはPerl自体で指定され、ライブラリのインポートや、処理する識別子の解析ルールの変更などによく使用されますキーワード。)オンラインで試してみてください!上記のリンクは、-cコンパイル時に無限ループが発生することを証明するためのオプションを提供します(コードをコンパイルして構文が正しいことを確認しますが、実行しません)。

スクリプト言語の「コンパイル時間」について疑問がある場合:Perlは実際にバイトコードにコンパイルされてからバイトコードを実行しますが、これはプログラミングの際にほとんど関係のない詳細です。-MO=(バイトコードを生成することができます前に、無限ループが発生したとして、このプログラムではないが)コマンドラインオプションの家族はそれを実行している以外のバイトコードで物事を行うために使用することができます。


1
a:goto a見栄えもいい(悲しいことに同じバイト数)。
ダダ

3
BEGIN{{redo}}あなたにいくつかのバイトを保存します
ザイド

20

C ++、 37 30 29バイト

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

将来の自動機能パラメーターを使用します。C ++ 17に提案されましたが、私はそれができたとは思いません。gccただし、拡張機能としてサポートしています。

基本的に

void foo(auto p);

に等しい

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

コードはf、異なるテンプレート引数を使用して再帰的にインスタンス化しようとします。gcc失敗する

致命的エラー:テンプレートのインスタンス化の深さが最大900を超えています(最大値を増やすには-ftemplate-depth =を使用してください)

-ftemplate-depth=10000私はそれを吐き出すようになった- godboltの「殺しの処理時間が超過」。

ゴッドボルトで確認してください


クエンティンによって保存された1バイト。ありがとうございました。


1
int戻り値の型として使用することで1バイトを保存できます:)
クエンティン

実際、auto関数のパラメーターはC ++ 17には含まれていません。またint f() { ... }, a;、前回チェックしたときの法的宣言ではありません。(関数宣言とそのような変数宣言を混在させることはできません。)ここで得られるのは、C ++の非常に GCC固有の方言です。この文脈で何か問題があるわけではありません。:)
Quuxplusone

19

Common Lisp、8バイト

#.(loop)

コンパイラはフォームを読み取ろうとし、sharpsign-dotリーダーマクロに遭遇します。このマクロは読み取り時にコードを評価し、その結果をコンパイルするフォームとして使用します。ここでは、実行されるコードは無限ループです。


17

TeX、9バイト

\def~{~}~

TeXはマクロを展開することで機能します。ほとんどの場合、TeXのマクロ(制御シーケンスとも呼ばれます)は形式です\nameが、特定の文字をマクロとして定義することもできます。これらはアクティブ文字と呼ばれます。この文字~はプレーンTeXでデフォルトでアクティブになっているため、さらに宣言することなくマクロ名として使用できます。\def~{~}上記定義において~、それは、に展開するように~。つまり、TeXが検出されるたびに、TeX ~によって置換され~、再置換が再検査~され~ます。つまり、TeX はまったく新しいオカレンスに遭遇し、置換されます。これは無限ループを定義します。必要なのは、ループを開始する~ことだけです。これが最終的な処理です。


編集で追加

これを適切にコンパイルするには、次のように呼び出します。

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

-iniフラグは、と言うpdftexべきでコンパイル新しい形式のファイルを。これはプリコンパイル済みの定義セットで、後でTeXを呼び出してドキュメントの処理を高速化するときに読み込むことができます(LaTeX2eはこの例です)。を&pdftex追加すると、合計で17バイトになります。


これはコンパイル時に起こりますか?質問では、実行中ではなくコンパイル中に無限ループが発生する必要があります。

@ ais523そのビットについて完全に考えていなかった。私はTikZの答えをリフしていました。私は間違いなくコンパイルされた代替手段を追加しましたが、数バイトは犠牲になります。
ループスペース

2
@ ais523:いつものように、「コンパイル」と「実行」は同じコインの両面です。個人的には、TeXソースコードは、C ++ソースコードが.exeファイルに「コンパイル」されて(実行される)のと同じように、PDFドキュメントに「コンパイル」されると考えています。ランニング)。しかし、pdftexプログラムをTeX入力を「解釈」してPDFを「出力」として生成することも考えられます。プログラムがg++C ++入力を「解釈」して.exeファイルを「出力」として生成するのと同じです。;)
Quuxplusone

13

Haskell、25 + 17 = 42バイト

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

無限値を定義し、コンパイル時にその値を計算しようとする単純なHaskellメタプログラム。

呼び出しghc -XTemplateHaskell <file.hs>(コンパイラーへのパラメーターの+17)


動作し$(let a=a in a)ない(32バイトの場合)
Ry-

1
いや!GHCは賢すぎます。フォームの無限ループはlet a = a in a例外に書き換えられ、無限ループではなく単にコンパイラエラーが発生します。(おそらくこれは別のHaskellのコンパイラで動作するだろうが、私がしようとする一方で1を持っていないが)
user2407038

私にとってはrunghcで動作するので、有効だと思います。(実際には、ghcでも動作します。ここでは8.0.1です。)
Ry-

本当に?私もghc 8.0.1にいます-私にとってはException when trying to run compile-time code: <<loop>>、インタープリターとコンパイルの両方で...技術的には上記のコードも例外で死にますが、仕様で明示的に許可されているスタックオーバーフロー-無限のメモリがある場合、それは本当に永遠にループします。<<loop>>例外は、私のマシンがメモリ不足はるか前に発射します。
user2407038

12

gradle、10 9バイト

for(;;){}

上記のコードをbuild.gradleファイルに配置します。Gradleはその基本言語としてgroovyを使用しているため、ここでは実際にgroovyについて話していますが、質問はビルド時間に関するものなので、gradleの方が適切だと思いました。

上記のコードを使用してgradleビルドコマンドを実行すると、先のとがった髪型と互換性のあるビルドステータス行が出力されます。

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

レイズを目指す場合は、次のデバッグ-dフラグを追加します。

$ 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

印象的に複雑に見えることに加えて、次の新しいセットで更新されます。

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.

ステータスラインは10秒ごとに表示され、ビルドが重要な技術的なことをしているように見えます。


8

SWI-Prolog、34バイト

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

説明

term_expansion/2 は、ソースコードの一部の用語を他の用語に変換するために実際にコードをコンパイルする前に、コンパイラーによって自動的に呼び出されるものです。

ここでは、次の新しいルールを紹介しterm_expansion/2ますrepeat,1=0.

repeat/0 常に成功する述語であり、無限の数の選択ポイントを提供します。

1=0統一しようとしている10常にあります、false。これにより、コンパイラはrepeat(常に選択ポイントを提供するため)バックトラックし1=0、再試行します。


GNU Prologでは機能しないため、これは実装固有のものであると想定しています。見出しにコンパイラの名前を入れたいかもしれません。(私はSWIプロローグを想定しています。)

@ ais523のおかげで、他のdistribsにチェックしていなかったが、コンパイラのものは、通常、かなり具体的であることから、私は...良く知られている必要があります
Fatalize

@ ais523ただし、これによれば、expand_term代わりに使用できる場合があります(term_expansionGNU Prologのように使用できないと言われているため)。expand_termただし、SWI では機能しません。
Fatalize

7

GNU Make、44

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

私はこれについて信用を主張することはできません。Robert Mecklenburgの著書 『Managing Projects with GNU Make:The Power of GNU Make for Building Anything』に由来しています。

makeは、このmakefileを実行すると、makefileが古いことを確認します(.PHONYターゲットが古いため、makeコマンドのタイムスタンプを更新するtouchコマンドを実行します。その後、makeはファイルを再読み取りし、 makefileが古くなっています。

再帰を使用しないので、他のMake回答よりもこれを好みます。私のVMでは、もう一方のMake回答はプロセスを分岐し続け、約7,000の深さのどこかで、VMは無反応の停止状態になります。ただし、この回答により、システムリソースを消費することなく無期限に継続できます。このビルドで本当にリラックスできるようになります。明らかなシステムの劣化なしで、1,000,000回以上の繰り返しを行いました。

sleep 1メイクファイルのタイムスタンプが毎回実際に更新されるように追加する必要がありました。sleep 0.01繰り返し処理を少し速くしたい場合は、これを変更できます。


6

GNU Forth、15バイト

ゴルフ

: : [do] [loop]

単語:を再定義(再コンパイル)し[do] [loop]、新しい定義内で即時の無限ループを呼び出します(コンパイル時)。

単語の1つのカテゴリはコンパイルされません。これらのいわゆる即時単語は、テキストインタープリターが解釈中かコンパイル中かに関係なく実行されます(現在実行されています)。

オンラインでお試しください!


5

Clojure、21バイト

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

呼び出しを繰り返し発行するマクロを定義することにより、コンパイラを結び付けます。

私の電話では、これによりREPLがハングし、デバイスが遅れます。私のラップトップでは、これはStackOverflowで完全に失敗します。

残念ながら、StackOverflowは即座に発生しますが、ルールに従って有効です。


5

MSBuild、130バイト

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

これを.proj拡張子付きのファイルとして保存msbuildし、コマンドプロンプトから実行します。MSBuildは、別のmsbuildプロセスを単純に生成する唯一のターゲットを実行します。


これが機能するにはインデントが必要ですか?改行はどうですか?通常、空白をゴルフアウトすることは可能です。

いいえ、読みやすいです。文字数には空白は含まれません。
ダンコドゥルビッチ

1
そうだね。その場合は、おそらく投稿の本文でそれを言及する必要があります。


4

Mathematica 33バイト

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

コードはコンパイルの前に引数を記号的に評価しようとしますが、引数自体は無限ループです。While関数は重要ではないため、2番目の引数はnullです。


「編集の前に」はい...いいえ。
CalculatorFeline

有効な引数を入力してください。reference.wolfram.com/language/tutorial/...
ケリーLowder

問題は、Compile呼び出し中またはループ前にループが発生するかどうかです。
CalculatorFeline

3

ハスケル(GHC、無しテンプレートのHaskellまたはカスタム書き換え規則)、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()

理論的には、これはC ++のアプローチとほぼ同じ方法で無限ループに入りyます。ポリモーフィックメソッドは、さらに複雑な型にインスタンス化されます。実際には、デフォルトで割り当てられたスタックサイズは実際にすぐにオーバーフローします。

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

ルークパーマーへのクレジット


1

Haskell(ghc)、32 + 2 = 34バイト

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

で実行しghc -O <file>ます。同じものに書き換えるメイン関数の書き換えルールをトリガーします。唯一の残念な機能は、ghcがこれを検出し、100回の反復後に停止できるほどスマートであることです。この動作を無効にする簡単な方法は知りません。


1

ブー、25バイト

macro l:
 x=0 while 1>0
l

これは、コンパイル時に実行し、無限ループを実行してからマクロを呼び出すマクロを定義します。


1

さび、18バイト

include!(file!());

クラシックセルフインクルード。Rustcはいらいらするほど健全であり、デフォルトでは128回の再帰後に救済され、深さ優先で拡張するため、指数関数的成長も機能しません。ただし、CおよびC ++ソリューションにも同じことが当てはまります。


0

ファクター29 16

<< [ t ] loop >>

間の部分<< >>は解析時に実行されます。

何をするかについて[ t ] loopは、推測させてあげましょう...

それをそのままリスナーに配置するか、対応するボイラープレートを使用して任意のボキャブラリーまたはスクリプトファイルに追加できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.