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“ dasturlari 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:
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 dasturlarini 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:
(Shu bilan bir qatorda, ] buyrugʻi tegishli [ buyrugʻiga soʻzsiz oʻtish
sifatida tarjima qilinishi mumkin yoki aksincha; dasturlar bir xil ishlaydi, lekin keraksiz ikki marta qidirish tufayli sekinroq ishlashi mumkin.)
[ va ] odatda qavslarga mos keladi: har biri [ aniq bitta ] ga mos keladi va aksincha, [ birinchi boʻlib keladi va ikkalasi oʻrtasida tengsiz [ yoki ] boʻlishi mumkin emas.
Brainfuck dasturlari quyidagi almashtirishlar yordamida C tiliga tarjima qilinishi mumkin, agar ptr char* tipida boʻlsa va nolga teng baytlar qatoriga ishora qilish uchun ishga tushirilgan boʻlsa:
Nomidan koʻrinib turibdiki, Brainfuck dasturlarini tushunish qiyin. Buning sababi qisman har qanday yengildan murakkabgacha boʻlgan vazifa uzoq buyruqlar ketma-ketligini talab qiladi. Bular, shuningdek, Brainfuckning samarasizligi va uning kirish/chiqarish imkoniyatlarining cheklanganligi uning jiddiy dasturlash uchun ishlatilmasligining sabablaridan biridir. Shunga qaramay, har qanday Turing toʻliq tillari singari, Brainfuck ham nazariy jihatdan har qanday hisoblash funksiyasini hisoblash yoki boshqa har qanday hisoblash modelini simulyatsiya qilish qobiliyatiga ega, agar cheksiz hajmdagi xotiraga ruxsat berilsa. Turli xil Brainfuck dasturlari yozilgan. Brainfuck dasturlarini, ayniqsa murakkab dasturlarni yozish qiyin boʻlsa-da, soddaligi tufayli Brainfuck uchun odatiyroq tilda, masalan, C tilida tarjimon yaratish juda oson hisoblanadi. Hatto Brainfuck tilida yozilgan Brainfuck tarjimonlari ham mavjud.
Brainfuck Turing tarpit deb ataladigan misoldir: U har qanday dasturni yozish uchun ishlatilishi mumkin, ammo buni amalga oshirish uchun yetarli darajada amaliy emas.
Misollar
Ikki qiymat qoʻshish
Birinchi oddiy misol sifatida quyidagi kod parchasi joriy katakning qiymatini keyingi katakchaga qoʻshadi: Har safar sikl bajarilganda joriy katak kamayadi, maʼlumotlar koʻrsatkichi oʻngga siljiydi, keyingi katak oʻsadi va maʼlumotlar koʻrsatkichi yana chapga siljiydi. Ushbu ketma-ketlik boshlangʻich katak 0 boʻlguncha takrorlanadi.
Bu oddiy qoʻshimcha dasturga quyidagi tarzda kiritilishi mumkin:
++ Cell c0 = 2
Salom Dunyo!
Quyidagi dastur "Salom dunyo!" va ekranga yangi qatorini yaratish:
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.
Manbalar
uz.wikipedia.org