Кіріспе
Өзін-өзі көбейтуші бағдарлама
Квин – ешқандай кіріс қабылдамайтын және өзінің бастапқы кодының көшірмесін ғана шығаратын компьютерлік бағдарлама. Есептеу теориясы және компьютерлік ғылым әдебиетінде осы бағдарламалардың стандартты аталымдары – "өзін-өзі көбейтуші бағдарламалар", "өзін-өзі өндіруші бағдарламалар" және "өзін-өзі көшіруші бағдарламалар". Квин – орындалу ортасы бағдарламаларды олардың нәтижелеріне түрлендіретін функция ретінде қарастырылғандағы тұрақты нүкте. Квиндер кез келген Тьюринг толық бағдарламалау тілінде Клиннің рекурсия теоремасының тікелей салдары ретінде мүмкін. Бағдарламашылар көңіл көтеру үшін кейде нақты бағдарламалау тілінде ең қысқа квин жасауға тырысады.
Тарих
Өзін-өзі көбейтетін автоматтар идеясы есептеу техникасының туған кезінен, тіпті одан бұрыннан бастау алды. Джон фон Нейман олар туралы 1940 жылдары теориялық тұжырымдар жасады. Кейін 1972 жылы Пол Братли мен Жан Миллоның "Компьютерлік ойын-сауық: Өзін-өзі көбейту автоматтары" мақаласында олар талқыланды. Братли алғаш рет 1960 жылдары Эдинбург университетінің оқытушысы және зерттеушісі Хамиш Девардың Эдинбургте Atlas Autocode-та жазылған алғашқы белгілі бағдарламасын көргеннен кейін өзін-өзі қайта жаңғыртатын бағдарламаларға қызығушылық танытты. GNU Affero General Public License-нің "көзді көшіруді жүктеу" талабы квин идеясына негізделген.
Бос құйындар
Кейбір тілдерде, әсіресе скрипт тілдерінде, сондай-ақ C тілінде бос бастапқы файл тілдің тұрақты нүктесі болып саналады, яғни ешқандай нәтиже шығармайтын жарамды бағдарлама. Мұндай бос бағдарлама, "әлемдегі ең кішкентай өзін-өзі көбейтуге қабілетті бағдарлама" деп ұсынылып, бір кезде Халықаралық Obfuscated C Code Contest-те "ережелерді ең нашар пайдалану" сыйлығын жеңіп алды. Бағдарлама іс жүзінде компиляцияланбады, бірақ файлды екінші файлға көшіру үшін cp командасы қолданылды, осы арқылы ештеңе шығармайтын бағдарламаны іске қосуға болады.
Ороборос бағдарламалары
Квиндік тұжырымдама рекурсияның бірнеше деңгейіне дейін кеңейтілуі мүмкін, нәтижесінде "ouroboros бағдарламалары" немесе квиндік релелер пайда болады. Бұл мультикиндермен шатастырылмауы керек.
Көптілді
Көптілді бағдарламаға ұқсас, бірақ көптілді бағдарламадан өзгеше, полиглот – бірнеше бағдарламалау тілінің немесе файл форматтарының жарамды түрінде, олардың синтаксисін біріктіру арқылы жазылған компьютерлік бағдарлама немесе сценарий. Полиглот бағдарламаның өзін-өзі көбейту қабілеті болуы міндетті емес, алайда полиглот бағдарлама орындалудың бір немесе бірнеше тәсілі бойынша квин болып табылуы мүмкін. Квиндер мен мультикиндерден айырмашылығы, полиглот бағдарламалар тілдердің кез келген жиынтығы арасында Клиннің рекурсия теоремасымен қамтамасыз етілмейді, себебі олар синтаксистің өзара әрекеттесуіне негізделген, ал біреуін басқасына ендіруге болатын дәлелденген қасиет емес.
Автоматты генерациялау
Реляциялық бағдарламалау техникаларын қолдану арқылы, тілдің интерпретаторын (немесе, балама ретінде, компиляторы мен орындалу ортасын) реляциялық бағдарламаға түрлендіріп, содан кейін белгілі бір тұрақты нүктені табу арқылы квиндерді автоматты түрде жасау мүмкін.