September 21st, 2021

moose, transparent

квайны

Кстати, каждому программисту, который этого еще не сделал в своей жизни, стоит написать квайн. Квайн (quine) - это программа, которая не получает никаких входных данных, и печатает свой собственный исходный текст. У него такое смешное название в честь философа по фамилии Quine.

На любом современном языке программирования можно написать квайн, причем "честный". Под честным я имею в виду, что программа не пытается найти свой собственный исходный текст на диске и прочитать из файла, или скажем пользуется тем, что "система" дает ей доступ к исходному тексту. Например, в языке Basic можно написать программу "10 LIST" и это будет квайн, потому что LIST дает команду напечатать исходный код - но это "нечестно". Квайн на джаваскрипте в одной из предыдущих записей тоже был "нечестным", но очень уж элегантным. Честный квайн вообще ниоткуда не берет свой исходный код, кроме строк, которые написаны в самом тексте программы.

Когда пытаешься написать квайн, вначале это кажется невозможным, как вытащить себя за волосы из болота. Но потом пробуешь так-сяк, то-это, и обычно в конце концов получается. Иногда под конец уже почти все совпадает, но какие-то кавычки пропущены или еще какая мелочь, и с этим возишься, но все проблемы можно преодолеть. Когда получается, это очень крутое ощущение, как мини-озарение такое. Мне кажется, что в конечном итоге это не супер глубокая вещь с идейной точки зрения, скорее такой забавный трюк. Но очень приятно, когда смог. Мне кажется, что каждому программисту стоит постараться пройти этот мини-квест. А если никак, ну никак не получится, не расстраиваться, найти онлайн и почитать, как это сделать. Только все-таки постарайтесь как следует сами раньше, это стоит того.

Я вспомнил про квайны недавно в связи с математической логикой, там есть похожие вещи. И решил написать квайн на питоне, чтобы вспомнить, как это. Не сразу получилось, но все-таки написал, и когда проверил, что выдает ровно свой исходник, с точностью до символа, как-то даже обрадовался и настроение повысилось, ходил потом с улыбкой. Хоть и помнил в принципе, как к этому подойти, а все равно. Мелочь, а приятно.