Cobalah untuk menulis beberapa kode dalam bahasa Anda dan membuatnya tidak memenuhi kriteria kami sebagai bahasa pemrograman lagi.
Bahasa memenuhi kriteria kami (versi yang disederhanakan untuk tantangan ini) sebagai bahasa pemrograman jika:
- Itu dapat membaca input pengguna yang mewakili tupel bilangan bulat positif dalam beberapa cara.
- Ini dapat menghasilkan setidaknya dua hasil yang berbeda tergantung pada input.
- Ini dapat mengambil dua bilangan bulat positif dan menambahkannya (dan hasilnya dapat mempengaruhi output).
- Dapat mengambil bilangan bulat positif dan memutuskan apakah bilangan prima (dan hasilnya dapat mempengaruhi output).
- Untuk tujuan tantangan ini, segala jenis keluaran yang bukan merupakan metode keluaran yang diizinkan untuk tantangan normal diabaikan. Jadi tidak masalah apakah program tersebut juga dapat memainkan musik, atau memposting melalui HTTP, dll.
- Pembaruan: Anda juga dapat memilih satu atau beberapa metode output yang diizinkan, dan mengabaikan yang lainnya. Tetapi Anda harus menggunakan definisi yang sama di mana-mana dalam kriteria berikut. Dan jika program Anda dapat menonaktifkan lebih dari satu metode output - yang bernilai lebih banyak upvotes.
Contohnya seperti membuatnya tidak dapat menampilkan, atau menonaktifkan semua konstruksi loop sehingga tidak akan dapat melakukan uji coba awal dan memastikan pengguna tidak dapat mengaktifkannya kembali.
Anda harus meninggalkan tempat untuk memasukkan kode baru. Secara default, ini di akhir kode Anda. Jika kami mempertimbangkan untuk meletakkan kode sumber di tempat itu di jawaban Anda dan menjalankan kode lengkap sebagai program lengkap sebagai penerjemah bahasa baru, bahasa itu seharusnya tidak memenuhi kriteria.
Tetapi kode yang dimasukkan harus dieksekusi sedemikian rupa seperti bahasa yang memenuhi kriteria:
- Kode yang dimasukkan harus secara tata bahasa sama dengan sesuatu (katakan itu adalah blok kode dalam kriteria berikut) yang umumnya memenuhi kriteria, dari perspektif siapa pun yang ingin menulis stabilo sintaksis. Jadi tidak bisa dalam string, komentar, dll.
- Kode yang dimasukkan harus benar-benar dieksekusi, dengan cara yang seharusnya memenuhi kriteria. Jadi itu tidak bisa dalam fungsi yang tidak terpakai atau
sizeof
di C, Anda tidak bisa hanya menjalankan bagian yang tidak berfungsi dalam kode, dan Anda tidak bisa meletakkannya setelah loop tak terbatas, dll. - Anda tidak dapat membatasi jumlah program yang mungkin benar secara tata bahasa yang dihasilkan dengan cara ini. Jika sudah ada sesuatu seperti batas panjang dalam bahasa yang Anda gunakan, itu tidak akan memenuhi kriteria bahkan jika batas ini dihapus.
- Anda tidak dapat memodifikasi atau "menggunakan" konten input / output, tetapi Anda dapat mencegahnya diakses.
- Kriteria ini biasanya hanya berlaku untuk bahasa tanpa I / O eksplisit:
- Kode Anda harus mengarahkan input pengguna (yang berisi informasi dengan panjang sewenang-wenang) ke kode yang dimasukkan, jika suatu blok kode biasanya tidak bisa mendapatkan input pengguna secara langsung / eksplisit dalam bahasa yang Anda gunakan.
- Kode Anda harus mencetak nilai yang dikembalikan dari kode yang dimasukkan, jika blok kode biasanya tidak dapat menampilkan hal-hal secara langsung / eksplisit dalam bahasa yang Anda gunakan.
- Jika Anda mencetak nilai yang dikembalikan, dan itu diketik dalam bahasa yang Anda gunakan, jenis yang dikembalikan harus dapat memiliki 2 nilai praktis yang mungkin berbeda. Misalnya, Anda tidak bisa menggunakan tipe
struct {}
ataustruct {private:int x;}
dalam C ++.
Ini adalah kontes popularitas. Jawaban sah terpilih tertinggi (jadi tidak ada yang melihat kesalahan atau semua kesalahan diperbaiki) menang.
Klarifikasi
- Anda tidak boleh memodifikasi kode dalam bentuk teks, tetapi dapat mengubah sintaksis sebelum kode ditafsirkan atau dikompilasi.
- Anda dapat melakukan hal-hal lain saat kode sedang berjalan. Tetapi alasan itu tidak memenuhi kriteria harus dalam kode yang dimasukkan itu sendiri. Itu dapat kesalahan karena gangguan dari utas lain, tetapi tidak hanya terbunuh oleh utas lain.
- Semua spesifikasi pada dasarnya berarti harus memenuhi kriteria secara tata bahasa jika semua built-in tidak diubah tetapi tidak benar-benar dilakukan. Tidak masalah jika Anda menemukan solusi non-gramatikal, seperti meneruskan parameter ke blok kode dengan benar, tetapi membuatnya tidak dapat digunakan dalam beberapa cara.
- Sekali lagi, kode yang dimasukkan harus benar-benar dieksekusi. Kode setelah infinite loop atau crashing dianggap "tidak benar-benar dieksekusi", sehingga tidak valid . Jawaban-jawaban itu mungkin menarik, tetapi sudah ada beberapa loop tak terbatas atau pertanyaan lain di situs ini, dan Anda mungkin menemukan jawaban yang lebih tepat untuk dijawab. Jika tidak, pertimbangkan untuk mengajukan pertanyaan baru. Contoh dari pertanyaan itu adalah:
Papan peringkat
var QUESTION_ID=61115/*,OVERRIDE_USER=8478*/;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,/*getComments()*/(more_answers?getAnswers():process())}})}/*function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}*/function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),score:s.score,language:a[1],lang:jQuery('<div>').html(a[1]).text(),link:s.share_link})}),e.sort(function(e,s){var r=e.score,a=s.score;return a-r});var s={},r=1,a=null,n=1;e.forEach(function(e){e.score!=a&&(n=r),a=e.score,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",e.n=n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.score).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text())/*,s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}*/});var t=e/*[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o])*/;t.sort(function(e,s){return (e.lang.toUpperCase()>s.lang.toUpperCase())-(e.lang.toUpperCase()<s.lang.toUpperCase())||(e.lang>s.lang)-(e.lang<s.lang)});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{PLACE}}",o.n).replace("{{LANGUAGE}}",o.language).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.score).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<(?:h\d|(?!.*<h\d>)p)>\s*((?:[^,;(\s]| +[^-,;(\s])+)(?=(?: *(?:[,;(]| -).*?)?\s*<\/(h\d|p)>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;float:left}table{width:250px}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/all.css?v=7509797c03ea"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Score</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Sorted by Language</h2> <table class="language-list"> <thead> <tr><td></td><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{PLACE}}</td><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
sumber
Jawaban:
JavaScript Shell
Ini akan membuat bahasa tersebut benar-benar tidak dapat digunakan.
Bukankah menyenangkan JavaScript memiliki fungsi yang bagus untuk menghancurkan dirinya sendiri?
Ini cukup sederhana,
clear
fungsinya benar-benar mengosongkan objek.this
mengacu pada objek global yang membersihkan segala sesuatu termasuk konstruktor dan fungsi.Karena ini membersihkan semuanya , melakukan apa saja , bahkan mendefinisikan literal akan membuat kesalahan, membuat bahasa tersebut sama sekali tidak berguna: * Lingkungan REPL tidak diperlukan. Menggunakan mesin SpiderMonkey (shell not browser), mesin JS asli.
sumber
clear
fungsi tampaknya menjadi tambahan-SpiderMonkey-shell tertentu, bukan hal JavaScript generik. Ini tentu tidak muncul dalam spec ES5 § Function Properties dari Global Object . Saya mencoba ini dengannode
dan mendapat "ReferenceError: clear tidak didefinisikan". Di konsol Chrome dan Firefox,clear
fungsinya hanya membersihkan konsol, apa pun argumen yang dilewatinya. Atau mungkin alat yang Anda gunakan mematuhi versi ECMAScript lebih tua dari 5,1?Emmental
Saya tahu ini bukan kode golf, tetapi alat yang tepat untuk pekerjaan itu, Anda tahu ...
Kode pengguna dapat dimasukkan setelah
!
.Emmental adalah esolang yang menarik yang didasarkan pada penulisan ulang penerjemah. Setiap simbol tunggal (termasuk simbol bawaan) dapat didefinisikan ulang sebagai program Emmental yang sewenang-wenang. Bahasa ini sangat bergantung pada fitur ini sehingga tidak menyediakan konstruksi perulangan. Sebagai gantinya, Anda mendefinisikan perintah rekursif yang muncul dalam definisi mereka sendiri.
Redefinisi ini terjadi via
!
, yang membaca karakter dari stack, dan kemudian membaca string dari stack hingga bertemu dengan a;
. Karakter kemudian didefinisikan ulang untuk berarti program yang diwakili oleh string itu.Itu artinya, kita dapat menonaktifkan fitur looping Emmental dengan mendefinisikan kembali
!
dirinya sebagai program kosong. Sementara semua kode Emmental lainnya masih berjalan dengan baik, dan banyak kriteria bahasa pemrograman masih terpenuhi, tidak mungkin untuk mendefinisikan kembali simbol lagi. Tanpa fitur ini (dan karenanya, tanpa dapat mengulang), Emmental tidak dapat lagi menguji apakah suatu bilangan prima.sumber
PHP
Satu dapat sepenuhnya membunuh PHP dengan menetapkan batas memori ke 1.
Itu akan benar-benar mati.
Coba ini:
Ini seharusnya tidak membuat kesalahan, karena tidak ada cukup memori untuk itu.
Anda dapat membaca lebih lanjut tentang
memory_limit
arahanJika yang sebelumnya tidak valid, seseorang dapat menggunakan buffer output:
Ini sepenuhnya menghilangkan output apa pun. Karena buffer output masih terbuka, beberapa hal lain tidak sengaja tersisa setelah kode tidak akan ditampilkan juga.
Menggunakan ide @fschmengler :
Ini akan menghindari masalah menghapus buffer output yang dimulai secara otomatis, yang digunakan untuk menangkap output yang akan dikompresi.
Ini juga mencegah buffer output dihapus atau dihapus (dikirim ke browser). Untuk memperkuat kembali hal itu, penangan keluaran ditambahkan, yang selalu mengembalikan string kosong.
Menjalankan
ob_end_flush(); echo "Hello, world!";
tidak akan menghasilkan apa-apa, tetapi akan mengirimkan output dengan polosob_start();
.Terima kasih kepada @LucasTrzesniewski karena mengungkap masalah ini!
sumber
while(ob_get_level()) ob_end_flush();
digunakan dalam kerangka kerja untuk menyiram semua buffer output yang mungkin telah dibiarkan terbuka secara tidak sengaja.ob_end_flush(); echo "Hello, world!";
This shouldn't even throw any error, since there isn't enough memory for that.
LOL'ed at that :)kode mesin x86 dalam mode real (=> hampir semua program DOS)
yaitu
Saya harap Anda tidak terlalu terikat dengan tabel interrupt Anda.
sumber
cli
, dan kemudian saya memperbaiki tabel interupsi, dan melanjutkan untuk menghitung beberapa bilangan prima, dll?cli
(daninp
danoutp
hanya untuk ukuran yang baik), tapi saya tidak tahu apakah itu akan diizinkan berdasarkan aturanclear(this);
, batas memori dalam PHP, rekursi batas dalam Python, lingkungan berpasir dalam Python dan banyak lainnya), saya tidak akan melihat ini sebagai masalah.Jawa
Sunting: Penanggulangan balasan membuat raksasa ini :(
Arahkan ulang stdin dan stdout ke null stream dan ganti args dengan array kosong. Juga menggunakan retasan refleksi dalam jumlah besar untuk memastikan IO standar benar-benar tersembunyi. Akhirnya, ini menetapkan manajer keamanan untuk memastikan standar IO tidak dapat diciptakan kembali dan yang memastikan program tidak dapat mengatur kode keluar.
sumber
Lua
Dalam Lua,
_ENV
adalah lingkungan di mana semua variabel global, fungsi, tabel, dll disimpan. Mendefinisikannya hanya sebagai string kosong berarti Anda tidak dapat menentukan apa pun yang baru, dan semua fungsi dan variabel dihapus. Ini berarti Anda tidak dapat menampilkan apa pun, menerima masukan, atau melakukan apa saja.sumber
_ENV=5
bekerja? Jika demikian, satu karakter lebih pendek.Bahasa Pemrograman Shakespeare
Dalam SPL, parser bawaan yang diunduh bersama program mengikuti aturan yang sangat spesifik tentang apa yang bisa terjadi dalam skrip. Salah satu aturan tersebut adalah bahwa hanya dua karakter yang dapat berada di panggung sekaligus. Juga, membuat karakter keluar dari panggung yang tidak pernah di atas panggung akan membingungkannya. Hal yang sama berlaku untuk menambahkan karakter ke panggung yang sudah ada di panggung. Ketika parser menerima kesalahan, ia akan menolak untuk melakukan hal lain; Anda benar-benar harus sepenuhnya mematikan program dan parser dan kemudian memulai semuanya lagi.
PS Jika Anda tidak tahu bagaimana bahasa ini bekerja, Google itu. Itu mengagumkan.
sumber
Smalltalk
Saya tidak yakin apakah ini memenuhi syarat:
Ini menghapus seluruh lingkungan run-time, menggantung mesin objek. Satu-satunya cara untuk memperbaikinya adalah dengan menghentikan proses secara paksa dan memulai kembali dari cadangan.
Bagi mereka yang tidak tahu, cara [Visual Bekerja] Smalltalk bekerja agak aneh. Ini seperti mini-OS. Ketika Anda memulai Smalltalk, Anda memuat "memori gambar" ke dalam RAM, dan itu melanjutkan mengeksekusi dari tempat itu tinggalkan. Seluruh Smalltalk IDE ditulis dalam Smalltalk dan dapat dimodifikasi secara dinamis.
Secara khusus,
Smalltalk
adalah kamus yang berisi semua variabel global. Terutama, setiap kali Anda mendeklarasikan kelas baru, variabel global dengan nama itu dibuat, menunjuk keClass
objek untuk kelas baru Anda. Jadi pengaturanSmalltalk
keNil
(pada dasarnya nol) menghapus semua kelas di seluruh sistem. Bahkan penangan acara GUI pun pudar.Saya tidak tahu mengapa variabel ini bahkan dapat ditulis. Mungkin karena itu adalah variabel global, dan karenanya ada sebagai entri di dalam dirinya sendiri. (Apakah kepala Anda belum terluka? Apakah saya menyebutkan bahwa setiap objek memiliki kelas, dan kelas adalah objek, sehingga setiap kelas memiliki kelas? Kelas kelas disebut metaclass, tetapi metaclass juga merupakan objek, yang karenanya memiliki kelas...)
Anda mungkin dapat mencapai efek serupa dengan membersihkan kamus daripada menggantinya dengan nol. Memang, ada sejumlah hal yang dapat Anda kode untuk menghapus semua kelas dalam sistem, membuat Anda tidak dapat melakukan apa pun. Tetapi karena kompiler Smalltalk yang sebenarnya juga merupakan kelas ... apa pun yang merusak bahasa juga agak merusak seluruh IDE, jadi ...
sumber
nil
daripadaNil
di Pharo.true become: false
, tapi saya pikir ini tidak berfungsi dalam versi bahasa yang lebih baru. Anda bisa membunuh SmallTalk / V 286 dengan cara ini.Haskell
Ada beberapa kemungkinan di sini.
Ide membosankan # 1: Tetapkan
main
untuk tidak melakukan apa-apa. Sekarang apa pun kode lain yang Anda tulis, itu tidak akan pernah bisa dijalankan. (Kecuali jika Anda menjalankannya secara manual dari REPL.)Ide membosankan # 2: Tentukan modul tanpa ekspor publik. Sekarang, apa pun kode yang Anda tulis, itu tidak akan pernah bisa dieksekusi.
Ide menarik: Nonaktifkan semua impor.
Sekarang Anda dapat menentukan fungsi yang sangat terlihat dan dapat dijalankan ... tetapi mereka tidak bisa berbuat apa-apa. Semua tipe dan fungsi Haskell standar sekarang disembunyikan. (Dengan pengecualian beberapa hal yang benar -benar terprogram ke dalam bahasa.)
Terutama, Anda tidak dapat melakukan I / O apa pun. Anda juga tidak dapat melakukan aritmatika presisi mesin. (Karena
Int
,,Double
dll sekarang tidak ditentukan.)Anda masih dapat menulis fungsi lambda-calculus yang melakukan beberapa perhitungan nyata. Anda tidak bisa mendapatkan data apa pun masuk atau keluar dari hal itu. Tetapi Anda tentu saja dapat menulis modul lain yang terpisah yang memanggil
Fubar
modul di atas dan melakukan I / O atas namanya (dengan demikian membuktikan bahwa kode tersebut mengeksekusi dan melakukan hal-hal).Beberapa seluk-beluk:
foo = foo
Deklarasi dummy diperlukan untuk mencegah orang menambahkan impor tambahan. (Impor tidak dapat muncul setelah deklarasi.)Ada berbagai ekstensi bahasa Haskell non-standar yang memungkinkan Anda keluar dari situasi ini. Tetapi ekstensi bahasa harus diaktifkan dengan pragma kompiler di bagian atas file. (Atau dengan saklar baris perintah ke kompiler. Saya tidak bisa mencegahnya!)
sumber
foobar
, ejaan yang Anda gunakan memiliki ... konotasi yang tidak diinginkan.Nota bene
Ya, PostScript adalah bahasa pemrograman. Selain itu, ini adalah bahasa pemrograman di mana semua konstruksi bahasa adalah fungsi yang ditentukan sistem, yang dapat didefinisikan ulang ...
Dalam Bahasa Inggris:
Magic
.systemdict
, tambahkan kunci yang sama keMagic
, dengan definisi kosong ("{}
").Magic
ke atas tumpukan kamus.Sejak saat ini, setiap perintah bahasa PostScript didefinisikan untuk tidak melakukan apa pun. AFAIK, tidak mungkin untuk melarikan diri dari kondisi ini.
(Secara teknis, Anda tidak "menghancurkan" definisi lama, Anda hanya membayangi definisi itu. Jika Anda masih bisa mengeksekusi
end
, itu akanMagic
mengeluarkan tumpukan kamus, membatalkan semua perintah dan mengembalikan hidup Anda. Tetapi karenaend
itu sendiri juga dibayangi ... itu tidak akan melakukan apa pun sekarang.)Perhatikan bahwa semua perintah masih akan menjalankan ... Hanya saja sekarang mereka didefinisikan untuk tidak melakukan apa pun. Anda tidak akan mendapatkan kesalahan apa pun, hanya saja tidak ada yang terjadi. (Yah, saya kira stack overflow akan terjadi pada akhirnya ...)
sumber
Semua program yang dijalankan di Linux / x86 (-64)
Program ini ditulis dalam C, tetapi dapat mengganggu pelaksanaan program yang berjalan di Linux / x86 (-32 atau -64). Anda menambahkannya ke pemanggilan baris perintah dari program yang ingin Anda ganggu.
Ini menggunakan API debugger untuk mencegah program target menghasilkan output apa pun. Secara khusus, semua panggilan sistem yang dapat mengkomunikasikan sesuatu kepada dunia di luar proses (yang paling jelas
write
, tentu saja, tetapi jugaopen
saat membuat file, sebagian besar API soket,kill
bila diterapkan ke proses lain, ...) akan gagal seolah-olah mereka tidak diimplementasikan._exit
diperbolehkan, tetapi kode keluar ditimpa dengan nol.Berbeda dengan edisi sebelumnya dari jawaban ini, banyak program dapat berjalan hampir selesai dalam kondisi ini; hanya saja semua pekerjaan mereka sia-sia. Sebagai contoh, jika Anda melakukannya
./no-syscalls /bin/ls
(dengan asumsi GNU coreutilsls
), ia membaca seluruh direktori dan memformatnya, dan kemudian semuawrite
panggilan untuk menghasilkan output gagal. (Apa pun yang perlu membuka saluran komunikasi dua arah, meskipun, seperti semua klien X11, akan gagal pada saat itu. Saya berpikir untuk mengizinkansocket
tetapi tidaksend
, tetapi sepertinya terlalu mungkin untuk membuka celah.)Ada beberapa opsi baris perintah untuk mengubah perilaku;
Program yang terhubung secara dinamis bahkan tidak akan keluar dari tautan dinamis dalam
-e
mode.-S
jelas membuka lubang besar dalam kebijakan, tetapi bisa menghibur untuk menonton program mengeluh tentang tidak ada yang bekerja, misalnyaAnda harus membaca keluaran log dengan
/usr/include/asm*/unistd.h
terbuka di jendela lain, karena ini sudah cukup lama.Sayangnya, antarmuka debugger yang digunakan ini hanya sedikit konsisten di seluruh implementasi Unix, dan secara intrinsik spesifik CPU. Akan relatif mudah untuk mem-port-nya ke arsitektur CPU lain (cukup tambahkan definisi yang sesuai
SYSCALL_*_REG
), dan mungkin memungkinkan untuk mem-port-kannya ke Unix apa pun yang adaptrace
, tetapi Anda mungkin perlu muck dengan daftar putih syscall secara ekstensif dan juga berurusan dengan divergensi diptrace
.sumber
-DNO_EXIT
mode adalah untuk orang-orang yang merasa seperti Anda. Tidak ada output yang berarti dalam mode itu.strace
?TeX
Saya tidak yakin ini benar-benar berfungsi, tetapi secara teori ini seharusnya pecah
\
sebagai karakter pelarian sehingga Anda tidak dapat memperbaikinya. Biasanya TeX dapat membaca dan menulis file, sekarang tidak dapat menulis apa pun yang tergantung pada logika. Dengan demikian bahasa sekarang rusak sebagaimana didefinisikan oleh OP.EDIT: Perintah kill lain yang diambil dari komentar (meskipun keduanya mungkin melanggar aturan kode-harus-dieksekusi):
\def\fi{}\iffalse
oleh smpl membuat cabang if-closable\catcode13=9%
oleh iwillnotexist idonotexist menciptakan komentar yang tidak pernah berakhirsumber
\def\fi{}\iffalse
. Saya tidak dapat memposting jawaban karena ini membutuhkan setidaknya 10 rep yang diperoleh dari situs ini, tetapi ini tidak akan memungkinkan output lagi juga.\fi
ke makna aslinya, bukan? Dengan demikian bahasa tidak rusak melampaui perbaikan apa pun.\fi
adalah primitif TeX. Dan tidak, Anda tidak dapat mendefinisikan kembali apa pun pada titik ini,\iffalse
telah dipanggil.\catcode13=9%
akan sepenuhnya melanggar bahasa (Semuanya setelah%
dikomentari dan baris baru (ASCII char 13) diabaikan, sehingga komentar meluas hingga tak terbatas) Saya ingin mempostingnya di sini. Tetapi Anda memiliki perintah yang sedikit lebih lama di sini.Menggaruk
Ini
when [timer v] > (0)
akan berjalan segera setelah kode diinisialisasi, yang jika Anda berada di editor bahkan sebelum Anda memulai kode. Iniwhen I receive (join[][])
akan menyebabkan kesalahan untuk dilemparkan setiap kali sesuatu disiarkan, menghentikan eksekusi kode jika Anda memiliki versi Flash pengembang. Thebreak
fungsi akan membuat klon, dan memicu kesalahan siaran. Setiap satu klon akan bertahan dua detik kemudian menghapus dirinya sendiri, menempatkan ketegangan pada tumpukan. Dan setiap klon akan meresponswhen [timer v] > (0)
, menjalankanbreak
subrutin dan mengatur ulang timer, yang menyebabkan kode timer dijalankan lagi. Selain itu, setiap klon akan merespons setiap kesalahan siaran juga, yang berarti jumlah kesalahan per evaluasibreak
adalah jumlah klon yang dikuadratkan. Apakah saya lupa menyebutkan bahwabreak
fungsi telahrun without screen refresh
dicentang, menyebabkan editor membeku, tersentak dan ketinggalan, serta mengambil dan mengalokasikan memori. Dan memaksimalkan CPU.Kode apa pun yang ditambahkan di mana saja dengan menjalankan ini akan mendapati dirinya tidak dapat membuat klon (melampaui batas 300 klon) serta memanaskan dan membuat crash komputer yang menjalankannya. Dan mengambil memori sampai tidak ada lagi yang bisa diambil, meninggalkan variabel yang tidak sesuai.
Dan, setelah ada terlalu banyak jeda untuk memicu
when [timer v] > (0)
blok, itu masih akan berjalanbreak
.Terima kasih kepada @towerofnix untuk mengingatkan saya tentang
when I receive
kesalahan yang saya temukan beberapa waktu lalu, dan memberi saya ide untuk iturun without screen refresh
. Jika Anda menyukai ini, inilah aslinya: https://codegolf.stackexchange.com/a/61357/43394sumber
stop this script
di dalamnya: Pwhen I receive
kerja "kesalahan" itu?when I receive
Hat block hanya dirancang untuk mengambil input dari daftar drop-down. Thejoin[][]
blok mengembalikan tipe data bahwawhen I recieve
blok tidak dirancang untuk menerima. Setiap kali sesuatu disiarkan, semua blok topi memeriksa, dan mengevaluasi nilai balik blok, melemparincorrect type
kesalahan.join
blok di sana.n
" dapat digunakan untuk mengatakan(n-1)
berfungsi untuk positifn
<3, tetapi karena ini berbasis algoritma, algoritma yang baik harus dapat membuatn
cukup besar untuk dapat mengabaikan argumen itu. Saya tidak yakin apakah mesin yang lebih cepat atau lebih lambat akan membuatnya lebih bermanfaat. Namun, saya setuju bahwa solusi ini dapat diselesaikan. Ini bukan polisi dan perampok , tapi tetap dilakukan dengan baik.Bahasa Mathematica / Wolfram
Mathematica adalah bahasa yang ditafsirkan di mana nama perintah adalah simbol yang dapat dimanipulasi oleh programmer. Anda tidak bisa menghapus operator bawaan, tetapi Anda bisa membebani mereka atau memodifikasi fungsinya. Berikut ini mengacak perintah "Dengan", yang diperlukan untuk penugasan ke variabel bahkan secara internal. Perubahan ini mencegah kernel dari menahan argumen tidak dievaluasi sampai tugas selesai, dan itu membunuh bahasa cukup mati.
Jika perintah ini dijalankan dalam sesi interaktif atau dalam blok kode, Mathematica bahkan tidak akan dapat menambahkan
1+1
(pesan kesalahan yang dihasilkan adalah sekitar satu halaman sehingga saya tidak akan memasukkannya di sini).sumber
PHP
Saya terkejut bahwa itu benar-benar berfungsi, tetapi menutup
STDOUT
danSTDERR
menekan semua output. Untuk memastikan bahwa mereka tidak akan dibuka lagi, kami membuka/dev/null
tiga kali untuk menetapkan kembali file deskriptor 0, 1 dan 2:Lebih lanjut tentang itu: https://stackoverflow.com/questions/937627/how-to-redirect-stdout-to-a-file-in-php
sumber
Batch DOS (sebelum Windows 95 saya percaya)
Dikeluarkan tanpa argumen, ini memutus baris perintah dari terminal. Upaya lebih lanjut untuk membaca input atau menghasilkan output tidak melakukan apa-apa.
Jika Anda ingin tahu cara menggunakan CTTY dengan benar:
File batch yang sedikit lebih kuat bahkan bisa menjawab modem dan menghubungkan apa pun yang dipanggil ke CTTY.
sumber
Gangguan umum
Saya harap Anda tidak membutuhkan kurung pembuka itu.
Ini adalah makro pembaca yang memberi tahu Lisp Reader untuk mengganti setiap instance
(
dengan panggilan(lambda (x y) ())
, fungsi yang mengambil dua argumen dan tidak mengembalikan apa pun. Jadi, misalnya, itu akan dibaca(foo)
sebagaifoo)
, ditafsirkanfoo
sebagai variabel dan kemudian melempar kesalahan kurung yang tak tertandingi0
.sumber
)
sebagai sesuatu yang gila! Dengan begitu, akan ada lebih sedikit kesalahan.Menggaruk
Berikut adalah contoh yang cukup sederhana yang akan membuat browser Anda macet (dan, secara teori, komputer Anda):
Saya membiarkan ini berjalan sekitar dua puluh detik, kemudian kehilangan 2,65 GB memori untuk Scratch. Hanya sesaat kemudian dan 5 GB hilang.
Saya sangat menyarankan Anda memiliki cara untuk memaksa berhenti Adobe Flash atau browser web Anda sebelum menjalankan ini!
Saya benar - benar ingin membuat jawaban yang keren seperti
clear(this)
JS tetapi sayangnya Scratch tidak punya cara untuk melakukan itu. Jangan ragu untuk memperbarui posting ini (atau buat posting Anda sendiri) jika Anda TIDAK menemukan cara lain untuk membuat Scratch tidak dapat digunakan lagi!sumber
Itu
Dengan baris baru di akhir
Bahasa thue bergantung pada mendefinisikan aturan dan a
::=
menunjukkan akhir aturan. Tidak mungkin untuk melakukan APA SAJA di dalam tanpa mendefinisikan aturan yang melakukannya, jadi terlepas dari apa yang Anda masukkan setelah itu::=
, tidak ada yang bisa terjadi.Jawaban alternatif
(dan seterusnya untuk setiap karakter di semua Unicode termasuk yang sebelum
A
karakter dan karakter yang tidak dapat dicetak). Ini membutuhkan opsi baris perintah-r
.sumber
MATLAB
Sepotong kode berikut membuat lingkungan benar-benar tidak dapat digunakan 1 :
Ini menimpa
builtin
fungsi danclear
fungsi dengan pegangan fungsi anonim baru yang hanya kembalifalse
setiap kali Anda mencoba dan memanggil fungsi-fungsi ini. Thebuiltin
fungsi memastikan bahwa jika ada fungsi kustom yang Anda tulis di MATLAB yang merupakan nama yang sama dengan mereka yang built-in untuk MATLAB (hal-hal sepertisum
,max
,min
, dll), Anda dapat menyebut tegas bukan fungsi kelebihan beban . Demikian pula,clear
memberi Anda kemampuan untuk menghapus semua variabel yang saat ini dideklarasikan sehingga Anda dapat memulai baru. Dengan menghapus kapabilitas ini, Anda tidak dapat menggunakan MATLAB kecuali Anda me-restart program.Di MATLAB R2015a, saya juga mendapatkan pesan berikut:
Workspace adalah variabel yang saat ini dideklarasikan di lingkungan sehingga Anda dapat menggunakannya untuk nanti. Ini secara permanen menonaktifkan Workspace, jadi variabel apa pun yang Anda coba dan buat tidak akan disimpan dan karenanya tidak ada kemajuan yang dapat dibuat ketika menjalankan baris kode di MATLAB.
1: Kredit diberikan kepada pengguna Dev-iL yang awalnya menemukan ide tersebut.
sumber
feval('clear')
untuk memperbaikinya. Atau:s=str2func('clear'); s()
.///
Satu-satunya operasi di /// adalah penggantian string berulang, seperti ini:
/pattern/replacement/
.Kode ini menghapus setiap
/
, dengan cara itu Anda tidak dapat menggunakan substitusi string berulang, jadi pada dasarnya semua yang Anda tulis setelah itu akan dicetak (kecuali untuk/
s).Anda masih dapat menggunakan
\
s, tetapi itu tidak banyak membantu Anda.sumber
Befunge-96
Kode pengguna dapat mengikuti di mana saja setelah urutan ini, selama ini adalah tiga karakter pertama dalam sumber.
The
'
perintah (modus tali satu-shot) mendorong nilai ASCII dari~
ke stack (yaitu 126), danh
perintah kemudian menetapkan apa yang dikenal sebagai Delta Holistik dengan nilai tersebut. Bagi mereka yang tidak terbiasa dengan Befunge-96, itu Delta Holistik adalah offset yang ditambahkan ke nilai setiap byte perintah yang ditemui juru bahasa.Setelah delta diatur ke 126, satu-satunya perintah yang valid yang dapat dihasilkan adalah
~
(input karakter), melalui byte nol di sumbernya. Apa pun selain byte nol akan menerjemahkan ke nilai yang lebih besar dari 126, dan tidak satu pun dari nilai-nilai itu akan menjadi perintah Befunge yang valid.Saya pikir aman untuk mengatakan bahwa ini akan membuatnya tidak memenuhi syarat untuk memenuhi syarat sebagai bahasa pemrograman.
sumber
Boo
Dan kemudian, di tempat lain dalam proyek ini,
Makro sederhana dengan nama yang terdengar tidak berbahaya, tetapi efek yang luar biasa membuat frustrasi. Kompiler Boo menggunakan pipa multi-langkah yang dimulai dengan parsing source ke AST dan diakhiri dengan pembuatan kode. (Umumnya. Dapat dikonfigurasi ulang untuk berbagai aplikasi.) Setiap langkah di antaranya melakukan berbagai operasi di AST.
Partway through adalah tahap ekspansi makro, di mana makro dieksekusi dalam konteks kompiler. Ingat sedikit pada paragraf terakhir, tentang pipa yang dapat dikonfigurasi ulang? Jika, selama ekspansi makro, Anda menjalankan makro yang membersihkan pipa, tidak ada kesalahan akan ditampilkan kepada pengguna, tetapi semua langkah setelah ekspansi makro (termasuk pembuatan kode) tidak lagi ada. Jadi Anda berakhir dengan sesuatu yang terlihat seperti kompilasi yang berhasil - tidak ada pesan kesalahan yang ditampilkan - tetapi untuk beberapa alasan tidak ada biner yang dihasilkan! Dijamin untuk mendorong bahkan pemecah masalah terbaik di dinding, jika Anda menyembunyikan makro dan doa dengan baik.
sumber
NGN / APL
NGN / APL memungkinkan mendefinisikan ulang primitif, jadi mendefinisikan ulang (
←
) semua fungsi primitif untuk⊢
("melewati": keduanya⊢3
dan2⊢3
memberi3
) membuat bahasa tersebut sama sekali tidak berguna:Coba di sini.
sumber
Ruby (29 karakter)
As 'send' digunakan secara internal setiap kali sebuah metode dipanggil dalam Ruby, dan karena semua objek mewarisi dari kelas Object. Ini harus menghentikan metode apa pun yang sedang dijalankan.
Fakta Menarik: Ini sangat sesuai dengan teori. Tapi tampaknya, untuk beberapa alasan, tidak pincang bahasa Ruby. Saya tidak tahu mengapa mungkin menjalankan kode ini dan kemudian masih menggunakan lingkungan Ruby terbuka.
sumber
Tcl
Ini menghapus semua kata kunci dari bahasa kecuali
if
danrename
.Kode di atas akan menyebabkan kesalahan kode baru. Jadi masih bisa diperdebatkan jika kode yang baru dimasukkan benar-benar "dieksekusi". Di bawah ini adalah versi yang mengeksekusi kode baru tetapi tidak melakukan apa-apa karena itu mengubah semua kata kunci (kecuali
if
danproc
) menjadi tidak ada operasi:Alih-alih menghapus kata kunci, kode ini menggantikannya dengan fungsi yang tidak menghasilkan apa-apa.
(Catatan: Saya menggunakan "kata kunci" dengan sangat longgar di sini karena Tcl tidak memiliki kata kunci, hanya fungsi)
sumber
if
danrename
setelah loop. Di versi kedua, Anda juga harus membuatproc
pengecualian.proc
muncul di daftar sebelumnyaputs
. Secara teknis kode juga harus berfungsi tanparename
tetapi perintah bawaan sepertinya dilindungi sebaliknya. Tidak yakin apa yang terjadi tetapi kode diuji dan berfungsi seperti yang diiklankan.rename
. Itu adalah bagian dari pemikiran saya - saya lupa untuk mengecualikanproc
.if
karena dapat melakukanif
sendiri itu tidak berguna jika Anda ingin menghasilkan output.Hoon
Hoon aneh. Sama sekali tidak seperti bahasa pemrograman lain, tidak hanya dalam sintaksis tetapi juga dalam semantik. Tidak seperti bahasa-bahasa seperti Hexagony, itu tidak sengaja dibuat menjadi esoteris.
Hoon mengkompilasi ke Nock , VM berbasis kombinator minimal. Nock itu bodoh: specnya bisa di-gzip hingga 340 byte. Satu-satunya operasi matematika adalah peningkatan. Semuanya adalah kata benda: atom (bignum) atau sel (sepasang kata benda), dengan seluruh model memori disusun dalam pohon biner asiklik yang tidak dapat diubah. Satu-satunya output adalah kata benda yang mengurangi ekspresi Anda.
Karena target kompilasi yang aneh, Hoon juga aneh: itu benar-benar murni. Hoon mengkompilasi ke ekspresi Nock yang dievaluasi pada "konteks". Seluruh kernel dan stdlib, bersama dengan semua variabel, diteruskan secara implisit ke program oleh konteksnya.
Untuk membuat Hoon tidak dapat digunakan, kami hanya menggunakan
=<
, yaitu "mengevaluasi a dalam konteks b". Kami selalu mengevaluasi~
, yaitu nol. Apa pun yangb
terjadi, itu tidak dapat mengubah nilai yang direduksinya, dan karena tidak dapat memiliki efek samping, ia tidak dapat melakukan input atau output.Catatan: Karena Anda tidak dapat benar-benar meminta input dari Hoon (murni!), Menurut aturan, itu sebenarnya bukan bahasa pemrograman. Input adalah melalui argumen fungsi, output melalui nilai balik (atau
~&
, yang lebih merupakan fitur debugging printf dan transparan untuk program).Agar suatu program mendapatkan input dalam Urbit, Anda sebenarnya menulis sebuah program yang mengembalikan fungsi yang menerima input, dan shell menanyakan atas nama Anda dan meneruskan ke callback.
sumber
Taksi, 2354 byte.
Program kecil ini hanya menjalankan taksi dalam sukacita besar melalui Townsburg, kehabisan bensin. Kode apa pun yang Anda jalankan setelah ini akan dengan cepat kesalahan
error: out of gas
. Dan bahkan jika Anda bisa mencapai pompa bensin, yang saya pikir tidak mungkin, Anda tidak bisa mendapatkan bensin, karena tidak ada uang yang dikumpulkan, karena tidak ada penumpang.sumber
JavaScript di browser
Yah, setidaknya di IE11.
Menonaktifkan penulisan ke dokumen, menulis ke variabel global dan kembali dari fungsi.
Komentari jika saya melewatkan metode keluaran!
sumber
window.addEventListener('error',function(){});
document
masih harus dapat diakses dari luar lingkup dalam kode yang dimasukkan, dan tidak boleh diganti sampai setelah kode yang dimasukkan selesai dieksekusi.Python 2, sangat besar
Jumlah besar kode ini adalah kebangkitan
rexec
modul kuno (ditinggalkan dengan python 2.3) dengan banyak modul baru ditambahkan ke daftar "ok" dan banyak kelemahan diperbaiki (termasukobject.__subclasses__()
metode yang telah membuat setidaknya dua python lain jawaban tidak valid).Cukup banyak kode ini (
__init__
metodeRExec
kelas dan seluruhModuleImporter
kelas) disalin dari pustaka standar python dengan modifikasi kecil.sumber
8064 bytes
omong-omong