Brainfuck dasturlash tili

Brainfuck — 1993-yilda Urban Muller tomonidan yaratilgan ezoterik dasturlash tili.

Oʻzining ekstremal minimalizmi bilan ajralib turadigan til faqat sakkizta oddiy buyruqdan, maʼlumotlar koʻrsatgichidan va koʻrsatma koʻrsatgichidan iborat. U toʻliq Turing bilan yakunlangan boʻlsa-da, u amaliy foydalanish uchun emas, balki u faqat dasturchilarni zavqlantirish uchun moʻljallangan. Brainfuck buyruqlarni mikroskopik bosqichlarga ajratishni talab qiladi.

Tilning nomi „brainfuck“ jargon atamasiga ishora boʻlib, u shunchalik murakkab yoki gʻayrioddiy narsalarga ishora qiladiki, ular inson tushunish chegarasidan oshib ketadi, chunki u haqiqiy dasturiy taʼminotni loyihalash uchun emas, balki kompyuter dasturlash chegaralariga qarshi chiqish uchun yaratilgan.

 Tarixi 
1992-yilda shvetsariyalik fizika talabasi Urban Muller Amiga dasturiy taʼminoti uchun kichik onlayn arxivni oʻz ichiga olgan dasturlash tili yaratdi. Arxiv tobora ommalashib bordi va tez orada butun dunyoda aks ettirildi. Bugungi kunda bu dunyodagi eng katta Amiga arxivi boʻlib, Aminet nomi bilan tanilgan.

Muller Brainfuck dasturini FALSE dasturlash tili uchun 1024 baytlik kompilyatordan ilhomlanib mumkin boʻlgan eng kichik kompilyatorni amalga oshirish maqsadida ishlab chiqdi. Mullerning asl kompilyatori mashina tilida amalga oshirilgan va 296 bayt oʻlchamli ikkilik tizimga kompilyatsiya qilingan. U birinchi Brainfuck kompilyatorini 1993-yilda Aminetga yuklagan. Dastur tilni qisqacha tavsiflovchi „Readme“ fayli bilan birga keldi va oʻquvchini „Kim u bilan foydali narsalarni dasturlashi mumkin?“ :) ". Myuller, shuningdek, tarjimon va bir nechta batafsil misollarni oʻz ichiga olgan. Kompilyatorning ikkinchi versiyasi faqat 240 baytdan foydalangan. Hozirda internetda aql bovar qilmaydigan kompilyatorlar koʻp.

Aminet oʻsishi bilan kompilyator Amiga jamoasi orasida mashhur boʻldi va vaqt oʻtishi bilan u boshqa platformalar uchun ham joriy etildi.

 P': Brainfuckning rasmiy „ota tili“ 
Ikki kiritish-chiqarish buyrugʻidan tashqari Brainfuck tili 1964-yilda Korrado Böhm tomonidan yaratilgan rasmiy dasturlash tili P’ning kichik oʻzgarishi boʻlib, u oʻz navbatida Turing mashinasiga asoslangan edi. Darhaqiqat, tegishli Brainfuck buyruqlariga ekvivalent oltita belgidan foydalangan holda +, -, , , Böhm har qanday hisoblash funksiyasini hisoblash uchun xizmat qiluvchi asosiy funksiyalarning har biri uchun aniq dasturni taqdim etdi. Shunday qilib, birinchi „Brainfuck“ das Böhmning 1964-yilgi maqolasida paydo boʻldi va ular Tyuringning toʻliqligini isbotlash uchun yetarli edi.

 Infinite Abacus: Brainfuckning „bobo tili“ 
Yoaxim Lambek tomonidan 1961-yilda cheksiz sonli kataklardan iborat cheksiz abakus nomi ostida stekdagi nisbiy harakatlardan koʻra aniq xotira manziliga ega versiya ishlab chiqildi:

 X+ (X katakchasini oshirish)
 X- else jump T (musbat boʻlsa, Xni kamaytiring, aks holda T ga oʻting)

U Infinite Abacus asosiy m-rekursiv funksiyaning Kleene toʻplamini dasturlash orqali har qanday hisoblanuvchi rekursiv funksiyani hisoblashi mumkinligini isbotlaydi.

Uning mashinasi Melzakning mashinasi tomonidan arifmetik orqali modellashtirish hisob-kitobi bilan simulyatsiya qilingan, bu abakda toshlarni harakatlantirayotgan inson operatoriga taqlid qilgan, shuning uchun barcha raqamlar ijobiy boʻlishi kerak edi. Bir buyruqli kompyuteri Infinite Abacusga ekvivalent boʻlgan Melzak koʻpaytirish (gcd, n-tub son) b bazasida tasvirlash, kattalik boʻyicha tartiblash dasni beradi va ixtiyoriy Tyuring mashinasini simulyatsiya qilishni koʻrsatadi.

 Til dizayni 
Til sakkizta buyruqdan iborat. Brainfuck dasturi bu buyruqlar ketma-ketligi boʻlib, ehtimol boshqa belgilar bilan kesishadi (ular eʼtiborga olinmaydi). Buyruqlar ketma-ket bajariladi, baʼzi istisnolardan tashqari: koʻrsatma koʻrsatkichi birinchi buyruqdan boshlanadi va u koʻrsatgan har bir buyruq bajariladi, shundan soʻng u odatda keyingi buyruqqa oʻtadi. Yoʻriqnoma koʻrsatkichi oxirgi buyruqdan oʻtganda dastur tugaydi.

Brainfuck tili dastur va koʻrsatma koʻrsatgichidan tashkil topgan oddiy mashina modelidan, shuningdek, nol yordamida ishga tushirilgan kamida 30 000 bayt hujayradan iborat bir oʻlchovli massivdan foydalanadi. Harakatlanuvchi maʼlumotlar koʻrsatkichi (massivning eng chap baytiga ishora qilish uchun foydalaniladi), kirish va chiqish uchun ikkita bayt oqimi (koʻpincha klaviatura va monitorga ulanadi va ASCII belgilar kodlashidan foydalanadi) mavjud.

 Buyruqlar 
Sakkizta til buyruqlarining har biri bitta belgidan iborat:
Xarakter Maʼnosi > Maʼlumotlar koʻrsatkichini oshiring (oʻngdagi keyingi katakka ishora qilish uchun). ++ ptr; + +++++ Cell c1 = 5

 Start your loops with your cell pointer on the loop counter (c1 in our case)
 - Subtract 1 from c1
 End your loops with the cell pointer on the loop counter

At this point our program has added 5 to 2 leaving 7 in c0 and 0 in c1
but we cannot output this value to the terminal since it is not ASCII encoded.

To display the ASCII character „7“ we must add 48 to the value 7.
We use a loop to compute 48 = 6 * 8.

++++ ++++ c1 = 8 and this will be our loop counter again

 - Subtract 1 from c1

" characters are simply
 ignored, the "" and "" characters just have to be balanced. This
 loop and the commands it contains are ignored because the current cell
 defaults to a value of 0; the 0 value causes this loop to be skipped.

++++++++ Set Cell #0 to 8

 >++++ Add 4 to Cell #1; this will always set Cell #1 to 4
 as the cell will be cleared by the loop
 >++ Add 2 to Cell #2
 >+++ Add 3 to Cell #3
 >+++ Add 3 to Cell #4
 >+ Add 1 to Cell #5
 + Add 1 to Cell #2
 >+ Add 1 to Cell #3
 >- Subtract 1 from Cell #4
 >>+ Add 1 to Cell #6
 >. Cell #2 has value 72 which is 'H'
>---. Subtract 3 from Cell #3 to get 101 which is 'eʼ
+++++++..+++. Likewise for 'lloʻ from Cell #3
>>. Cell #5 is 32 for the space
>+. Add 1 to Cell #5 gives us an exclamation point
>++. And finally a newline from Cell #6

Oʻqilishi" uchun ushbu kod koʻplab satrlar boʻylab tarqaldi va boʻsh joylar va sharhlar qoʻshildi. Brainfuck ±<>,., sakkizta buyruqdan tashqari barcha belgilarga eʼtibor bermaydi. shuning uchun izohlar uchun maxsus sintaksis kerak emas (agar izohlarda buyruq belgilari boʻlmasa). Kod xuddi shunday yozilishi mumkin edi:
++++++++ > ++++ > ++ > +++ > +++ > + + > + > - >> + > . > --- . +++++++ .. +++ . >> . > + . > ++ .++++++++>++++>++>+++>+++>++>+>->>+>.>---.+++++++..+++.>>.>+.>++.salom dunyo kodining batafsil tavsifini bu yerda topishingiz mumkin.

 

Turkum:Dasturlash
Turkum:Dasturlash tillari