තොග පිටාර ගැලීමක් ඇති කිරීමට අමුතුම ක්‍රමය [සංවෘත]


146

ක්‍රමලේඛකයෙකු ලෙස ඔබ පැහැදිලිවම පුනරාවර්තනයක් හේතුවෙන් තොග පිටාර ගැලීමේ දෝෂය දනී. නමුත් එම දෝෂය මඟහරවා ගැනීම සඳහා ඔබේ ප්‍රියතම භාෂාව ලබා ගැනීමට අමුතු හා අසාමාන්‍ය ක්‍රම බොහොමයක් තිබේ.

අරමුණු:

  1. දෝෂ ප්‍රතිදානයේ පැහැදිලිව පෙනෙන පරිදි තොග පිටාර ගැලීමක් සිදුවිය යුතුය.
  2. පැහැදිලි පුනරාවර්තනයක් භාවිතා කිරීමට අවසර නැත.

අවලංගු වැඩසටහන් සඳහා උදාහරණ:

// Invalid, direct obvious recursion.
methodA(){ methodA(); }
// Invalid, indirect, but obvious recursion.
methodA(){ methodB(); }
methodB(){ methodA(); }

වඩාත්ම ජනප්‍රිය නිර්මාණ ලෙස වඩාත් නිර්මාණාත්මක ක්‍රම හොඳම වේ. එනම්, මේ වගේ පැහැදිලි පිළිතුරු නීරස කිරීමෙන් වළකින්න:

throw new StackOverflowError(); // Valid, but very boring and downvote-deserving.

මම දැන් පිළිතුරක් පිළිගත්තද, තවත් පිළිතුරු එකතු කිරීම තවමත් හරි :)


14
මගේ අභිමත සෙවුම් යන්ත්‍රයේ 'ස්ටක් පිටාර ගැලීම' විමසීමට මා දන්නා නමුත්, stackoverflow.com වෙත සැරිසැරීමෙන් මම නිෂ්පාදනය කිරීමට නැඹුරු වෙමි.
OJFord

21
Internet Explorer භාවිතා කරන්න. එකක් අල්ලා ගැනීමට ස්ථිර ක්‍රමයක් :)
asgoth

64
තොග පිටාර ගැලීමක් ඇති කිරීම සඳහා ඇති අමුතුම ක්‍රමය නම් codegolf.stackexchange.com හි ජනප්‍රිය-තරඟයක් පළ කිරීම ය. ප්‍රතිචාර දැක්වූවන්, ප්‍රශ්නයට ඔවුන්ගේ විසඳුම් පරික්ෂා කිරීමේදී, තොග පිටාර ගැලීමක් ඇති කරයි. මම එය අත්හදා බැලුවේ නැත, එබැවින් එය ක්‍රියාත්මක වන බවට මට සහතික විය නොහැක (ඒ නිසා මම එය පිළිතුරක් ලෙස පළ නොකළේ).
ටිම් සෙගුයින්

3
මම මෙම ක්‍රමයට පක්ෂග්‍රාහී වෙමි: joelonsoftware.com/items/2008/09/15.html
රොබට්

11
එය Toyota රථ ධාවනය (ඒයි,, විනාඩියක් ඉන්න මගේ කාර් වේ තිබුණා ටොයොටා ...)
r3mainer

Answers:


224

පයිතන්

import sys
sys.setrecursionlimit(1)

මෙය පරිවර්තකයා වහාම අසමත් වීමට හේතු වේ:

$ cat test.py
import sys
sys.setrecursionlimit(1)
$ python test.py
Exception RuntimeError: 'maximum recursion depth exceeded' in <function _remove at 0x10e947b18> ignored
Exception RuntimeError: 'maximum recursion depth exceeded' in <function _remove at 0x10e8f6050> ignored
$ 

පුනරාවර්තනය භාවිතා කරනවා වෙනුවට, එය තොගය හැකිලී යන බැවින් එය වහාම පිටාර ගැලෙනු ඇත.


12
හුරුබුහුටි, නමුත් මගේ මතය අනුව මුල් ප්‍රශ්නය අරමුණු කරගත් දෙය නොවේ.
නිට්

12
ItNit මට ගැටලුව නොපෙනේ. මෙම විසඳුම ගැන සෑහීමකට පත්විය නොහැකි වන්නේ කුමක් ද?
සයිමන්ට්

17
@ masterX244 ඔව්, ප්‍රශ්නයේ මුලික කාරණය වන්නේ “එය සුපුරුදු ආකාරයට නොකරන්න” යන්නයි.
ප්ලූටර්

24
L ප්ලූටර් ඔබ සාමාන්‍යයෙන් අරමුණක් මත ස්ටැක් ඕවර්ෆ්ලෝ එකක් සකසනවාද?
කිවි

15
මෙය පළ කළ පළමු වතාවට මෙය ඉතා දක්ෂ විය .
primo

189

පයිතන්

import webbrowser
webbrowser.open("http://stackoverflow.com/")

7
නියමයි. ලස්සන හා අලංකාරයි.
ජේම්ස් වෙබ්ස්ටර්

103
බොහෝ වචනාර්ථයෙන්. ඉතා පිළිතුරු.
ටිම් සෙගුයින්

47
හොඳයි, මෙය තොග පිටාර ගැලීමක් පෙන්නුම් කරයි, නමුත් එකක් නිෂ්පාදනය කිරීම සඳහා , මෙය ක්‍රියාත්මක වන්නේ එය ජෙෆ් ඇට්වුඩ් හෝ ජොයෙල් ස්පොල්ස්කි විසින් ක්‍රියාත්මක කරන්නේ නම් පමණි.
යාන්ත්‍රික ගොළුබෙල්ලා

10

9
දෝෂ ප්‍රතිදානයේ නොමැති බැවින් පිළිතුරක් නොවේ.
පියරේ ආර්ලෝඩ්

131

සී / ලිනක්ස් 32 බිට්

void g(void *p){
        void *a[1];
        a[2]=p-5;
}
void f(){
        void *a[1];
        g(a[2]);
}
main(){
        f();
        return 0;
}

ආපසු ලිපිනය නැවත ලිවීමෙන් ක්‍රියා කරයි, එබැවින් ඇමතීමට පෙර gස්ථානයට නැවත පැමිණේ . ආපසු ලිපින තොගයේ ඇති ඕනෑම වේදිකාවක් සඳහා ක්‍රියා කරනු ඇත, නමුත් නවක වදන් අවශ්‍ය විය හැකිය.mainf

ඇත්ත වශයෙන්ම, අරාවකින් පිටත ලිවීම නිර්වචනය නොකළ හැසිරීමක් වන අතර , එය ඔබේ උඩු රැවුල නිල් පැහැයෙන් පින්තාරු කරනවාට වඩා තොග පිටාර ගැලීමක් ඇති කරන බවට ඔබට සහතිකයක් නැත. වේදිකාව, සම්පාදක සහ සම්පාදක කොඩි පිළිබඳ විස්තර විශාල වෙනසක් ඇති කළ හැකිය.


1
මෙය සෙග්ෆෝල්ට් එකක් නොවේද?
11684

4
අමුතු සිරස් හැසිරවීම සඳහා +1 සහ කිසිසේත්ම පුනරාවර්තනයක් නැත!
RSFalcon7

6
68 11684, එය නිර්වචනය නොකළ හැසිරීමකි, එබැවින් පොදුවේ එය බිඳ වැටිය හැකිය. 32bit ලිනක්ස් මත (මා විසින් පරීක්ෂා කරන ලද), එය අරාව පිටත ලියයි, ආපසු ලිපිනය නැවත ලියයි, සහ තොගය පිරී ඉතිරී යන තෙක් බිඳ වැටෙන්නේ නැත.
ugoren

46
"ඔබේ උඩු රැවුල නිල් පාට කරන්න" -> එම රේඛාව මා සතුව තිබුණි.
අනීෂ් ඩෝග්‍රා

2
වොව්. මෙය මන ast කල්පිත ලෙස අපැහැදිලි ය.
මිරර්ඩ්ෆේට්

108

JavaScript / DOM

with (document.body) {
    addEventListener('DOMSubtreeModified', function() {
        appendChild(firstChild);
    }, false);

    title = 'Kill me!';
}

ඔබට ඔබගේ බ්‍රව්සරය විනාශ කිරීමට අවශ්‍ය නම් එය කොන්සෝලය තුළ අත්හදා බලන්න.


53
මට විශ්වාසයි ඔබට වැඩි ඡන්ද +1 ක් ලැබිය යුතු බව, නමුත් කනගාටුවට කරුණක් නම් ඡන්දය දීමට පෙර මිනිසුන් මෙය උත්සාහ කළා .... lol
Reactgular

5
හොඳයි, එය was ලදායී විය. මට එය මරා දැමීමට මගේ කාර්ය කළමනාකරු විවෘත කිරීමට පවා නොහැකි විය.
primo

1
Chrome භාවිතා කරන්න, ටැබ් වසන්න. ගැටළුව විසඳා ඇත.
කෝල් ජොන්සන්

1
with (document.body) { addEventListener('DOMSubtreeModified', function() { appendChild(firstChild); }, false); title = 'Kill me!'; } 15:43:43.642 TypeError: can't convert undefined to object
බ්‍රයන් මින්ටන්

1
මගේ ෆයර්ෆොක්ස් එල්ලා මරා දමන ලදී
ෆර්හාඩ්

91

ජාවා

මෙතන කොහේ හරි මේ වගේ දෙයක් දැක්කා:

සංස්කරණය කරන්න: මා එය දුටු තැන හමු විය: ස්ටැක් ඕවර්ෆ්ලෝ දෝෂය විසි කරන කෙටිම වැඩසටහනට ජෝ කේගේ පිළිතුර

public class A {
    String val;
    public String toString() {
        return val + this;
    }

    public static void main(String[] args) {
        System.out.println(new A());
    }
}

එය සමහර ජාවා ආරම්භකයින් ව්‍යාකූල කළ හැකිය. එය හුදෙක් පුනරාවර්තන ඇමතුම සඟවයි. val + thisනූල් val + this.toString()නිසා val.

එය මෙහි ක්‍රියාත්මක වන ආකාරය බලන්න: http://ideone.com/Z0sXiD


30
ඇත්ත වශයෙන්ම, එය සිදු new StringBuilder().append(val).append("").append(this).toString()වන අතර, අවසාන උපග්‍රන්ථය String.valueOf (...) අමතයි. මෙමඟින් ඔබේ තොගයේ හෝඩුවාව තරමක් වෙනස් වේ (එහි ක්‍රම තුනක්).
Paŭlo Ebermann

2
@ PaŭloEbermann ඔව්, ඒක හරි. කෙසේ වෙතත්, එය බවට පත්වන බව පැවසීම වඩා පහසු ය "" + this.toString().
ජස්ටින්

2
+ "" +බැලූ බැල්මට එය නිෂ් less ල බවක් පෙනෙන්නට ඇති හෙයින්, මිනිසුන්ව ඉවතට ඇද දැමිය හැකි යැයි මම සිතමි . String val;හා return val + this;සුළු sneakier විය හැකි
Cruncher

Run ක්‍රන්චර් කිසිසේත් නැත. ඔබ ජාවා ""කෝඩරයක් නම්, ස්ට්‍රිං ඉදිකිරීමේදී නූල් එකකට සම්බන්ධ කිරීමේ පහසුම ක්‍රමය වන්නේ+ ""
ජස්ටින්

5
තථ්‍ය ලෝක යෙදුමක දී මම අසීමිත
පුනරාවර්තනයන්

77

සී

ඉතා පහසුයි:

int main()
{
    int large[10000000] = {0};
    return 0;
}

10
පැහැදිලි නොවන සඳහා +1! එය ඉතා පද්ධති මත රඳා ulimit -s unlimited
පැවතුනද

4
@ RSFalcon7, +1 ට ස්තූතියි, නමුත් මට මෙය සැබවින්ම වඩාත්ම පැහැදිලිව පෙනෙන්නට තිබුණි !!
ෂාබාස්

14
R ක්‍රන්චර්: එය පුනරාවර්තනයට හේතු නොවේ. ලබා දී ඇති ගැටළුව වූයේ තොගය පුපුරවා හැරීමයි. බොහෝ මෙහෙයුම් පද්ධතිවල තොගය ස්ථාවර ප්‍රමාණයෙන් යුක්ත වන අතර අඟල් මිලියන දහයකට වඩා බෙහෙවින් කුඩා වේ.
එරික් ලිපර්ට්

2
An හැනෝබින්ඩර්, මා පරීක්ෂා කළ ලිනක්ස් වලදී, ඔබට පිටාර ගැලීමේ දෝෂයක් නොලැබේ. තොගය පිරී ඉතිරී යාම නිසා නොදන්නා කොටස් වලට ප්‍රවේශ වීම නිසා ඔබට ඛණ්ඩනය කිරීමේ දෝෂයක් ලැබේ. අසීමිත පුනරාවර්තන ශ්‍රිත ඇමතුමක් මඟින් ඛණ්ඩනය කිරීමේ දෝෂයක් ලබා දෙන බැවින්, ලිනක්ස් තුළ සිරස් පිටාර ගැලීමේ දෝෂයක් තිබේදැයි මට විශ්වාස නැත.
ෂාබාස්

3
~0uසී හි ඉතා විශාල සංඛ්‍යාවක් වේ
වෝර්ටිකෝ

63

සී හි පුනරාවර්තන නොවන තොග පිටාර ගැලීම

සම්මුතියේ නොගැලපීම කැඳවීම.

typedef void __stdcall (* ptr) (int);

void __cdecl hello (int x) { }

void main () {
  ptr goodbye = (ptr)&hello;
  while (1) 
    goodbye(0);
}

සමඟ සම්පාදනය කරන්න gcc -O0.

__cdeclකාර්යයන් මඟින් ඇමතුම තොගය පිරිසිදු කරනු ඇතැයි අපේක්ෂා කරන අතර, ඇමතුම එය කිරීමට __stdcallඅපේක්ෂා කරයි, එබැවින් යතුරු ලියන ශ්‍රිත දර්ශකය හරහා ඇමතීමෙන්, පිරිසිදු කිරීම කිසි විටෙකත් සිදු නොවේ - සෑම mainඇමතුමකටම පරාමිතිය තොගයට තල්ලු කරයි, නමුත් කිසිවක් එය නොපවතින අතර අවසානයේ තොග පිරවීම.



62

ජාවාස්ක්‍රිප්ට්

window.toString = String.toLocaleString;
+this;

5
මෙය අවතක්සේරු කර ඇත.
රයි-

1
මොකද කරන්නේ +this?
NobleUplift

8
Unary + ToNumber වියුක්ත මෙහෙයුම ක්‍රියාත්මක කරයි. එය ඉඟි වර්ගයක් සහිත ToPrimitive මෙහෙයුම භාවිතා කරයි. වස්තුවක් මත ToPrimitive [[DefaultValue]] අභ්‍යන්තර ක්‍රමය භාවිතා කරයි, එය අංක ඉඟියක් සම්මත කළ විට, පළමුවෙන්ම අගය ඕෆ් () ක්‍රමය තිබේද යන්න පරීක්ෂා කර ප්‍රාථමිකයක් ලබා දෙයි. window.valueOf () වස්තුවක් ලබා දෙයි, ඒ වෙනුවට [[DefaultValue]] ස්ට්‍රිං () වෙත ඇමතුමේ ප්‍රති result ලය ලබා දෙයි. Window.toString කරන පළමු දෙය (දැන් එය LocaleString වෙත) 'මෙය' මත ස්ට්‍රිං වෙත ආයාචනය කිරීමයි. නැවත නැවත කරන්න.
රයන් කැවානෝ

3
'ඕනෑවට වඩා පුනරාවර්තනය' යන දෝෂය ක්‍රෝම් විසි කළහොත් එය ක්‍රෝම් මත ක්‍රියා කරයි, නේද? තොගය පිරී ඉතිරී යන අතර, ක්‍රෝම් විසින් තොග පිටාර ගැලීමේ ව්‍යතිරේකයක් ලබා දෙන්නේ එලෙසිනි.
ඩේවිඩ් කොන්රාඩ්

4
ඔබ භාවිතා කළ යුත්තේ +{toString:"".toLocaleString}:-)
බර්ගි

62

මගේ පෙර පිළිතුරේ ජාවා 7 සහ ජාවා 8 මගේ නපුරු කේතයට ප්‍රතිශක්තීකරනය වීම ගැන මම කලකිරීමට පත් වීමි . ඒ නිසා මම තීරණය කළා ඒ සඳහා පැච් එකක් අවශ්‍යයි කියලා.

සාර්ථකත්වය! මම printStackTrace()විසි කළා StackOverflowError. printStackTrace()නිදොස් කිරීම සහ ලොග් වීම සඳහා බහුලව භාවිතා වන අතර එය භයානක යැයි කිසිවෙකු සාධාරණ ලෙස සැක නොකරයි. බරපතල ආරක්ෂක ගැටළු කිහිපයක් නිර්මාණය කිරීම සඳහා මෙම කේතය අනිසි ලෙස භාවිතා කළ හැකි බව දැකීම දුෂ්කර නොවේ:

public class StillMoreEvilThanMyPreviousOne {
    public static void main(String[] args) {
        try {
            evilMethod();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void evilMethod() throws Exception {
        throw new EvilException();
    }

    public static class EvilException extends Exception {
        @Override
        public Throwable getCause() {
            return new EvilException();
        }
    }
}

මෙය පැහැදිලි පුනරාවර්තනයක් යැයි සමහර අය සිතනු ඇත. එය එසේ නොවේ ය. මෙම EvilExceptionඉදිකිරීමටත් ආමන්ත්රණය කරන්නේ නැත getCause()ක්රමය නිසා බව හැර සැබවින්ම සියලු පසු ආරක්ෂිතව දමනු කළ හැක. getCause()ක්රමය ඇමතීමෙන් StackOverflowErrorඑකක්වත් නොලැබේ . පුනරාවර්තනය ජේඩීකේ හි සාමාන්‍යයෙන් සැක සහිත printStackTrace()හැසිරීමක් වන අතර ව්‍යතිරේකය පරීක්ෂා කිරීම සඳහා භාවිතා කරන නිදොස් කිරීම සහ ලොග් වීම සඳහා වන තෙවන පාර්ශවීය පුස්තකාලය තුළ වේ. තවද, ව්‍යතිරේකය විසි කරන ස්ථානය එය හසුරුවන ස්ථානයට වඩා බොහෝ දුරින් විය හැකිය.

කෙසේ හෝ වේවා, මෙහි කේතයක් ඇත StackOverflowError අතර සියල්ලටම පසු පුනරාවර්තන ක්‍රම ඇමතුම් අඩංගු නොවේ. මෙම StackOverflowErrorපිටත සිදු mainJDK ගණන්වල, ක්රමය UncaughtExceptionHandler:

public class StillMoreEvilThanMyPreviousOneVersion2 {
    public static void main(String[] args) {
        evilMethod();
    }

    private static void evilMethod() {
        throw new EvilException();
    }

    public static class EvilException extends RuntimeException {
        @Override
        public Throwable getCause() {
            return new EvilException();
        }
    }
}
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"

2
: D සහ දැන් හරස් ජාවා අනුවාදයක් සහිත stackoverflow අනුකූලතා ක්‍රමයක් සමඟ. නපුරු අවජාතකයා! : ඩී
කිවි

9
මෙම නඩුවේ පුනරාවර්තනය පැහැදිලිව සලකා බැලීමට මම නැඹුරු වෙමි.
ටේමිර්

1
Lack බ්ලැක්ලයිට්ෂයිනින් getCause()ක්‍රමයට ඇමතීමෙන් ප්‍රති .ල නොලැබේ StackOverflowError. එය රඳා පවතින්නේ ජේඩීකේ කේතයක් ඇති බව ය getCause().
වික්ටර් ස්ටැෆුසා

2
ශරීරය getCauseසාධාරණ ලෙස වෙනස් කිරීමෙන් ඔබට මෙය සරල කළ හැකි යැයි මම සිතුවෙමි . return this;නමුත් ජාවා ඒ සඳහා දක්ෂය. එය " CIRCULAR REFERENCE" බව එය දකී .
ඩේවිඩ් කොන්රාඩ්

1
StackOverflowErrorJdk-1.7.0.21p2v0 හි OpenBSD 5.5 පැකේජයේ දෝෂයක් ඇති බැවින් මට එය නොලැබුණි . එය විසි නොකරයි StackOverflowError. එය හරයට පහර දෙයි SIGSEGV.
කර්නි

57

ලිනක්ස් x86 NASM එකලස් කිරීම

section .data
    helloStr:     db 'Hello world!',10 ; Define our string
    helloStrLen:  equ $-helloStr       ; Define the length of our string

section .text
    global _start

    doExit:
        mov eax,1 ; Exit is syscall 1
        mov ebx,0 ; Exit status for success
        int 80h   ; Execute syscall

    printHello:
        mov eax,4           ; Write syscall is No. 4
        mov ebx,1           ; File descriptor 1, stdout
        mov ecx,helloStr    ; Our hello string
        mov edx,helloStrLen ; The length of our hello string
        int 80h             ; execute the syscall

    _start:
        call printHello ; Print "Hello World!" once
        call doExit     ; Exit afterwards

ස්පොයිලර්:

PrintHello වෙතින් ආපසු යාමට අමතක වීම නිසා අපි නැවතත් _start වෙතට පනින්නෙමු.


78
එකලස් කිරීමේදී කිසිවක් පැහැදිලිව පෙනෙන්නට නැත.
11684

21
68 11684: ප්‍රතිවිරුද්ධ දෙය සත්‍ය බව මට පෙනේ: එකලස් කිරීමේදී සෑම දෙයක්ම පැහැදිලිය, මන්ද ඔවුන්ගේ කේතය සැබවින්ම කරන්නේ කුමක්ද යන්න සැඟවීමට කිසිවෙකුට වියුක්ත කිරීම් භාවිතා කළ නොහැකි බැවිනි.
මේසන් රෝද

3
මෙය එහි සරල බව සහ අලංකාරය සඳහා දීප්තිමත් ය.
හනීෆ්මුබාරක්

11
@MasonWheeler: මම තමයි, හැම කියන්න කැමති දෘශ්යමාන පැහැදිලි වෙනුවට ... පෙනෙන අතර පැහැදිලි අතර වෙනස බලන්න ලස්සන ක්රමයක් ලෙස, මම යොමු කිරීමට ආදරය underhanded.xcott.com
ඔලිවර් Dulac

2
මට නිතර අමතක වීමේ වැරැද්ද මට මතකයිret
රුස්ලාන්

48

සම්පාදනය කරන වේලාවේදී C ++

template <unsigned N>
struct S : S<N-1> {};

template <>
struct S<0> {};

template
struct S<-1>;
$ g ++ -c test.cc -ftemplate-deep = 40000
g ++: අභ්‍යන්තර සම්පාදක දෝෂය: ඛණ්ඩනය කිරීමේ දෝෂය (වැඩසටහන cc1plus)
කරුණාකර සම්පූර්ණ දෝෂ වාර්තාවක් ඉදිරිපත් කරන්න,
සුදුසු නම් පෙර සැකසූ ප්‍රභවයක් සමඟ.
උපදෙස් සඳහා බලන්න.

මෙම ප්‍රභව ගොනුවේ පුනරාවර්තනයක් නොමැත, එක් පන්තියකටම මූලික පංතියක් ලෙස නැත, වක්‍රව පවා නැත. (C ++ දී, මේ වගේ සැකිල්ල පන්තියේ, S<1>සහ S<2>සම්පූර්ණයෙන්ම වෙනස් වර්ග වේ.) මෙම segmentation fault සම්පාදකවරයා දී සහානුයාත වලට පසු පිරී ඉතිරී ගොඩගසන්න කිරීමට නියමිතය.


7
මම පිළිගන්නවා මම මෙය ඔබේ මෙට්‍රොප්‍රෝග්‍රෑම් හි පැහැදිලි පුනරාවර්තනයක් ලෙස හැඳින්වූ බව.

2
GCC පුනරාවර්තනය හඳුනාගෙන මේ පැත්තෙන් මනාව නවත්වයි (4.8 සහ ඊට ඉහළින් ඇති බව පෙනේ)
ඇලෙක් ටීල්

2
template <typename T> auto foo(T t) -> decltype(foo(t)); decltype(foo(0)) x;ටිකක් කෙටි.
කේසි

2
@hvd එය GCC හි දෝෂයක් ගසාකන බවක් පෙනේ. ක්ලැන්ග් වැරදිසහගත භාවිතය හසුකර ගනී - ඔබ දැනටමත් දන්නා බව මම සිතමි - නමුත් එය මගේ ජීසීසී මගින් මෙගාබයිට් 2 ක් පමණ වැරදි පණිවිඩ පිට කරයි.
කේසි


45

බෑෂ් (අන්තරා අනතුරු ඇඟවීම)

while true
do 
  mkdir x
  cd x
done

නිශ්චිතවම කිවහොත්, එය පිටාර ගැලීම කෙලින්ම ගබඩා නොකරනු ඇත, නමුත් " නොනවත්වා ගලා බසින උත්පාදක තත්වයක් " ලෙස ලේබල් කළ හැකි දේ ජනනය කරයි : ඔබේ තැටිය පිරී යන තෙක් ඔබ මෙය ක්‍රියාත්මක කරන විට සහ "rm -rf" සමඟ ඇති අවුල ඉවත් කිරීමට අවශ්‍ය විට x ", එය පහර වැදී ඇත.

සෑම පද්ධතියකම එය සිදු නොවේ. සමහර ඒවා අනෙක් ඒවාට වඩා ශක්තිමත් ය.

අනතුරු ඇඟවීම:

සමහර පද්ධති මෙය ඉතා නරක ලෙස හසුරුවන අතර ඔබට පිරිසිදු කිරීම ඉතා අසීරු විය හැකිය (මන්ද "rm -rf" ම පුනරාවර්තන ගැටලුවකට වැටෙනු ඇත). පිරිසිදු කිරීම සඳහා ඔබට සමාන පිටපතක් ලිවීමට සිදු විය හැකිය.

විශ්වාස නැතිනම් සීරීම් වීඑම් එකකින් මෙය උත්සාහ කිරීම හොඳය.

PS: කණ්ඩායම් ස්ක්‍රිප්ට් එකකින් ක්‍රමලේඛනය කර හෝ කර තිබේ නම් එයම අදාළ වේ.
පීපීඑස්: ඔබෙන් අදහස් දැක්වීමක් මැදිහත් විය හැකිය, ඔබේ විශේෂිත පද්ධතිය හැසිරෙන ආකාරය ...


මා ලියා ඇති පරිදි: බොහෝ පද්ධති වල, rm -rf පහළට යාමට උත්සාහ කරන අතර එකකට පහර දෙයි (සමහර විට තවදුරටත්, මේ දිනවල 64bit ලිපින ඉඩ ප්‍රමාණයක් ඇත - නමුත් කුඩා යන්ත්‍රවල කුඩා තොගයක් ඇති විට). ඇත්ත වශයෙන්ම, අවට "rm" ද තිබිය හැකිය, එය වෙනස් ආකාරයකින් කරයි ...
blabla999

2
මට පෙනෙන දෙයක් වගේ while cd x; do :; done; cd ..; while rmdir x; cd ..; done; බලාගන්න .
බ්ලැක් ලයිට් බැබළීම

ඔබ ඇත්තෙන්ම නිවැරදියි (මා අදහස් කළේ "පිරිසිදු කිරීම සඳහා සමාන පිටපතක්" යන්නයි). කෙසේ වෙතත්, ඔබේ තැටිය (හෝ කෝටාව) සම්පුර්ණ වූ පසු, සමහර පද්ධති එම තත්වයට අයහපත් ලෙස කටයුතු කිරීමට භාවිතා කළ බැවින් ඔබට පසුව පිවිසීමට පවා අපහසු විය හැකිය. ඔබට මූල ලෙස ඇතුල් වී ස්ක්‍රිප්ට් එක කිරීමට සිදුවේ (එය අද පවතින පරිගණක වල ​​පහසුය, නමුත් පුරාණ කාලයේ බොහෝ විට පරිශීලකයින් එකකට වඩා භාවිතා කළ පරිගණක වලදී එය දුෂ්කර විය).
blabla999

හාස්‍යජනකයි, මෙය පහත ස්මාල්ටෝක් මැජික් වලට වඩා වැඩි ඡන්ද ප්‍රමාණයක් ලබා ගනී (කිසි විටෙකත් එසේ සිතුවේ නැත!)
ස්මාල්ටෝක්

කවුරුහරි මෙය වින්ඩෝස් හි උත්සාහ කළාද?
දර්ශන නාමය

43

ජාවා

ජාවා ප්‍රහේලිකා වලින් ලස්සන එකක් . එය මුද්‍රණය කරන්නේ කුමක්ද?

public class Reluctant {
    private Reluctant internalInstance = new Reluctant();

    public Reluctant() throws Exception {
        throw new Exception("I'm not coming out");
    }

    public static void main(String[] args) {
        try {
            Reluctant b = new Reluctant();
            System.out.println("Surprise!");
        } catch (Exception ex) {
            System.out.println("I told you so");
        }
    }
}

එය ඇත්ත වශයෙන්ම StackOverflowError සමඟ අසමත් වේ.

ඉදිකිරීම්කරුගේ ව්යතිරේකය රතු හුරුල්ලන් පමණි. පොතට ඒ ගැන කියන්නට ඇත්තේ මෙයයි:

ඔබ ඉදිකිරීම්කරුවකුට ආයාචනා කරන විට, නිදර්ශන විචල්‍ය ආරම්භකයෝ ඉදිකිරීම්කරුගේ සිරුර ඉදිරිපිට ධාවනය වේ . මෙම අවස්ථාවෙහිදී, විචල්‍යය සඳහා වන internalInstanceආරම්භකය නැවත නැවත ඉදිකිරීම්කරුට ආයාචනා කරයි. එම ඉදිකිරීම්කරු, තමන්ගේම internalInstanceක්ෂේත්‍රයක් ආරම්භ කරන්නේ, අකමැත්තෙන් ඉදිකිරීම්කරුට නැවත නැවතත් ආයාචනා කිරීමෙනි. මෙම පුනරාවර්තන ආයාචනා මඟින් StackOverflowErrorඉදිකිරීම්කරුගේ ශරීරයට කවදා හෝ ක්‍රියාත්මක වීමට අවස්ථාවක් ලැබෙනු ඇත. ඊට වඩා StackOverflowErrorඋප ප්‍රභේදයක් වන නිසා , අල්ලා ගැනීමේ වගන්තිය එය අල්ලා නොගනී.ErrorExceptionmain


41

LaTeX

\end\end

ආදාන තොගය පිටාර ගැලීම නිසා \end පැහැදිලි කළ ආකාරයට, නැවත නැවතත් අනන්ත පුඩුවක් තුල ම පුළුල් මෙතන .

ටෙක්ස් අසමත් වන්නේ ඒ TeX capacity exceeded, sorry [input stack size=5000]හා සමාන ය.


1
මම ටෙක්ස් / ලාටෙක්ස් නිකුතුවක් බලාපොරොත්තුවෙන් සිටියෙමි. ඒවා බොහෝ දේට වඩා ජරා වේ - සාමාන්‍යයෙන්, මට අමතක වී ඇත්තේ හදිසියේම අනන්ත පුනරාවර්තන යමක් ලිවීමට මට හැකි වූ විට මම කරන දේ ක්‍රමලේඛයක් ලෙස ගණන් ගන්නා බවය.
අර්නර්


1
"ටෙක්ස් ධාරිතාව ඉක්මවා ඇත, සමාවෙන්න" ටෙක්ස් අසමත් වූ විට එය ආචාරශීලී වේ.
ඇලෙක්ස් ඒ.

40

බීඑෆ්

අවසානයේදී තොගය පිරී ඉතිරී යනු ඇත, පරිවර්තකයා තොගය කොපමණ කාලයක් සාදයිද යන්න මත රඳා පවතී ...

+[>+]

5
එම කේතය මට ජීවිතයේ ක්‍රීඩාව මතක් කර දෙයි.
ඇඩම් අරල්ඩ්

10
නිශ්චිතවම කිවහොත්, මොළයේ කිසිදු අට්ටාලයක් නොමැත.
fejesjoco

6
jfejesjoco ටේප්, ඔබට අවශ්‍ය නම්.
ටිම්ටෙක්

32

C #, සම්පාදනය කරන වේලාවේදී

මයික්‍රොසොෆ්ට් සී # සම්පාදකයා එහි තොගය පුපුරවා හැරීමට හේතු ගණනාවක් තිබේ; C # සම්පාදකයාගේ "ප්‍රකාශනය සම්පාදනය කිරීමට නොහැකි තරම් සංකීර්ණ" දෝෂයක් ඔබ දකින ඕනෑම වේලාවක එය තොගය පුපුරා ගොස් ඇති නිසාය.

විග්‍රහකය පුනරාවර්තන සම්භවයක් ඇති බැවින් ප්‍රමාණවත් තරම් ගැඹුරින් කැදැලි සහිත භාෂා ව්‍යුහයන් තොගය පුපුරවා හරිනු ඇත:

 class C { class C { class C { ....

සාමාන්‍යයෙන් පුනරාවර්තනය වන පැත්තේ පුනරාවර්තන ඉවත් කිරීම ගැන ප්‍රකාශන විග්‍රහකය ඉතා දක්ෂයි. සාමාන්යයෙන්:

x = 1 + 1 + 1 + 1 + .... + 1;

විශාල ගැඹුරු විග්‍රහ ගසක් සාදන, එය තොගය පුපුරන්නේ නැත. නමුත් පුනරාවර්තනය අනෙක් පැත්තෙන් සිදුවීමට ඔබ බල කරන්නේ නම්:

x = 1 + (1 + (1 + (1 + ....+ (1 + 1))))))))))))))))))))))))))))))))))))))))))...;

එවිට තොගය පුපුරවා හැරිය හැක.

මෙම වැඩසටහන ඉතා විශාල බව අනවශ්‍ය දේපල ඇත. වර්ග ක්‍රමයේ ඇතැම් අමුතු චක්‍ර ඉවත් කිරීමට තරම් බුද්ධිමත් නොවන නිසා, අර්ථකථන විශ්ලේෂකය කුඩා වැඩසටහනක් සමඟ අසීමිත පුනරාවර්තනයකට යොමු කිරීමට ද හැකිය. (රොස්ලින් මෙය වැඩිදියුණු කළ හැකිය.)

public interface IN<in U> {}
public interface IC<X> : IN<IN<IC<IC<X>>>> {}
...
IC<double> bar = whatever;
IN<IC<string>> foo = bar;  // Is this assignment legal? 

මෙම විශ්ලේෂණය මෙහි අසීමිත පුනරාවර්තනයකට යන්නේ මන්දැයි මම විස්තර කරමි:

http://blogs.msdn.com/b/ericlippert/archive/2008/05/07/covariance-and-contravariance-part-twelve-to-infinity-but-not-beyond.aspx

තවත් බොහෝ රසවත් උදාහරණ සඳහා ඔබ මෙම පත්‍රය කියවිය යුතුය:

http://research.microsoft.com/en-us/um/people/akenn/generics/FOOL2007.pdf


2
නිවැරදි දෝෂ පණිවිඩය fatal error CS1647: An expression is too long or complex to compile near (code). මෙම දෝෂ පණිවිඩය සඳහා වන ලියකියවිලි මෙහි ඇත , එය හරියටම ඔබ පවසන ආකාරයට ය: "ඔබේ කේතය සැකසීමේ සම්පාදකයා තුළ තොග පිටාර ගැලීමක් සිදුවිය."
bwDraco

32

අන්තර්ජාලයේ (දිනකට බිලියන සංඛ්‍යාත ජනතාවක් භාවිතා කරයි)

Redirects, HTTP status code: 301

උදාහරණයක් ලෙස, ඩෙල් ආධාරක වෙබ් අඩවියේ (වරදක් නැත, සමාවෙන්න ඩෙල්):

ඔබ URL වෙතින් TAG සහය ඉවත් කළහොත් එය අනන්ත යළි-යොමුවීම් වලට යයි . පහත දැක්වෙන URL හි, ###### යනු ඕනෑම ආධාරක TAG වේ.

http://www.dell.com/support/drivers/uk/en/ukdhs1/ServiceTag/######?s=BSD&~ck=mn

මම විශ්වාස කරන්නේ එය තොග පිටාර ගැලීමකට සමාන බවයි.


5
විදිහෙන් :) ෆයර්ෆොක්ස් එම ඉල්ලීම stackoverflow rquivalent :) වන විසඳිය නොහැකි නිසා එය යළි-යොමුකරයි කියනවා,
masterX244

3
යළි-යොමුවීම් අසීමිත නොවන බව සලකන්න - ඔබ "නැවත උත්සාහ කරන්න" එබුවහොත් එය /Errors/URL එකට තවත් කිහිපයක් එකතු කර HTTP 400 නරක ඉල්ලීම ලැබීමෙන් පසු නතර වේ. නමුත් මෙය අසීමිත යළි-යොමුවීමක් කරනවාට වඩා හොඳ තොග පිටාර ගැලීමක් ඇති කරයි.
නන්ද්ප්

andnandhp, මම එකඟ වෙමි, නමුත් ඔබ සිතන්නේ තුන්වන ලෝකයේ බ්‍රව්සරයක් (නවීන නොවේ, IE යනාදිය නොවේ), ඔවුන්ට මෙම තත්වය පිළිබඳ හෝඩුවාවක් ලැබී නැත.
codeSetter

2
Wget මෙහි ප්‍රතිචාර දක්වන ආකාරය මෙන්න:
Wget

1
http://www.dell.com/support/drivers/uk/en/ukdhs1/ServiceTag/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/Errors/...
වෝර්ටිකෝ

31

PHP

ලූප මූලද්‍රව්‍ය වලින් පමණක් සිදුකරන ස්ටක් ඕවර් ප්‍රවාහයක්.

$a = array(&$a);
while (1) {
    foreach ($a as &$tmp) {
        $tmp = array($tmp, &$a);
    }
}

පැහැදිලි කිරීම (ස්පොයිලර් බැලීමට සැරිසරන්න):

පරිවර්තකයා කසළ එකතු කිරීමට උත්සාහ කරන විට වැඩසටහන segfault වනු ඇත $tmp විට ( $tmpමෙහි නැවත පැවරීමේදී ) . අරාව ඉතා ගැඹුරු නිසා (ස්වයං යොමු කිරීම) පසුව කුණු එකතු කරන්නා පුනරාවර්තනයකින් අවසන් වේ.


16
PHP හි GC හට ස්වයං-යොමු ව්‍යුහයන් හඳුනාගත නොහැකිද? ඇත්තටම?! ඕච්. ඒ වන නපුරු.
පීටර් සී

1
ඔව්, නමුත් එය පරිපූර්ණ නොවේ. while (1) { $a = array(&$a); }මතක සීමාවට
ලඟාවීමට

ඔව්, මම හිතන්නේ වස්තු දිශානත සංවර්ධනය සම්බන්ධයෙන් PHP නිසියාකාරව ක්‍රියා නොකිරීමට එකම හේතුව එයයි; (
සාරාංශය

1
@ pythonian29033 විස්තාරණය කිරීමට සැලකිලිමත්ද?
vvondra

30

ජාවා

මම හරියටම ප්‍රතිවිරුද්ධ දෙය කළෙමි - පැහැදිලිවම තොග පිටාර ගැලීමේ දෝෂයක් විසි කළ යුතු වැඩසටහනකි, නමුත් එසේ නොවේ.

public class Evil {
    public static void main(String[] args) {
        recurse();
    }

    private static void recurse() {
        try {
            recurse();
        } finally {
            recurse();
        }
    }
}

ඉඟිය: වැඩසටහන O (2 n ) වේලාවෙන් ක්‍රියාත්මක වන අතර n යනු තොගයේ ප්‍රමාණය (සාමාන්‍යයෙන් 1024) වේ.

සිට ජාවා Puzzlers # 45:

අපගේ යන්ත්‍රයට තත්පරයට ඇමතුම් 10 10 ක් ක්‍රියාත්මක කළ හැකි අතර තත්පරයට ව්‍යතිරේක 10 10 ක් උත්පාදනය කළ හැකිය , එය වර්තමාන ප්‍රමිතීන්ට අනුව තරමක් ත්‍යාගශීලී ය. මෙම උපකල්පන යටතේ, වැඩසටහන වසර 1.7 × 10 291 කින් අවසන් වේ . මෙය ඉදිරිදර්ශනය කිරීම සඳහා, අපගේ සූර්යයාගේ ආයු කාලය අවුරුදු 10 10 ක් ලෙස ගණන් බලා ඇත , එබැවින් මෙම වැඩසටහන අවසන් වනවා දැකීමට අප කිසිවෙකු නොසිටීම ආරක්ෂිත ඔට්ටුවකි. එය අසීමිත පුඩුවක් නොවුනත්, එය එසේ විය හැකිය.


3
නිසැකවම පුනරාවර්තනය ... එතරම් රසවත් නොවේ.
කමී

5
Am කමී ඔබ එය උත්සාහ කර තිබේද? ඔබට ඇත්ත වශයෙන්ම StackOverflowError එකක් ලැබුණාද? එය පැහැදිලිව පෙනේ, නමුත් එය එසේ නොවේ.
ntoskrnl

ව්‍යතිරේකයක් හසු වූ පමණින් එය කිසි විටෙකත් විසි නොකළ බවක් අදහස් නොවේ. මෙම වැඩසටහන කාලයෙන් පසු
තොග

1
OdesCodesInChaos හරි, ඒ නිසා මම මෙය දෙවරක් පරීක්ෂා කර බැලුවෙමි, නිවැරදි අනුවාදය finallyවෙනුවට භාවිතා කරයි catch, සහ ධාවන කාලය O (2 ^ n) වේ. පිළිතුර යාවත්කාලීන කරන ලදි.
ntoskrnl

orntorkrnl ලස්සන එකක් + 1'd; btw විසින් දැනටමත් ස්ටයික් ඕවර් ප්‍රවාහයට සම්පාදකය ලබාගෙන ඇත (සම්පාදකයා VM තුළ ද ක්‍රියාත්මක වේ, ද fyi)
masterX244

30

සී #

පළමු ලිපිය, එබැවින් කරුණාකර මා වෙත පහසුවෙන් යන්න.

class Program
{
    static void Main()
    {
        new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Invoke(null, null);
    }
}

මෙය හුදෙක් තොග හෝඩුවාවක් නිර්මාණය කරයි, ඉහළ රාමුව අල්ලා ගනී (එය අපගේ අවසාන ඇමතුම වනු ඇත Main()), ක්‍රමවේදය ලබාගෙන එය ක්‍රියාත්මක කරයි.


පැහැදිලි කිරීමකින් තොරව පැහැදිලිව පෙනෙන ස්වයංපෝෂිත ක්‍රමයක්; +
1'd

ඔබ එම කේතය "වැරදියට සිදුවිය හැකි දේ" සමඟ අදහස් දැක්විය යුතුය: පී
ස්පේස්මන්

26

ජාවා

  • ජාවා 5 හි, printStackTrace()අසීමිත ලූපයකට ඇතුල් වේ.
  • ජාවා 6 හි, printStackTrace()විසි කරයි StackOverflowError.
  • ජාවා 7 සහ 8 දී එය සවි කරන ලදී.

පිස්සු කාරණය නම් ජාවා 5 සහ 6 හි එය පරිශීලක කේතයෙන් නොපැමිණීමයි, එය සිදුවන්නේ ජේඩීකේ කේතයේ ය. printStackTrace()මරණීය දණ්ඩනය අනතුරුදායක විය හැකි සාධාරණ සැකකරුවන් කිසිවෙකු නැත .

public class Bad {
    public static void main(String[] args) {
        try {
            evilMethod();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void evilMethod() throws Exception {
        Exception a = new Exception();
        Exception b = new Exception(a);
        a.initCause(b);
        throw a;
    }
}

7
ඔව්; කිසිවක් පිටතට stackoverflows codetrolling සඳහා හොඳම මිතුරා සහ em දඩයම් මත බැරෑරුම් හිසරදය වේ
masterX244

2
යමෙකු පුදුම වන්නේ නම්, C # හි සමාන කේතය අනන්ත පුඩුවක් ඇති කරයි. නමුත් InnerExceptionදේපල කියවීමට පමණක් වන අතර එය ඉදිකිරීම්කරු ලෙස සකසා ඇත, එබැවින් මෙය සිදු කිරීමට පරාවර්තනය අවශ්‍ය වේ.
අතාරි

17

JavaScript: පුනරාවර්තන නොවන, ක්‍රියාකාරී ශ්‍රිත විකෘතිය

var f = function() {
    console.log(arguments.length);
};

while (true) {
    f = f.bind(null, 1);
    f();
}

මෙහි කිසිඳු පුනරාවර්තනයක් නොමැත. තනි ක්‍රියාකාරී ඇමතුමකින්f තොගය පිරී ඉතිරී යන තෙක් වැඩි වැඩියෙන් තර්ක සමඟ නැවත නැවත ව්‍යංජන කරනු ලැබේ . එමconsole.log ඔබ එය කරන්න ගනී කොපමණ තර්ක බලන්න ඕන නඩුවේ කොටසක් විකල්ප වේ. දක්ෂ JS එන්ජින් මෙය ප්‍රශස්ත නොකරන බවට එය සහතික කරයි.

කෝපි ස්ක්‍රිප්ට් හි කේත-ගොල්ෆ් අනුවාදය, අක්ෂර 28:

f=->
do f=f.bind f,1 while 1

14

සී # වීර කාව්‍යයක් සමඟ අසමත් වේ

using System.Xml.Serialization;

[XmlRoot]
public class P
{
    public P X { get { return new P(); } set { } }
    static void Main()
    {
        new XmlSerializer(typeof(P)).Serialize(System.Console.Out, new P());
    }
}

එය අසමත් වන ආකාරය වීර කාව්‍යයකි, එය මගේ මනස මුළුමනින්ම ගිල දැමීය:

enter image description here

එය අසීමිත ලෙස පෙනෙන අමුතු රූප මාලාවක එක් රාමුවක් පමණි.

මෙය මෙතෙක් අමුතුම දේ විය යුතුය. කිසිවෙකුට පැහැදිලි කළ හැකිද? පෙනෙන විදිහට, ඉන්ඩෙන්ටේෂන් සඳහා දිනෙන් දින ඉහළ යන අවකාශ ප්‍රමාණය එම සුදු කුට්ටි පෙනෙන්නට හේතු වේ. එය සිදුවන්නේ .NET 4.5 සමඟ Win7 Enterprise x64 මත ය.

මම තවමත් එහි අවසානය දැක නැත. ඔබ වෙනුවට නම් System.Console.Outසමග System.IO.Stream.Null, එය සෑහෙන්න වේගවත් මිය යයි.

පැහැදිලි කිරීම තරමක් සරල ය. මම තනි දේපලක් ඇති පංතියක් සාදමි, එය සෑම විටම එහි අඩංගු වර්ගයට නව අවස්ථාවක් ලබා දෙයි. එබැවින් එය අසීමිත ගැඹුරු වස්තු ධූරාවලියකි. දැන් අපට ඒ හරහා කියවීමට උත්සාහ කරන යමක් අවශ්‍යයි. එතන තමයි මම පාවිච්චි කරන්නේ XmlSerializer, ඒක කරන්නේ. පෙනෙන විදිහට, එය පුනරාවර්තනය භාවිතා කරයි.


ඔව්; අනුක්‍රමික ftw: පී; නමුත් වඩාත් විහිළුවක් වන්නේ සර්පයාල්ගේ ගුණාංග ලබා ගන්නා ආකාරය හා එක් පන්තියක් නැවත නැවත පුනරාවර්තනය වන ආකාරයට නැවත පැමිණීම වැනි ඔබේ කේතයෙන් පිටත සිටින විටය
masterX244

1
හොඳයි, පිටාර ගැලීම මගේ කේතයෙන් පිටත සිදු වේ, නමුත් මම මෙය පළ කිරීමට සැබෑ හේතුව වන්නේ කොන්සෝලයේ අනපේක්ෂිත අතුරු
ආබාධයයි

.නෙට් 4 (සෙන්ටිමීටර හරහා ධාවනය වන විට පවා) භාවිතා කිරීම නිසා මට ලැබෙන්නේ අවකාශය පමණි, සුදු කුට්ටි නැත. මගේ අනුමානය නම් cmd හි Win7 Enterprise අනුවාදය හෝ .Net 4.5 කොන්සෝල ඉමුලේටරය එක්තරා අක්ෂර සංයෝජනයක් 'කොන්සෝලයේ වර්ණ පසුබිම වෙනස් කරන්න' ලෙස සලකයි.
ෆරාප්

මට එය .NET 4.5 සමඟ Win7 x64 ප්‍රොෆෙෂනල් සමඟ Aero සක්‍රිය කර ඇත
Ray

ප්‍රතිනිෂ්පාදනය කළ නොහැක. .නෙට් 4.5, වින්ඩෝස් 8.1 ප්‍රෝ.
bwDraco

13

bash

_(){ _;};_

පුනරාවර්තනය පැහැදිලිව පෙනෙන බව බොහෝ දෙනා හඳුනාගත හැකි නමුත් එය ලස්සන බව පෙනේ. නොමැත?

ක්‍රියාත්මක කිරීමෙන් පසු, ඔබට මෙය දැකගත හැකිය.

Segmentation fault (core dumped)

5
මෙය වඩාත් ලස්සන හා නරක ය:_(){_|_;};_
RSFalcon7

1
@ RSFalcon7 ෆෝක්බෝම්බ අනතුරු ඇඟවීම! (එසේම, {
කෘතිමව

3
මෙයද උත්සාහ කරන්න:(){:|:;}:
Tarek Eldeeb

14
රළු, විකෘති චිත්තවේගයක් මෙන් පෙනේ.
ටිම් සෙගුයින්

8
Bash Emoticons: මුහුණු අනුභව කරන්නා, තොග kil ාතකයා.
NobleUplift

12

හස්කල්

(අවම වශයෙන් දක්වා දුකයි නමුත් ඇත්ත ghc-7.6ක්රියාත්මක වුවත් O1හෝ ඊට වඩා වැඩි අහක ප්රශ්නය උපරිම ඵල කරන්නම්)

main = print $ sum [1 .. 100000000]

එය ස්වයංක්‍රීයව වලිග ඇමතුම් ප්‍රශස්තිකරණය කළ යුතු නොවේද?
blabla999

2
@ blabla999: හස්කල් හි වලිග ඇමතුම් එතරම් අදාළ නොවේ, එවැනි ගැටලු ඇති කරන රහසිගත කම්මැලිකම නිසා එය බොහෝ දුරට ගිලිහී යාමකි. මෙම අවස්ථාවෙහිදී, ගැටළුව වන්නේ sumක්‍රියාත්මක වන foldlඅතර එය වලිග ඇමතුම් භාවිතා කරයි, නමුත් එය සමුච්චය තක්සේරු නොකිරීම නිසා මුල් ලැයිස්තුවට වඩා විශාල කටු ගොඩවල් නිපදවයි. මාරුවීමේදී ගැටළුව අතුරුදහන් වන අතර foldl' (+), එය දැඩි ලෙස ඇගයීමට ලක් කරන අතර එමඟින් ඩබ්ලිව්.එච්.එන්. නැතහොත්, මා කී පරිදි, ඔබ GHC හි ප්‍රශස්තිකරණයන් මාරු කරන්නේ නම්!
කවුන්ටර්ලොක්විස් හැරීම

aah - සිත්ගන්නාසුළුයි, එබැවින් කිසිවෙකු මාපටැඟිල්ල එනතෙක් බලා නොසිටින්නේ නම් (එනම් මුද්‍රණය පිටවීම), කසළ එකතු කරන්නා ඒවා එකතු කර ගනීවි (ඉදිරිපස සිට පසුපසට)?
blabla999

1
බීටීඩබ්ලිව්, මේ කිසිවක් ඇත්ත වශයෙන්ම හැස්කල් ප්‍රමිතියෙන් නිශ්චිතව දක්වා නැත: එය හුදෙක් අවශ්‍ය වන්නේ ඇගයීම දැඩි නොවන බවය , එනම් ප්‍රති result ලය සම්පූර්ණයෙන් අවශ්‍ය නොවන්නේ නම් නොනවතින ගණනය කිරීමක් සදහටම අවහිර නොවේ. එය ක්‍රියාත්මක කිරීම දක්වා කොපමණ කාලයක් අවහිර වී ඇත්ද, සම්මත කම්මැලි GHC හි ඔබ ප්‍රති .ලය ඉල්ලා සිටින තුරු එය කිසිසේත් අවහිර නොකරයි.
හැරීම නතර විය

2
haskell සිසිල්.
blabla999

12

ස්මාල්ටෝක්

මෙය මැස්සන් මත නව ක්‍රමයක්
  නිර්මාණය කරයි , එය මැස්ස මත නව ක්‍රමයක්
    නිර්මාණය කරයි , එය මැස්සන් මත නව ක්‍රමයක් නිර්මාණය කරයි, එය
      ...
    ...
  ..
ඉන්පසු එය වෙත මාරු කරයි.

අමතර කුඩා කුළුබඩු පැමිණෙන්නේ එකවර කුහර මතකය සහ ගොඩවල් මතකය අවධාරණය කිරීමෙන්, දිගු හා දිගු ක්‍රම නාමයක් සහ ග්‍රාහකයක් ලෙස විශාල සංඛ්‍යාවක් නිර්මාණය කිරීමෙන්, අපි සිදුරෙන් පහළට වැටෙන විට ... (නමුත් පුනරාවර්තනය අපට මුලින්ම පහර දෙයි ).

පූර්ණ සංඛ්‍යාවෙන් සම්පාදනය කරන්න:

downTheRabbitHole
    |name deeperName nextLevel|

    nextLevel := self * 2.
    name := thisContext selector.
    deeperName := (name , '_') asSymbol.
    Class withoutUpdatingChangesDo:[
        nextLevel class 
            compile:deeperName , (thisContext method source copyFrom:name size+1).
    ].
    Transcript show:self; showCR:' - and down the rabbit hole...'.
    "/ self halt. "/ enable for debugging
    nextLevel perform:deeperName.

තක්සේරු කිරීමෙන් පසු පනින්න "2 downTheRabbitHole"...
... ටික වේලාවකට පසු, ඔබ පුනරාවර්තන එක්සෙන්ෂන් එකක් පෙන්වමින් නිදොස්කරණයක යෙදෙනු ඇත.

එවිට ඔබට සියලු අවුල් පිරිසිදු කළ යුතුය (ස්මාල් ඉන්ටෙගර් සහ ලාර්ජ් ඉන්ටෙගර් යන දෙවර්ගයටම දැන් පුදුම කේත රාශියක් ඇත):

{SmallInteger . LargeInteger } do:[:eachInfectedClass |
    (eachInfectedClass methodDictionary keys 
        select:[:nm| nm startsWith:'downTheRabbitHole_'])
            do:[:each| eachInfectedClass removeSelector:each]

නැතිනම් ඇලිස්ගේ ආශ්චර්යය ඉවත් කරමින් බ්‍රව්සරයේ යම් කාලයක් ගත කරන්න.

හෝඩුවාවේ හිසෙන් සමහරක් මෙන්න:

2 - and down the rabbit hole...
4 - and down the rabbit hole...
8 - and down the rabbit hole...
16 - and down the rabbit hole...
[...]
576460752303423488 - and down the rabbit hole...
1152921504606846976 - and down the rabbit hole...
2305843009213693952 - and down the rabbit hole...
[...]
1267650600228229401496703205376 - and down the rabbit hole...
2535301200456458802993406410752 - and down the rabbit hole...
5070602400912917605986812821504 - and down the rabbit hole...
[...]
162259276829213363391578010288128 - and down the rabbit hole...
324518553658426726783156020576256 - and down the rabbit hole...
[...]
and so on...

PS: "withoutUpdatingChangesFile:" එකතු කරන ලද්දේ ස්මාල්ටෝක් හි නිරන්තර වෙනස්වීම්-ලොග් ගොනුව පිරිසිදු කිරීමෙන් පසුවය.

පීපීඑස්: අභියෝගයට ස්තූතියි: නව හා නව්‍ය දෙයක් ගැන සිතීම විනෝදජනක විය!

පීපීපීඑස්: සමහර ස්මාල්ටෝක් උපභාෂා / අනුවාදයන් පිරී ඉතිරී යන සිරස් රාමු ගොඩට පිටපත් කරන බව මම සටහන් කරමි - එබැවින් මේවා ඒ වෙනුවට මතකයෙන් බැහැර තත්වයකට පත්විය හැකිය.


2
LOL +1 එම කළු මැජික් සඳහා එහි පිරිසිදු ස්වරූපයෙන්
masterX244

මට යම් කාලයක් සොයාගත හැකි නම්, නිර්නාමික පංතියක නිර්නාමික ක්‍රමයක් භාවිතා කරමින්, මෙතෙක් අඳුරුතම හාවා කුහරය සෑදීමට මට “දියුණු” කළ හැකිය ...
blabla999

12

සී #

ඇත්තෙන්ම විශාලයි struct, පුනරාවර්තනයක් නැත, පිරිසිදු C #, අනාරක්ෂිත කේතය නොවේ.

public struct Wyern
{
    double a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
}
public struct Godzilla
{
    Wyern a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
}
public struct Cyclops
{
    Godzilla a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
}
public struct Titan
{
    Cyclops a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
}
class Program
{
    static void Main(string[] args)
    {
        // An unhandled exception of type 'System.StackOverflowException' occurred in ConsoleApplication1.exe
        var A=new Titan();
        // 26×26×26×26×8 = 3655808 bytes            
        Console.WriteLine("Size={0}", Marshal.SizeOf(A));
    }
}

එය පයින් ගැසීමක් ලෙස එය දෝශ නිරාකරණ කවුළු බිඳ දමයි {Cannot evaluate expression because the current thread is in a stack overflow state.}


සහ සාමාන්‍ය අනුවාදය (NPSF3000 යෝජනාවට ස්තූතියි)

public struct Wyern<T>
    where T: struct
{
    T a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;        
}


class Program
{
    static void Main(string[] args)
    {
        // An unhandled exception of type 'System.StackOverflowException' occurred in ConsoleApplication1.exe
        var A=new Wyern<Wyern<Wyern<Wyern<int>>>>();
    }
}

තවත් අවශ්‍යයි සාමාන්‍ය කේත මෙතික්ස්: P
NPSF3000

එය පුනරාවර්තනයක් මෙන් පෙනෙනු ඇත, නමුත් එය කැදැලි ආකාරයේ තර්ක සමඟ කළ හැකිය.
ja72

1
මම මගේ පළ කිරීමට පෙර ඔබේ C # struct පිළිතුර දුටුවේ නැත. මට තවමත් ටිකක් වෙනස් ප්‍රවේශයක් ඇත, එබැවින් සමහර විට අපි ඔවුන්ට සහජීවනය සඳහා ඉඩ දෙමු.
තෝමස් වෙල්ලර්

11

සී #

අභිබවා ගිය ==ක්‍රියාකරු වැරදි ලෙස ක්‍රියාත්මක කිරීම :

public class MyClass
{
    public int A { get; set; }

    public static bool operator ==(MyClass obj1, MyClass obj2)
    {
        if (obj1 == null)
        {
            return obj2 == null;
        }
        else
        {
            return obj1.Equals(obj2);
        }
    }

    public static bool operator !=(MyClass obj1, MyClass obj2)
    {
        return !(obj1 == obj2);
    }

    public override bool Equals(object obj)
    {
        MyClass other = obj as MyClass;
        if (other == null)
        {
            return false;
        }
        else
        {
            return A == other.A;
        }
    }
}

ක්‍රියාකරු operator==භාවිතා කිරීමෙන් තමාටම ඇමතුමක් ලැබෙන බව කෙනෙකුට පැවසිය හැකිය ==, නමුත් ඔබ සාමාන්‍යයෙන් ඒ ගැන සිතන්නේ නැත ==, එබැවින් එම උගුලට වැටීම පහසුය.


11

SnakeYAML භාවිතා කරමින් පිළිතුර ආරම්භ කිරීම

class A
{

    public static void main(String[] a)
    {
         new org.yaml.snakeyaml.Yaml().dump(new java.awt.Point());
    }
}

සංස්කරණය කරන්න: එය ඉවත් නොකළේය

එය ක්‍රියාත්මක වන්නේ කෙසේදැයි සොයා බැලීම පා er කයාට පැවරේ: P (ඉඟිය: stackoverflow.com)

මාර්ගය වන විට: පුනරාවර්තනය ගතිකව සාදනු ලබන්නේ SnakeYAML විසිනි (එය අනුක්‍රමික ක්ෂේත්‍ර හඳුනා ගන්නේ කෙසේදැයි ඔබ දන්නේ නම් ඔබ දකිනු ඇත. Point )

සංස්කරණය කරන්න: එය ක්‍රියාත්මක වන ආකාරය පැවසීම:

SnakeYAML යුගලයක් සඳහා බලයි getXXXසහ setXXXඑකම නම සමඟ mthod XXXහා තරගයක නැවත පැමිණීමට වර්ගය පන්දු පිරිනමන්නා ක පරාමිතිය ලෙස සමාන වේ; පුදුමයට කරුණක් නම් Pointපංතියට a ඇති Point getLocation()අතර void setLocation(Point P)එය නැවත පැමිණේ. SnakeYAML එය නොදකින අතර එම විචක්ෂණභාවය සහ StackOverflows නැවත නැවත සිදු කරයි. ඒ තුළ ඔවුන් සමඟ වැඩ කරන විට HashMapසහ ඒ මත stackoverflow.com වෙතින් විමසන විට එය සොයා ගන්නා ලදී.


10

සී #

වැරදි ලෙස ක්‍රියාත්මක කරන ලද දේපල ලබා ගන්නා තැනැත්තා

class C
{
   public int P { get { return P; } }
}

static void Main()
{
   int p = new C().P;
}

14
IMHO. පැහැදිලි පුනරාවර්තනයක් සඳහා මෙය සම්භාව්‍ය උදාහරණයකි ... (සහ වලංගු නොවේ)
ඔලේ ඇල්බර්ස්

2
හොඳයි, එය පැහැදිලිව පෙනෙන්නේ ඔබ එය වරක් කළ පසු සහ සී # ලබා ගන්නන් ඔවුන් සිතූ ආකාරයට ක්‍රියා නොකරන බවයි. සියල්ලට පසු, මෙම කේතය සාමාජික විචල්‍ය ප්‍රකාශයකි, එබැවින් එය සත්‍ය සාමාජික විචල්‍යයක් නිර්මාණය නොකළ යුත්තේ ඇයි?
meustrus

2
මෙය කළ හැකි ක්‍රමයක් නොවේstatic void Main() { Main(); }
ජොඩ්‍රෙල්

5
Od ජොඩ්රෙල් ඔබ Main()අහම්බෙන් පුනරාවර්තනයක් ලියන්නේ නැත . නමුත් පුනරාවර්තන දේපලක් අහම්බෙන් ලිවීම තරමක් සරල වන අතර පසුව තොග පිටාර ගැලීම නිසා ව්‍යාකූල වේ.
svick

1
C # ලබා ගන්නා කෙනෙකුට මෙය ප්‍රයෝජනවත් වේ.
2rs2ts
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.