Mã ngắn nhất để giảm bớt hợp pháp


146

Tôi là một nhà phát triển và tôi không cảm thấy muốn làm việc của mình. Tôi biết từ XKCD rằng lý do tốt nhất để giải quyết vấn đề là mã của bạn đang biên dịch . Bởi vì điều này, tôi nghĩ rằng tôi cần một số mã sẽ biên dịch mãi mãi! Và bởi vì tôi lười biếng và không muốn phải gõ nhiều, điều này phải được thực hiện với mã ngắn nhất có thể.

Vì vậy, nhiệm vụ của bạn là viết một chương trình có giá trị cú pháp, nhưng sẽ khiến trình biên dịch đi vào một vòng lặp vô hạn.

Thông số kỹ thuật

  • Bạn phải sử dụng một ngôn ngữ có trình biên dịch, rõ ràng.
  • Chỉ định việc thực hiện được sử dụng trong mỗi giải pháp.
  • Đây là , vì vậy giải pháp hợp lệ ngắn nhất (tính bằng byte) sẽ thắng.
  • Trình biên dịch có thể chấm dứt do hết bộ nhớ hoặc không gian ngăn xếp.

1
@obarakon Tôi không đồng ý. Mã từ thử thách khác không thể được chuyển sang thử thách này một cách dễ dàng. Những thách thức trong khi cả hai liên quan đến vòng lặp vô hạn về cơ bản là khác nhau.
Sriotchilism O'Z cổ

1
@obarakon Không phải là một bản sao của câu hỏi này , vì nó không phải là môn đánh gôn.
Trái cây Esolanging


1
Tôi không chắc nó phù hợp với thử thách này (và ngay cả khi nó sẽ ghi điểm khủng khiếp), nhưng đối với những người quan tâm thì đây là cách tôi sẽ thực hiện Java: xác định bộ xử lý chú thích (đoạn trích ideone) mà bạn sẽ sử dụng khi gọi javacvới nó -processorLựa chọn. Nó làm cho việc biên dịch của bất kỳ lớp nào bị treo mãi mãi.
Aaron

6
Đối với các câu trả lời dẫn đến sự cố trình biên dịch: Với mục đích làm chậm, tôi nghĩ bạn vẫn muốn nó mất nhiều thời gian nhất có thể.
GuitarPicker

Câu trả lời:


16

Japt , 2 byte

`ÿ

Bạn có thể kiểm tra điều này trực tuyến tại đây , nhưng tôi không khuyến nghị vì nó sẽ đóng băng trình duyệt của bạn.

Giải trình

Japt sử dụng thư viện shoco để nén chuỗi. Một backtick báo cho trình biên dịch giải nén mọi thứ cho đến khi backtick tiếp theo hoặc kết thúc tập tin. Mỗi byte thực hiện như sau:

  • 00-7F được giữ nguyên.
  • 80-BFtừng hóa thân thành một cặp hai chữ cái viết thường chung ( at, oo, th, vv).
  • C0-DFmỗi cái tiêu thụ byte kế tiếp và biến thành một chuỗi bốn chữ cái chung .
  • E0-EFmỗi cái tiêu thụ ba byte tiếp theo và chuyển đổi thành một chuỗi tám chữ cái "chung" (bắt đầu từ Whererervà xuống dốc từ đó).
  • F0-F7 phá vỡ bộ giải nén, mặc dù nó vẫn trả về mọi thứ cho đến khi ngắt byte.
  • F8-FFlàm cho bộ giải nén đi vào một vòng lặp vô hạn. Tôi không chắc tại sao lại như vậy, vì tôi không quen lắm với hoạt động bên trong của thư viện shoco (và mã JavaScript hoàn toàn không thể đọc được ), nhưng trong trường hợp này khá tiện dụng.

Tôi không tin có bất kỳ cách nào khác để gây rối với trình biên dịch Japt, nhưng bạn không bao giờ biết ...


10
Ý bạn là gì không thể đọc được. Rõ ràng là bạn không cố gắng đủ.
fnɛtɪk

Tôi ước có một trình dịch ngược mã mô tả ...
tbodt

58

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

Một bó byte được lưu nhờ vào wchargein

Một byte được lưu nhờ Chris H

\input tikz
\tikz\pic

Tôi thực sự gặp phải điều này một cách tình cờ khi tôi đang làm bài tập về nhà. Tôi đã dành khá nhiều thời gian chờ đợi nó được biên dịch trước khi tôi nhận ra những gì đang xảy ra.

Điều này có hai phần:

\input tikz

Điều này tải gói TikZ

và:

\tikz\pic

Điều này bắt đầu một \tikzmôi trường và một lệnh vẽ.

Chuyện gì đang xảy ra vậy

Trình biên dịch pdflatex gặp sự cố \tikz\picvà vào chế độ tương tác khiến nó bị đình trệ vô thời hạn.


(1/2) Tôi không thể tái tạo điều này. Tôi nhận được "Runaway argument ? \draw l\end {document}! Tập tin đã kết thúc trong khi quét sử dụng \tikz@next." pdflatex 3.1415926-2.5-1.40.14 (TeX Live 2013 / Debian). tikz 2010/10/13 v2.10. Đây là tiêu chuẩn apt install texlive-fulltrên Ubuntu 14.04.
wchargein

1
@wchargein Tôi đang sử dụng cùng một phiên bản pdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016) và nó thực sự lặp lại vô thời hạn. Cảm ơn vì những lời khuyên.
Sriotchilism O'Z cổ

1
Bạn có thể lưu một byte bằng cách sử dụng \picthay vì \ draw` - chính xác là cùng một hành vi (được thử nghiệm bằng tikz 1.142)
Chris H

3
Tôi không thể tin rằng tôi thực sự ủng hộ việc không sử dụng TikZ, nhưng chắc chắn việc sử dụng nó là quá mức cần thiết ở đây. Có gì sai với cái cũ \def\a{\a}\a(12 byte)? Hoặc, vì đây là mã golf và ~được kích hoạt theo mặc định, \def~{~}~(9 byte)?
Vòng lặp không gian

2
@LoopSpace Không có gì sai với họ Tôi chỉ không biết sự tồn tại. Nếu bạn muốn đưa ra câu trả lời của riêng bạn thì hãy thoải mái.
Sriotchilism O'Z cổ

40

C, 18 byte

#include __FILE__

Trình biên dịch thường sẽ bỏ cuộc sau khi đệ quy khoảng 200 lần.

Xây dựng DOM có được tính là một bước biên dịch không? Nếu vậy, thì x.htm:

<iframe src=x.htm>

14
Tôi nhớ rằng các bộ khung đệ quy được sử dụng để đánh sập IE4 mạnh đến nỗi đôi khi nó đã lấy đi các thành phần hệ điều hành quan trọng với nó. Vì vậy, HTML có lẽ có giá trị.

10
@ ais523, đó là bởi vì, trong IE4, Internet Explorer một "thành phần hệ điều hành quan trọng".
Đánh dấu

2
Một chút tinh chỉnh và nó là PHP hợp lệ : <?include __FILE__;.
Ismael Miguel

6
Không thể đăng câu trả lời này vì đại diện của tôi không đủ cao, nhưng hai lựa chọn thay thế là: #include "/ dev / zero" và #include "/ dev / stdin" - hãy cẩn thận khi chạy cái đầu tiên !!
rrauenza

2
Khi tôi dùng thử, việc sử dụng bộ nhớ của gcc bắt đầu tăng nhanh mà không bị ràng buộc, hệ thống trở nên không phản hồi và cuối cùng cơ quan giám sát của tôi đã khởi động và khởi động lại. Điều đó khá thú vị :)
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<>();}

Điều này chấm dứt với một StackOverflowErrorđiều xảy ra bởi vì hệ thống phân giải chung không thể quyết định một gốc để giải quyết các tổng quát khác.

Tín dụng do đến hạn .

chuyện gì xảy ra ở đây thế?

  1. A<T>chỉ ở đó để có một phụ huynh 1 chữ cái. Đó là chung chung. Tôi có thể đã sử dụng List, nhưng việc nhập và lặp lại 4 chữ cái quá dài.
  2. B<T> tuyên bố chung chung cơ bản.
  3. B extends Ađược yêu cầu phải có một hệ thống phân cấp giữa BA.
  4. extends A<A>tạo một tài liệu tham khảo tự A<T>.
  5. A<? super B> kích hoạt việc tìm kiếm thuốc generic trên A<T>
  6. B<B<T>>tạo một tài liệu tham khảo tự B<T>.
  7. A<...> a=new B<>()buộc sử dụng các tổng quát, thay vì chỉ đơn giản là định nghĩa của các tổng quát, buộc độ phân giải khi biên dịch B, và không sau đó.
  8. A<?super Btạo ra một tham chiếu không tự, vì vậy chúng ta có cả một tham chiếu đến một loại và một loại khác trong các tổng quát của A.
  9. B<A>tạo ra một tham chiếu không tự, vì vậy chúng ta có cả một tham chiếu đến một loại và một loại khác trong các tổng quát của B.

Bây giờ, loại Acó loại generic AB, nhưng được chọn? Quên đi bản thân, hãy cố gắng giải quyết B. Bình.

Được rồi, Bcó loại thuốc generic AB, nhưng cái nào sẽ được chọn? Quên đi bản thân, hãy cố gắng giải quyết A. Pông.

Loại đệ quy này thực sự không thể tránh được vì có những trường hợp hợp pháp như A<B<A<B<A<B<Object>>>>>>: ví dụ: một đối tượng JSON : List<Map<String,Map<String,List<Map<String,List<String>>>>>>.

Kết quả tổng hợp

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

Trên hệ thống của tôi, dấu vết ngăn xếp dừng lại sau khi hiển thị 1024 dòng, thực tế là 4 dòng giống nhau được lặp lại 256 lần, do đó chứng minh một đệ quy vô hạn. Tôi sẽ dành cho bạn toàn bộ dấu vết đó.

Tiết kiệm

  1. 102 → 95 byte: thay thế interface+ implementsbằng class+ extends.
  2. 95 → 89 byte: được thay thế Longbằng A(hai lần).
  3. 89 → 88 byte: toán tử kim cương đã sử dụng ( new B<A>()new B<>()).
  4. 88 → 78 byte: đã chuyển khai báo biến sang một thành viên của lớp, nhờ vào VoteToClose .

1
Tôi đang nhìn gì vậy
Addison Crump

Bạn có thể rút ngắn điều này xuống còn 78 byte bằng:class A<T>{}class B<T>extends A<A<?super B<B<T>>>>{A<?super B<A>>b=new B<>();}
Addison Crump

@VoteToC Đóng Bạn đang xem một ví dụ điển hình về tính không ổn định trong các tổng quát của Java. Mỗi cái chung được cho là được giải quyết dựa trên một gốc chung mà sau đó nó được xác nhận chống lại. Điều ở đây là cái chung Bchứa một tham chiếu không thể giải thích được cho cái chung Amà lần lượt nó chứa một tham chiếu không thể giải thích được cho cái chung của B. Khi trình phân giải không thể quyết định, nó sẽ kiểm tra các tham chiếu, nhưng ở đây cả hai tổng quát đều đề cập đến nhau theo một cách không thể giải quyết được (chủ yếu là nhờ vào tài liệu tham khảo và supertừ khóa. Vì vậy, trình giải quyết thực sự là bóng bàn giữa hai thế hệ.
Olivier Grégoire

Tôi đã suy nghĩ về việc tạo ra một vấn đề thời gian biên dịch với các chú thích theo chu kỳ: public @interface X {@X(x=X.class)Class<? extends X> x();}... Nhưng tôi nhanh chóng nhận ra lý do tại sao nó không hoạt động lol.
Bạch tuộc ma thuật Urn

34

GNU Makefile, 8 7 byte

Một byte được lưu nhờ KonradRudolph

Được lưu Makefilevà gọi bởi make:

x:;make

Điều này sẽ tạo ra một đệ quy xây dựng vô hạn trên mục tiêu đầu tiên được tìm thấy "x".

Không cần phải nói rằng bạn không thực sự muốn chạy quả bom ngã ba này trên máy chủ sản xuất của mình. :-)

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

Phiên bản thay thế, 5 byte

Được đề xuất bởi KonradRudolph:

x:;$_

$_là một tham chiếu đến đối số cuối cùng của lệnh trước đó. Cụ thể hơn, nó được giải quyết ở đây là đường dẫn tuyệt đối đến lệnh đang được thực thi - makechính là nó.

Điều này sẽ hoạt động tốt trong môi trường Bash chính hãng, nhưng không phải trên Windows + MinGW.


2
Hmm, tôi không nghĩ rằng makethực sự biên dịch Makefile (nó chỉ diễn giải nó).
zeppelin

3
@zeppelin Bạn nói đúng, đây có lẽ là một câu trả lời. Điều đó nói rằng, các đệ trình liên quan đến đệ quy vĩ mô ở cấp tiền xử lý sẽ không bao giờ bắt đầu biên dịch bất kỳ mã thực tế nào.
Arnauld

11
Nó phù hợp với mục tiêu dự định: có một quá trình xây dựng vô hạn. +1!
YSC

23

C ++, 60 58

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

Điều này đệ quy tạo các trường hợp class avới các tham số mẫu khác nhau. GCC 7.0 dừng sau 900 cấp độ đệ quy với hàng tấn lỗi về chế độ operator->riêng tư, ví dụ ICC 17 và Microsoft (R) C / C ++ Tối ưu hóa Trình biên dịch hết thời gian 19 lần trên godbolt .

Vấn đề với điều đó là có lẽ tất cả các trình biên dịch sẽ hết bộ nhớ tại một số thời điểm vì vậy ngay cả khi không có giới hạn đệ quy, điều này sẽ dừng lại. Điều tương tự cũng có thể áp dụng cho câu trả lời Clojure.

Chỉnh sửa: 2 byte được lưu bởi bolov - Cảm ơn


1
ngắn hơn:a<int>i=i->b;
bolov

1
@Pockets như tôi đã nêu trong câu trả lời của mình đó là vì operator->mặc định là riêng tư trong một lớp. Trong một cấu trúc, nó công khai và do đó i->bcó thể truy cập nó.
Christoph

1
gcc 4.4.7 dường như treo vô thời hạn ở đây. Chờ đợi vô cùng hoặc cho nó hiển thị đầu ra, tùy theo điều kiện nào đến trước. Sẽ cập nhật
osuka_

1
@osuka_ nó vẫn chạy à?
Christoph

1
@Christoph không, nó bị sập với SIGSEGV sau khi tôi để nó chạy trong vài ngày. Quên cập nhật, mặc dù - cảm ơn đã nhắc nhở!
osuka_

23

Perl , 15 13 byte

BEGIN{{redo}}

Hãy thử trực tuyến!

Bây giờ với 2 byte được lưu: @Zaid nhắc nhở tôi về một cách khéo léo hơn để thực hiện một vòng lặp trong Perl.

Điều này khá đơn giản: nó chỉ cần cài đặt một trình phân tích cú pháp với một vòng lặp vô hạn, làm cho mã mất nhiều thời gian để phân tích cú pháp. (Perl rất hay ở chỗ nó cho phép bạn chạy mã tùy ý ở giữa phân tích cú pháp; các trình phân tích cú pháp được chỉ định trong chính Perl và thường được sử dụng để làm những việc như nhập thư viện hoặc thay đổi quy tắc phân tích cú pháp cho một mã định danh bạn muốn xử lý như một từ khóa.) Hãy thử trực tuyến! liên kết ở trên cung cấp -ctùy chọn (để biên dịch mã để xác minh cú pháp cho chính xác, nhưng không chạy nó), để chứng minh rằng vòng lặp vô hạn xảy ra tại thời điểm biên dịch.

Trong trường hợp bạn đang tự hỏi về "thời gian biên dịch" bằng ngôn ngữ kịch bản: Perl thực sự biên dịch thành mã byte và sau đó chạy mã byte, nhưng đây là một chi tiết hiếm khi có liên quan khi lập trình nó. Họ -MO=tùy chọn dòng lệnh có thể được sử dụng để thực hiện mọi thứ với mã byte ngoài việc chạy nó (mặc dù không phải với chương trình này, vì vòng lặp vô hạn xảy ra trước khi mã byte có thể được tạo).


1
a:goto atrông cũng đẹp đấy (cùng một cách buồn bã).
Dada

3
BEGIN{{redo}}sẽ giúp bạn tiết kiệm một vài byte
Zaid

20

C ++ 37 30 29 byte

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

Nó sử dụng tham số chức năng tự động trong tương lai. Nó đã được đề xuất vào C ++ 17, nhưng tôi không nghĩ nó đã được tạo ra. gcctuy nhiên hỗ trợ nó như một phần mở rộng.

Về cơ bản

void foo(auto p);

tương đương với

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

Mã cố gắng khởi tạo fđệ quy với các đối số khuôn mẫu khác nhau. gccthất bại với

lỗi nghiêm trọng: độ sâu khởi tạo mẫu vượt quá tối đa 900 (sử dụng -ftemplate-height = để tăng tối đa)

Với -ftemplate-depth=10000tôi đã có nó để nhổ "Kills - vượt quá thời gian xử lý" trên godbolt.

Kiểm tra nó trên godbolt


1 byte được lưu bởi Quentin. Cảm ơn bạn.


1
Một byte có thể được lưu bằng cách sử dụng intlàm kiểu trả về :)
Quentin

Thật vậy, autocác tham số hàm không biến nó thành C ++ 17; và cũng int f() { ... }, a;không phải là một tuyên bố pháp lý lần trước tôi đã kiểm tra. (Bạn không thể trộn các khai báo hàm với các khai báo biến như thế.) Những gì bạn có ở đây là một phương ngữ cực kỳ đặc trưng của GCC của C ++. Không có gì sai với điều đó trong bối cảnh này. :)
Quuxplusone

19

Lisp thông thường, 8 byte

#.(loop)

Trình biên dịch sẽ cố gắng đọc một biểu mẫu và sẽ gặp macro macro đọc sharpsign-dot , đánh giá mã tại thời điểm đọc và sử dụng kết quả của nó làm biểu mẫu để biên dịch. Ở đây, mã được thực thi là một vòng lặp vô hạn.


17

TeX, 9 byte

\def~{~}~

TeX hoạt động bằng cách mở rộng các macro. Hầu hết thời gian, các macro của TeX (còn được gọi là các chuỗi điều khiển ) có dạng \namenhưng cũng có thể định nghĩa một số ký tự là macro, chúng được gọi là các ký tự hoạt động . Ký tự ~được kích hoạt theo mặc định trong TeX đơn giản và do đó có thể được sử dụng làm tên macro mà không cần khai báo thêm. Cái \def~{~}ở trên định nghĩa ~để nó mở rộng ra ~. Đó là, bất cứ khi nào TeX gặp phải ~thì nó sẽ thay thế nó ~và sau đó kiểm tra lại sự thay thế, nghĩa là nó gặp một sự xuất hiện hoàn toàn mới ~và thay thế nó bằng cách ~. Điều này xác định vòng lặp vô hạn. Tất cả những gì cần thiết là bắt đầu vòng lặp và đó là những gì trận chung kết ~làm.


Đã thêm vào chỉnh sửa

Để thực hiện điều này được biên dịch đúng , hãy gọi là:

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

Các -inilá cờ nói rằng pdftexnên biên dịch một file định dạng mới. Đây là một tập hợp các định nghĩa được biên dịch sẵn có thể được tải khi TeX sau đó được gọi để tăng tốc độ xử lý tài liệu (LaTeX2e là một ví dụ về điều này). Tôi đoán rằng &pdftexthêm một vài byte, lấy tổng số là 17.


Điều này xảy ra vào thời gian biên dịch? Câu hỏi yêu cầu vòng lặp vô hạn xảy ra trong khi biên dịch, không phải khi chạy.

@ ais523 Chưa nghĩ hết về bit đó. Tôi đã bỏ qua câu trả lời TikZ. Tôi đã thêm một giải pháp thay thế chắc chắn được biên dịch, với chi phí thêm một vài byte.
Vòng lặp không gian

2
@ ais523: Như mọi khi, "biên dịch" và "chạy" là hai mặt của cùng một đồng tiền. Cá nhân, tôi nghĩ mã nguồn TeX là "biên dịch" thành tài liệu PDF (sau đó được "thực thi" bằng cách xem), giống như cách mã nguồn C ++ được "biên dịch" thành các tệp .exe (sau đó được "thực thi" bởi đang chạy). Nhưng bạn cũng có thể nghĩ pdftexchương trình là "diễn giải" đầu vào TeX để tạo PDF dưới dạng "đầu ra" - giống như cách g++chương trình "diễn giải" đầu vào C ++ để tạo tệp .exe thành "đầu ra". ;)
Quuxplusone

13

Haskell, 25 + 17 = 42 byte

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

Một siêu dữ liệu Haskell đơn giản xác định một giá trị vô hạn và cố gắng tính giá trị đó tại thời gian biên dịch.

Gọi với ghc -XTemplateHaskell <file.hs>(+17 cho tham số cho trình biên dịch)


Không $(let a=a in a)hoạt động (cho 32 byte)?
Ry-

1
Không! GHC quá thông minh. Bất kỳ vòng lặp vô hạn nào của biểu mẫu let a = a in asẽ được viết lại thành một ngoại lệ, điều này chỉ gây ra lỗi trình biên dịch trái ngược với vòng lặp vô hạn. (mặc dù có lẽ điều này sẽ hoạt động với trình biên dịch Haskell khác, nhưng tôi không có sẵn để thử)
user2407038

Nó hoạt động với runghc đối với tôi, vì vậy tôi muốn nói rằng nó hợp lệ. (Trên thực tế, nó cũng hoạt động với ghc. 8.0.1 ở đây.)
Ry-

Có thật không? Tôi cũng đang sử dụng ghc 8.0.1 - đối với tôi Exception when trying to run compile-time code: <<loop>>, cả trong trình thông dịch và khi biên dịch ... về mặt kỹ thuật, đoạn mã trên cũng bị loại trừ, nhưng một lỗi tràn ngăn xếp, được thông số kỹ thuật cho phép rõ ràng - và nếu bạn có bộ nhớ vô hạn, nó sẽ thực sự lặp lại mãi mãi. Các <<loop>>đám cháy ngoại lệ xa trước khi máy tính của tôi chạy ra khỏi bộ nhớ.
user2407038

12

lớp, 10 9 byte

for(;;){}

với đoạn mã trên được đặt trong một build.gradletập tin. Gradle sử dụng Groovy làm ngôn ngữ cơ bản của nó vì vậy chúng tôi thực sự đang nói về Groovy ở đây, nhưng vì câu hỏi là về thời gian xây dựng nên tôi nghĩ rằng gradle sẽ phù hợp hơn.

Chạy bất kỳ lệnh xây dựng lớp nào với đoạn mã trên sẽ in dòng trạng thái xây dựng tương thích với ông chủ tóc nhọn:

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

nếu bạn đang muốn tăng lương, hãy thêm -dcờ gỡ lỗi cho:

$ 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

mà ngoài việc tìm kiếm ấn tượng phức tạp cũng cập nhật với một bộ mới:

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.

các dòng trạng thái cứ sau 10 giây làm cho nó trông giống như bản dựng đang bận thực hiện các công cụ ... kỹ thuật quan trọng.


8

SWI-Prolog, 34 byte

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

Giải trình

term_expansion/2 là một cái gì đó được trình biên dịch gọi tự động trước khi thực sự biên dịch mã để chuyển đổi một số thuật ngữ trong mã nguồn thành các thuật ngữ khác.

Ở đây, chúng tôi giới thiệu một quy tắc mới cho term_expansion/2: repeat,1=0..

repeat/0 là một vị ngữ luôn luôn thành công và cung cấp vô số điểm lựa chọn.

1=0đang cố gắng để thống nhất 1với 0, đó là luôn luôn false. Điều này sẽ khiến trình biên dịch quay lại repeat(vì nó luôn cung cấp một điểm lựa chọn) và thử 1=0lại, v.v.


Không hoạt động trong GNU Prolog, vì vậy tôi cho rằng điều này là dành riêng cho việc triển khai. Bạn có thể muốn đặt tên của trình biên dịch trong tiêu đề. (Tôi đang giả sử SWI Prolog.)

@ ais523 Cảm ơn, đã không kiểm tra các bản phân phối khác, nhưng vì công cụ biên dịch thường khá cụ thể, tôi nên biết rõ hơn ...
Fatalize 16/2/2017

@ ais523 Tuy nhiên, theo điều này , bạn có thể sử dụng expand_termthay thế (vì nó nói term_expansionkhông thể được sử dụng như ở đây trong GNU Prolog). Nó không hoạt động với expand_termSWI mặc dù.
Gây tử vong vào

7

GNU Make, 44

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

Tôi không thể yêu cầu tín dụng cho việc này. Nó được lấy từ cuốn sách của Robert Mecklenburg Quản lý các dự án với GNU Make: Sức mạnh của GNU Make để xây dựng bất cứ điều gì .

Khi thực hiện lệnh Makefile này, nó sẽ thấy tệp Makefile đã hết hạn (vì mục tiêu .PHONY đã hết hạn, do đó, nó thực thi lệnh cảm ứng, cập nhật dấu thời gian của tệp tạo tệp. Sau đó, hãy đọc lại tệp và phát hiện ra tệp makefile đã hết hạn .... Vâng, bạn hiểu ý.

Tôi thích câu này hơn câu trả lời Make khác vì nó không sử dụng đệ quy. Trên máy ảo của tôi, câu trả lời Tạo khác tiếp tục thực hiện các quy trình và ở đâu đó sâu khoảng 7.000, VM bị dừng lại không phản hồi. Tuy nhiên, với câu trả lời này, nó có thể tiếp tục vô thời hạn mà không ăn hết tài nguyên hệ thống. Bạn thực sự sẽ có thể buông lơi với bản dựng này. Tôi đã trải qua hơn 1.000.000 lần lặp mà không có sự xuống cấp hệ thống rõ ràng.

Lưu ý tôi đã phải thêm sleep 1để dấu thời gian makefile thực sự được cập nhật mỗi lần. Bạn có thể thay đổi điều này thành sleep 0.01nếu bạn muốn nó ghi nhanh hơn các lần lặp nhanh hơn một chút.


6

GNU Forth, 15 byte

Chơi gôn

: : [do] [loop]

Định nghĩa lại (biên dịch lại) từ :và gọi một vòng lặp vô hạn ngay lập tức [do] [loop]bên trong định nghĩa mới (ngay tại thời điểm biên dịch).

Một loại từ không được biên dịch. Những từ được gọi là các từ ngay lập tức được thực thi (được thực hiện ngay bây giờ) bất kể trình thông dịch văn bản đang phiên dịch hay biên dịch.

Dùng thử trực tuyến!


5

Clojure, 21 byte

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

Liên kết trình biên dịch bằng cách xác định một macro liên tục phát ra các cuộc gọi đến chính nó.

Trên điện thoại của tôi, điều này khiến REPL bị treo và lag thiết bị. Trên máy tính xách tay của tôi, điều này không thành công với StackOverflow.

Thật không may, StackOverflow xảy ra ngay lập tức, nhưng nó vẫn hợp lệ theo các quy tắc.


5

MSBuild, 130 byte

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

Lưu tệp này dưới dạng tệp có .projphần mở rộng và chạy với msbuildtừ dấu nhắc lệnh. MSBuild sẽ chạy mục tiêu duy nhất của nó mà chỉ đơn giản là sinh ra một msbuildquá trình khác .


Là thụt đầu dòng cần thiết để làm việc này? Những gì về dòng mới? Thông thường có thể đánh gôn ra khoảng trắng.

Không, nó chỉ dễ đọc hơn. Số lượng ký tự không bao gồm khoảng trắng.
Danko Durbić

1
À đúng rồi. Trong trường hợp đó có lẽ bạn nên đề cập rằng trong cơ thể của bài viết.


4

Toán học 33 byte

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

Mã sẽ cố gắng đánh giá một cách tượng trưng đối số trước khi biên dịch và chính đối số là một vòng lặp vô hạn. Hàm While có đối số thứ hai null vì nó không quan trọng.


"Trước khi biên soạn" Vâng ... không.
Máy

Vui lòng cung cấp một đối số hợp lệ. reference.wolfram.com/language/tutorial/...
Kelly Lowder

Câu hỏi là, vòng lặp xảy ra trong Compilecuộc gọi hoặc trước khi nó?
Máy

3

Haskell (GHC, không có Mẫu Haskell hoặc quy tắc viết lại tùy chỉnh) , 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()

Về mặt lý thuyết, điều này đi vào một vòng lặp vô hạn theo cách tương tự như phương pháp C ++ thực hiện : phương pháp đa hìnhy được khởi tạo thành các kiểu phức tạp hơn bao giờ hết. Trong thực tế, kích thước ngăn xếp được phân bổ mặc định thực sự tràn ra nhanh chóng:

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

Tín dụng cho Luke Palmer .


1

Haskell (ghc), 32 + 2 = 34 byte

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

chạy với ghc -O <file>. Kích hoạt một quy tắc viết lại cho chức năng chính viết lại cho cùng một điều. Tính năng đáng tiếc duy nhất là ghc đủ thông minh để phát hiện điều này và dừng lại sau 100 lần lặp. Tôi không biết một cách dễ dàng để vô hiệu hóa hành vi này.


1

Boo, 25 byte

macro l:
 x=0 while 1>0
l

Điều này xác định một macro, thực thi tại thời gian biên dịch, thực thi một vòng lặp vô hạn, và sau đó gọi macro.


1

Rust, 18 byte

include!(file!());

Cổ điển tự bao gồm. Mặc dù vậy, Rustc rất khó chịu và theo mặc định sẽ giải cứu sau 128 lần thu hồi và nó mở rộng chiều sâu trước tiên để tăng trưởng theo cấp số nhân cũng không hoạt động. Điều tương tự cũng áp dụng cho các giải pháp C và C ++.


0

Yếu tố , 29 16

<< [ t ] loop >>

Phần giữa << >> được thực hiện tại thời điểm phân tích.

Đối với những gì [ t ] loop này, tôi sẽ để bạn đoán ...

Bạn có thể đặt nó trong Trình nghe, hoặc thêm nó vào bất kỳ tập tin từ vựng hoặc tập lệnh nào với nội dung soạn sẵn tương ứng.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.