<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF90:Лингва эзотерика - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF90:%D0%9B%D0%B8%D0%BD%D0%B3%D0%B2%D0%B0_%D1%8D%D0%B7%D0%BE%D1%82%D0%B5%D1%80%D0%B8%D0%BA%D0%B0&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 23:06:19 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: викификация, оформление</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF90:%D0%9B%D0%B8%D0%BD%D0%B3%D0%B2%D0%B0_%D1%8D%D0%B7%D0%BE%D1%82%D0%B5%D1%80%D0%B8%D0%BA%D0%B0&amp;diff=5779&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: Нестандартное программирование&lt;br /&gt;
&lt;br /&gt;
=Лингва эзотерика=&lt;br /&gt;
&lt;br /&gt;
: По-вашему, ''C'' – это сложно? А у ''Perl'' нехороший синтаксис? Хватит ныть, вот сейчас '''Майк Сондерс''' покажет вам, что такое действительно трудный язык…&lt;br /&gt;
&lt;br /&gt;
Однажды Свами Прабхупада [Swami Prabhupada], основоположник движения Харе Кришна, прогуливаясь с послушниками около поля для гольфа, увидел игрока, замахнувшегося для очередного удара. «Поглядите на&lt;br /&gt;
этого человека, – сказал Прабхупада, – всю свою жизнь он трудился,&lt;br /&gt;
но это ничто по сравнению с усилиями, которые он прилагает сейчас,&lt;br /&gt;
чтобы забить шар в лунку».&lt;br /&gt;
&lt;br /&gt;
Такова уж людская природа: вечно нам подавай преодоление&lt;br /&gt;
каких-то препятствий, надо или не надо. Есть же превосходные языки высокого уровня – ''C#, Ruby'' и ''Python'', а разработчики все норовят исследовать что-то новое, и в результате появляются совсем уж причудливые (но любопытные!) создания.&lt;br /&gt;
&lt;br /&gt;
В предыдущих статьях рассказывалось о ''Tcl, Ruby'', хоть и не&lt;br /&gt;
слишком часто применяемых, но достойных изучения хотя бы ради&lt;br /&gt;
расширения профессионального кругозора. А сегодня мы займемся по-настоящему экзотическими языками, настолько забавными и нетривиальными, что вы увидите ремесло программирования в&lt;br /&gt;
совершенно новом свете. Необходимые программы находятся в разделе '''Magazine/Esoteric''' нашего DVD.&lt;br /&gt;
&lt;br /&gt;
Мы предполагаем, что вы владеете базовыми понятиями в этой&lt;br /&gt;
области; но даже те, кто сроду кода не писал, сочтут некоторые концепции неплохой гимнастикой для ума. Вы вряд ли выберете эти языки для создания крутого пакета офисных программ, зато, изучая их,&lt;br /&gt;
получаешь глубокое представление о строении языка программирования. Да и ''С'' после них кажется малиной…&lt;br /&gt;
&lt;br /&gt;
==Вьем петли из Spaghetti==&lt;br /&gt;
&lt;br /&gt;
Начнем с несложного языка со вкусным именем '''Spaghetti'''. В нем&lt;br /&gt;
каждая строка кода заканчивается оператором перехода '''GOTO''', причем переход на следующую строку запрещен. Иными словами, две соседние строки кода никогда не выполняются последовательно.&lt;br /&gt;
Рациональный код и дурак напишет, а мы попрыгаем!&lt;br /&gt;
&lt;br /&gt;
Почти все книги по программированию твердят, что оператор&lt;br /&gt;
'''GOTO''' лучше не использовать, обходясь циклами и вызовами функций. Код '''Spaghetti''', наоборот, петляет как заяц, на радость тем, кому циклы, функции и оператор '''return''' кажутся простецкими. '''Spaghetti''' –&lt;br /&gt;
интерпретируемый язык. После запуска первые 256 байт выделенной программе оперативной памяти содержат числа от 1 до 255; есть еще&lt;br /&gt;
26 переменных от '''a''' до '''z''', которые находятся в ячейках с 256 по 281.&lt;br /&gt;
Двойное слово в паре регистров '''a''' и '''b''' может использоваться как указатель на некоторую ячейку памяти. Например, установив содержимое обоих регистров равным 255 (FF в шестнадцатеричном виде), мы&lt;br /&gt;
укажем на ячейку памяти 65535. Сокращенно этот составной адрес&lt;br /&gt;
ячейки памяти обозначается '''*'''.&lt;br /&gt;
&lt;br /&gt;
Займемся командами. Команда '''a?''' вводит символ и записывает&lt;br /&gt;
его в переменную '''a''', а '''?a''' выводит на экран значение переменной '''a'''.&lt;br /&gt;
Вместо '''a''', естественно, можно использовать любую переменную из&lt;br /&gt;
диапазона '''a–z'''. Каждая строка кода начинается с ее номера, а заканчивается номером строки, куда нужно перейти (ни в коем случае не к следующей!). Выполнение программы начинается с первой строки и&lt;br /&gt;
заканчивается при переходе на нулевую строку.&lt;br /&gt;
&lt;br /&gt;
Оператор условия выглядит следующим образом: '''a~b:5'''. Если '''a'''&lt;br /&gt;
равно '''b''', переходим на пятую строку программы, в противном случае – на строку, номер которой указан в конце данной строки. Номера строк отделяются от собственно операторов квадратными скобками.&lt;br /&gt;
Так, '''1[a~b:3]4''' означает «если '''a''' равно '''b''', перейти к строке 3, а если&lt;br /&gt;
нет, то к строке 4».&lt;br /&gt;
&lt;br /&gt;
Пример простенькой программы:&lt;br /&gt;
&lt;br /&gt;
 2[x~13:0]3&lt;br /&gt;
 1[x?]2&lt;br /&gt;
 3[?x]1&lt;br /&gt;
&lt;br /&gt;
Кристально неясно, да? Повесим на уши '''Spaghetti''': программа&lt;br /&gt;
просто выводит на экран символы, вводимые пользователем, и&lt;br /&gt;
завершается при нажатии '''Enter'''.&lt;br /&gt;
Выполнение начинается со строки 1, где с клавиатуры вводится символ, который сохраняется&lt;br /&gt;
в переменной '''x'''. Затем велено&lt;br /&gt;
перейти к строке 2 (ну нельзя же&lt;br /&gt;
написать ее следом – она находится над строкой 1).&lt;br /&gt;
&lt;br /&gt;
Тут переменная '''x''', содержащая введенный символ, сравнивается с кодом клавиши '''Enter''' ('''13''').&lt;br /&gt;
Если '''x''' равно 13, переходим к нулевой строке – это, как вы помните,&lt;br /&gt;
означает выход из программы. Если нет, переходим к строке 3 и выводим символ на экран. После этого снова возвращаемся к строке 1.&lt;br /&gt;
&lt;br /&gt;
Посмотрите на текст программы еще раз, и вы получите мало с&lt;br /&gt;
чем сравнимое удовольствие своих серых клеточек. Парочка программ на языке '''Spaghetti''', и вы с легкостью читаете программы на '''Basic''', которые прежде напоминали средневековые манускрипты. Ну,&lt;br /&gt;
это… если предварительно не рехнетесь.&lt;br /&gt;
&lt;br /&gt;
==«Ты туда не ходи, ты сюда ходи»==&lt;br /&gt;
&lt;br /&gt;
'''Spaghetti''' требовал использования оператора '''GOTO''', а '''Come Here''',&lt;br /&gt;
наш следующий язык программирования, применяет оператор '''COME FROM'''. Пусть в программе встретилось '''COME FROM 30'''; тогда интерпретатор после строки 30 выполнит код, следующий за '''COME FROM'''.&lt;br /&gt;
Это означает, что вам нипочем не понять логику программы, пока вы&lt;br /&gt;
не дочитаете ее до самого конца.&lt;br /&gt;
&lt;br /&gt;
Вот программа, которая в бесконечном цикле выводит на экран&lt;br /&gt;
слово ‘'''Developers'''’ – прямо виртуальный Стив Балмер (кстати, язык&lt;br /&gt;
'''Come Here''' чувствителен к регистру символов):&lt;br /&gt;
&lt;br /&gt;
 COME FROM 10&lt;br /&gt;
 10 TELL “ Разработчики” NEXT&lt;br /&gt;
&lt;br /&gt;
Сначала выполняется строка 10, где командой '''TELL''' на экран выводится ‘'''Разработчики'''’. '''NEXT''' отмечает конец команды. Затем происходит прыжок к оператору '''COME FROM 10''' (раз только что была выполнена строка с номером 10), после которого выполняется опять строка&lt;br /&gt;
10, и так далее. Номер строки не обязателен: он играет роль метки.&lt;br /&gt;
&lt;br /&gt;
Следующая программа десять раз подряд выводит на экран строку ‘'''Wowzers'''’.&lt;br /&gt;
&lt;br /&gt;
 10 CALL 10 counter&lt;br /&gt;
 COME FROM 10 + SGN counter&lt;br /&gt;
 TELL “Wowzers” NEXT&lt;br /&gt;
 11 CALL counter - 1 counter&lt;br /&gt;
&lt;br /&gt;
В строке 10 оператором '''CALL''' переменной counter присваивается значение 10. Оператор '''COME FROM''' в следующей строке получает управление из строки с&lt;br /&gt;
номером '''10 + SGN counter''',&lt;br /&gt;
где ‘'''SGN counter'''’ – это знак&lt;br /&gt;
переменной '''counter''' (счетчик),&lt;br /&gt;
равный единице, если переменная положительна. То есть&lt;br /&gt;
пока счетчик больше нуля, из&lt;br /&gt;
строки 11 будет делаться переход к оператору '''COME FROM'''. В&lt;br /&gt;
этой строке значение счетчика&lt;br /&gt;
уменьшается на единицу; когда&lt;br /&gt;
оно станет равным нулю, переходов к оператору '''COME FROM''' больше&lt;br /&gt;
не будет. Итого: в строке 10 устанавливается значение счетчика, затем&lt;br /&gt;
выводится на экран строка ‘'''Wowzers'''’, в строке 11 значение счетчика&lt;br /&gt;
уменьшается на единицу, после чего переходим к оператору '''COME FROM''', строка вновь выводится на экран и т.д., до тех пор, пока значение переменной '''counter''' больше нуля. Просто, не правда ли?&lt;br /&gt;
&lt;br /&gt;
==Неформальный Befunge==&lt;br /&gt;
&lt;br /&gt;
При всей своей странности, '''Come Here''' все-таки придерживается привычного размещения операторов по отдельным строкам. Но взгляните на исходный код любой программы – короткие и пустые строки и&lt;br /&gt;
пробелы оставляют очень много места. А ведь размер текстового терминала 80x25 символов, почему бы не повысить его КПД?&lt;br /&gt;
&lt;br /&gt;
Пытаясь создать язык, сложный для компилирования, Крис Пресси [Chris Pressey] в 1993 г. придумал '''Befunge'''. Вместо построчного кода, программа работает с двумерной сеткой и может переходить в любом из четырех направлений. Язык основан на концепции стека.&lt;br /&gt;
&lt;br /&gt;
Напомним: стек – это блок памяти произвольного размера, учитывающий порядок записи в него. Как тубус&lt;br /&gt;
для теннисных мячей: доступен только верхний мячик,&lt;br /&gt;
и вложить мячи можно тоже только сверху. Например,&lt;br /&gt;
если поместить в стек числа 3, 7 и 15, прочитаем их мы&lt;br /&gt;
в обратном порядке: 15, 7 и 3 (последним вошел, первым&lt;br /&gt;
вышел – по-английски сокращенно LIFO). Стек – удобное средство временного хранения данных, тем более в '''Befunge''': переменных в этом языке нет.&lt;br /&gt;
&lt;br /&gt;
Управление выполнением программы осуществляется с помощью операторов '''^''' (вверх), '''v''' (вниз), '''&amp;lt;''' (налево) и '''&amp;gt;''' (направо). Если в строке кода встречается число или символ, они помещаются в стек.&lt;br /&gt;
Команда «запятая» (''',''') производит чтение из стека. Доступны арифметические операции '''+, -, /''' и '''*''' (сложение, вычитание, деление и умножение). Вот как выглядит программа '''Hello World''' на '''Befunge''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;                                    v&lt;br /&gt;
 v      , , , , , “ H e l l o “ &amp;lt;&lt;br /&gt;
 &amp;gt;4 8 * ,                             v&lt;br /&gt;
 v , , , , , , “ Wo r l d ! “ &amp;lt;&lt;br /&gt;
 &amp;gt;2 5 * , @&lt;br /&gt;
&lt;br /&gt;
Попробуем разобраться. Выполнение программы всегда начинается с левого верхнео угла, там командой '''&amp;gt;'' задан&lt;br /&gt;
переход вправо. Интерпретатор перемещается до появления следующей команды '''v''' и начинает&lt;br /&gt;
движение вниз. Следующий оператор '''&amp;lt;''' вызывает движение влево, и&lt;br /&gt;
начинается работа.&lt;br /&gt;
&lt;br /&gt;
Мы натыкаемся на строку '''Hello''', и ее символы помещаются в стек&lt;br /&gt;
в обратном порядке ('''olleH'''). Серия команд “''','''” по очереди считает их&lt;br /&gt;
из стека и выведет на экран.&lt;br /&gt;
&lt;br /&gt;
Затем мы движемся вниз ('''v''') и направо ('''&amp;gt;'''), где помещаем в стек&lt;br /&gt;
числа 4 и 8, вычисляем их произведение с помощью оператора '''*''' и&lt;br /&gt;
выводим результат на экран. Результат, 32, это код символа пробела,&lt;br /&gt;
он-то и выведется. Затем мы движемся вниз и налево. На экран выводится вторая строка '''World!'''.&lt;br /&gt;
&lt;br /&gt;
Наконец, мы заносим в стек 2 и 5, вычисляем их произведение – 10 и выводим на экран символ с кодом 10 (переход на новую строку). Тут интерпретатор натыкается на команду завершения работы – '''@'''.&lt;br /&gt;
&lt;br /&gt;
В '''Befunge''' еще много интересного. Ввод значений с клавиатуры и&lt;br /&gt;
запись их в стек осуществляется с помощью операторов '''&amp;amp;''' и '''~''' соответственно для числовых и символьных величин. Можно поменять местами два элемента на вершине стека оператором '''\''' или пропустить&lt;br /&gt;
очередную команду оператором '''#'''. А самый захватывающий оператор – '''?''', он осуществляет случайный выбор направления перехода (на все четыре стороны), в котором продолжится выполнение программы. Это может пригодиться для рандомизации программы, зато уж понять ее будет практически невозможно.&lt;br /&gt;
&lt;br /&gt;
==Malbolge: PHP от дьявола?==&lt;br /&gt;
&lt;br /&gt;
Дальше – больше. Язык '''Malbolge''', получивший свое название от восьмого круга ада ['''Malebolge'''] из «Божественной комедии» Данте, считается самым сложным языком программирования за всю историю. Уж&lt;br /&gt;
если вы его освоите, значит, вам по силам левитировать на три фута&lt;br /&gt;
над землей или манием руки вызывать грозу. Кстати, автор выдаст&lt;br /&gt;
100 фунтов тому, кто напишет на '''Malbolge''' клона доктора Элизы [''Eliza''] из ''Emacs'' ('''m-x-doctor''').&lt;br /&gt;
&lt;br /&gt;
С чего это мы расщедрились? Судите сами. Первая программа на языке '''Malbolge''' появилась только через два года&lt;br /&gt;
после его создания – да и написал-то ее не человек, а компьютер. '''Malbolge''' настолько сложен,&lt;br /&gt;
что простые смертные справляются в лучшем случае с выводом строки текста. Даже программы, созданных компьютером, на большее особо не замахиваются. И это плохо, скверно, не здорово.&lt;br /&gt;
&lt;br /&gt;
Интерпретатор языка '''Malbolge''' представляет собой тернарный&lt;br /&gt;
процессор. Если вы программировали на языке '''Assembler''', то знакомы с двоичной (основание 2) и шестнадцатеричной (основание 16) системами счисления. Троичная система счисления исключительно&lt;br /&gt;
неуклюжа, а '''Malbolge''' того и надо. Посчитайте: 0, 1, 2, 10, 11, 12, 20,&lt;br /&gt;
21, 22, 100… Ужас.&lt;br /&gt;
&lt;br /&gt;
Но это еще цветочки. Пользователю доступны три регистра (аналог переменных) '''A, C''' и '''D'''. Регистр '''A''' – аккумулятор, он хранит результаты выполнения операций; регистры '''C''' и '''D''' содержат адреса ячеек памяти для кода и данных соответственно, причем после выполнения очередной команды их содержимое увеличивается на единицу.&lt;br /&gt;
&lt;br /&gt;
Доступны 59049 ячеек памяти, каждая из которых может содержать&lt;br /&gt;
десятиразрядное троичное число.&lt;br /&gt;
&lt;br /&gt;
Восемь основных команд языка включают команды перехода,&lt;br /&gt;
троичного сдвига, ввода/вывода и завершения программы. Есть еще&lt;br /&gt;
«шальная» команда, по двум операндам выбирающая значение из&lt;br /&gt;
таблицы – так '''Malbolge''' заполняет неиспользованную память по данным использованной.&lt;br /&gt;
&lt;br /&gt;
Когда интерпретатор начинает выполнение очередной команды,&lt;br /&gt;
к содержимому регистра '''C''' (скажем, 4) прибавляется смещение этой&lt;br /&gt;
команды в коде программы (например, 390). Затем из полученного&lt;br /&gt;
числа вычитается 94 до тех пор, пока результат больше 94. Результат&lt;br /&gt;
этой операции определяет код выполняемой команды. После выполнения команды содержимое соответствующей ячейки памяти шифруется при помощи таблицы подстановки, и переход на эту ячейку&lt;br /&gt;
станет невозможен.&lt;br /&gt;
&lt;br /&gt;
Вот и все, что мы можем открыть, а не то журнал вспыхнет у вас в&lt;br /&gt;
руках – о прочей черной магии узнаете через ссылки в нашей врезке&lt;br /&gt;
Ресурсы, ниже на этой странице. В заключение – программа, выводящая на экран строку “Hello, world” на языке '''Malbolge''':&lt;br /&gt;
&lt;br /&gt;
 (=&amp;lt;`:9876Z4321UT.-Q+*)M’&amp;amp;%$H”!~}|Bzy?=|{z]KwZY44Eq0/{mlk**&lt;br /&gt;
 hKs_dG5[m_BA{?-Y;;Vb’rR5431M}/.zHGwEDCBA@98\6543W10/.&lt;br /&gt;
 R,+O&amp;lt;&lt;br /&gt;
&lt;br /&gt;
==Нигилизмы==&lt;br /&gt;
&lt;br /&gt;
Радуйтесь: даже в мире экзотических языков программирования&lt;br /&gt;
бывают передышки на что-то менее безумное. Разработчики '''Nil''' применили свежий подход к программированию, поставив дизайн впереди программных ухищрений. Много говорено, что языки высокого&lt;br /&gt;
уровня типа ''C#'' избавляют от рутинных операций, позволяя сосредоточиться на алгоритме, а '''Nil''' превращает этот процесс в настоящее искусство.&lt;br /&gt;
&lt;br /&gt;
'''Nil''' дает существенное уменьшение размера получаемого объектного кода, упрощение отладки программы и полную межплатформную переносимость. Это один из немногих языков, которые, пообещав эти преимущества, в самом деле обеспечивают и их, и многое другое!&lt;br /&gt;
&lt;br /&gt;
Формат исходного кода языка может варьироваться. Рассмотрим&lt;br /&gt;
фрагмент кода:&lt;br /&gt;
&lt;br /&gt;
  for(b = 1; bytes &amp;lt; c_byte; b++) {&lt;br /&gt;
     if(!(bh[b] = sb_getblk(s, ++cur_index)))&lt;br /&gt;
         GOTO block_release;&lt;br /&gt;
     bytes += msBlk-&amp;gt;devblksize;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Здесь содержатся операторы цикла и сравнения. Как этот код&lt;br /&gt;
оптимизировать? Компилятор языка '''Nil''' расщепляет программу на&lt;br /&gt;
«атомы», удобные для синтаксического анализа. Каждый «атом»&lt;br /&gt;
транслируется отдельно; '''Nil''' практикует нигилистический подход,&lt;br /&gt;
согласно которому «атомарная» операция есть ни что иное как ничто,&lt;br /&gt;
т.е. '''nop''', и выполняет соответствующие подстановки.&lt;br /&gt;
&lt;br /&gt;
С позиций данной оптимизации, '''Nil''' сворачивает последовательность команд '''nop''' в единственную команду '''nop''', существенно уменьшая время выполнения программы и размер используемой памяти.&lt;br /&gt;
Команда '''nop''' поддерживается подавляющим большинством процессоров, поскольку рекомендует им не делать ничего. Итак, код приведенного фрагмента кода на языке '''Nil''' будет выглядеть следующим&lt;br /&gt;
образом:&lt;br /&gt;
&lt;br /&gt;
  nop&lt;br /&gt;
&lt;br /&gt;
нигилисты ведь утверждают, что все на свете бессмыссленно! Зачем&lt;br /&gt;
процессору париться с каким-нибудь преобразованием Фурье? Пусть&lt;br /&gt;
постынет, пока вы пьете чаек!&lt;br /&gt;
&lt;br /&gt;
==Здесь смотреть нечего==&lt;br /&gt;
&lt;br /&gt;
В статье про экзотические языки нельзя не&lt;br /&gt;
упомянуть о '''Whitespace'''. Этот язык программирования, команды которого состоят из пробелов, символов табуляции и перевода строки,&lt;br /&gt;
не видимых на экране, по праву можно считать&lt;br /&gt;
самым чудаковатым. Открыв его программу в&lt;br /&gt;
текстовом редакторе с подсветкой синтаксиса,&lt;br /&gt;
вы увидите одни разноцветные пятна.&lt;br /&gt;
&lt;br /&gt;
Тем не менее это полноценный язык.&lt;br /&gt;
Например, команде вычитания соответствует&lt;br /&gt;
последовательность из символа табуляции,&lt;br /&gt;
двух пробелов и еще одного символа табуляции. Как и в языке '''Befunge''', широко используется стек. Вы можете создавать процедуры и пользоваться метками. Учтена даже модульность, столь важная для крупных проектов!&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример программы:&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
Здесь мы складываем два числа и записываем результат в память. Разработчики уверяют, что язык очень популярен для приложений с высокой защищенностью: даже распечатав&lt;br /&gt;
текст программы, злоумышленник не увидит в&lt;br /&gt;
ней уязвимостей. Кстати, распечатка сберегает&lt;br /&gt;
окружающую среду, экономя на чернилах. Чем&lt;br /&gt;
не язык для пост-структуралистов?&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90_LINGVA1.png|Программа]]&lt;br /&gt;
&lt;br /&gt;
'''Программы на ''Whitespace'' видимы только в редакторах с подсветкой синтаксиса.'''&lt;br /&gt;
&lt;br /&gt;
==C: чего только не придумают==&lt;br /&gt;
&lt;br /&gt;
Одна из бед языка ''C'' заключается в том, что&lt;br /&gt;
здесь не выработан стандартный стиль программирования (в отличие, например, от&lt;br /&gt;
''Python''). На этом языке вполне можно писать&lt;br /&gt;
читаемые программы, но уж слишком легко&lt;br /&gt;
все запутать отступами, пробелами, именами&lt;br /&gt;
переменных, макросами и прочим. Если вам&lt;br /&gt;
приходилось разбираться в чужом коде, вы&lt;br /&gt;
наверняка не раз проклинали все на свете,&lt;br /&gt;
недоумевая: «Ну что он хотел этим сказать?».&lt;br /&gt;
&lt;br /&gt;
К счастью, теперь вам есть куда послать&lt;br /&gt;
нечитаемый код. Каждый год участники конкурса International Obfuscated C Code Contest&lt;br /&gt;
('''IOCCC''', Международный конкурс на самый&lt;br /&gt;
запутанный код) выбирают лучшие образцы&lt;br /&gt;
кода из тех, которые работают совсем не так,&lt;br /&gt;
как должны на первый взгляд. Некоторые&lt;br /&gt;
программисты создают настоящие произведения ASCII-искусства – даже в голову не придет,&lt;br /&gt;
что это программа, которая корректно компилируется.&lt;br /&gt;
&lt;br /&gt;
Взгляните на рисунок. На вид это просто&lt;br /&gt;
портрет, а на самом деле – исходный код;&lt;br /&gt;
запустите его, и он выведет на экран другую&lt;br /&gt;
картинку. На сайте конкурса http://www.ioccc.org&lt;br /&gt;
таких программ много. Мы уверены, что даже&lt;br /&gt;
настоящие гуру языка ''C'' не с ходу в них разберутся. Зато как весело скомпилировать такой&lt;br /&gt;
пример и посмотреть, что будет...&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90_LINGVA2.png|И это тоже программа]]&lt;br /&gt;
&lt;br /&gt;
'''Запустите эту программу – получится… другая картинка.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==В заключение==&lt;br /&gt;
&lt;br /&gt;
Таковы подлинно экзотические языки программирования. Может,&lt;br /&gt;
они и не созданы для величия, но все равно волнуют умы. Забавно&lt;br /&gt;
попробовать '''Spaghetti''', хотя бы для того, чтобы взять да и усложнить&lt;br /&gt;
простые вещи – это тренирует мозги; а после головоломного '''Malbolge'''&lt;br /&gt;
вы вернетесь к программированию на добром старом ''C'' с новым энтузиазмом, как скороход, сбросивший с ноги гирю.&lt;br /&gt;
&lt;br /&gt;
Во врезке '''Ресурсы''' вы найдете ссылки на сайты с дополнительной&lt;br /&gt;
информацией. Испробуйте эти языки сами и обязательно расскажите&lt;br /&gt;
нам об этом! '''LXF'''&lt;br /&gt;
&lt;br /&gt;
==Ресурсы==&lt;br /&gt;
&lt;br /&gt;
* http://kidsquid.com/files/spaghetti/spaghett.txt&lt;br /&gt;
&lt;br /&gt;
Информация по '''Spaghetti'''.&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Befunge &lt;br /&gt;
&lt;br /&gt;
Домашняя страница '''Befunge'''.&lt;br /&gt;
&lt;br /&gt;
* http://tinyurl.com/y8ta2z &lt;br /&gt;
&lt;br /&gt;
'''Come Here'''.&lt;br /&gt;
&lt;br /&gt;
* http://www.antwon.com/other/malbolge/malbolge.txt&lt;br /&gt;
&lt;br /&gt;
Углубляемся в '''Malbolge'''…&lt;br /&gt;
&lt;br /&gt;
* http://compsoc.dur.ac.uk/whitespace&lt;br /&gt;
&lt;br /&gt;
… и '''Whitespace'''.&lt;br /&gt;
&lt;br /&gt;
* www.ioccc.org &lt;br /&gt;
&lt;br /&gt;
Конкурс '''IOCCC'''.&lt;br /&gt;
&lt;br /&gt;
* http://esolangs.org/wiki/Main_Page &lt;br /&gt;
&lt;br /&gt;
Разыщите еще что-нибудь сами.&lt;/div&gt;</description>
			<pubDate>Fri, 05 Dec 2008 06:24:30 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF90:%D0%9B%D0%B8%D0%BD%D0%B3%D0%B2%D0%B0_%D1%8D%D0%B7%D0%BE%D1%82%D0%B5%D1%80%D0%B8%D0%BA%D0%B0</comments>		</item>
	</channel>
</rss>