Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по ЯП_Гайденрайх.doc
Скачиваний:
21
Добавлен:
16.03.2015
Размер:
533.5 Кб
Скачать

Самарский государственный аэрокосмический университет

Конспект за II семестр 1 курса по языкам программирования

Автор: Гайденрайх Эвальд, студент группы 6110с Преподаватель: Тюгашев А.А.

Самара, 2013

Оглавление

Оглавление 2

Эзотерические языки программирования. Занятие 1 3

Язык Ассемблер. Занятие 2. 6

Интеграция ассемблера в СИ. Занятие 3. 7

Занятие 4 15

Функциональное программирование 17

Язык программирования ЛИСП 18

Занятие 6. 20

Занятие 7. 22

Занятие 8. 24

Логическое программирование 26

Занятие 9. 26

Язык программирования ПРОЛОГ. Занятие 10. 27

Визуальные языки программирования. Занятие 10. 30

Эзотерические языки программирования. Занятие 1

Языки могут создаваться не только для решения утилитарных задач, но и для других целей.

Эзотерика – тайное знание, недоступное непосвящённым.

Потаённые языки испокон веков создавались для расширения границ возможного, удивления других, в виде шутки, а часть для для написания программ.

В мае 1972 г. Основоположники – Дон Вудс и Джеймс Хиок.

Ранним утром 26 мая был создан эзотерический язык программирования INTERCAL, который был описан в руководстве из 7 частей.

Базой этого языка были не Flgo, Fortran или Basicю. Основной идеей этого языка была непохожесть ни на что. Цель не была достигнута, т.к. одна из команд была похожа по смыслу на одну из программ для советского компьютера БЭСМ-6. К командам надо было добавлять PLEASE.

Примеры команд: PLEASE FORGET – прерывает безусловный переход; DO ABSTAIN FROM STASHING - отключает во всей программе команду STASH

Одним из самых известных эзотерических языков является язык BrainFuck, что можно литературно перевести как «Великая Загадка Для Ума, Об Кою Многие Из Мудрейших Сломают Копья».

NB!: Понятие Тьюринг-полноты языка программирования означает, что он по выразительной силе эквивалентен машине Тьюринга, являющейся математической абстракцией понятия вычислительного алгоритма, что, в свою очередь, согласно тезису Черча-Тьюринга, означает, что на данном языке можно запрограммировать решение любой задачи, имеющей алгоритмическое решение.

Пример программы «Hello, world!» на BF:

++++++++++[>+++++++>++++++++++>+++>+<

<<<-]>++.>+.+++++++..+++.>++.<<++++++

+++++++++.>.+++.------.--------.>+.>.

Из эзотерических языков программирования можно одновременно сделать и анекдот и объект поклонения, что собственно и произошло с BF.

BF открыл дорогу множеству других эзотерических языков, таких, как язык False – автор Урбан Мюллер, но и породил целое семейство языков:

Brainfork (многозадачный); F*ckF*ck (каждая инструкция – нецензурное слово со звездочкой); DoubleFuck, состоящий из одних пробелов, символов табуляции и перевода строки Whitespace; Spoon - «псевдомашинный» язык вида «единичка-нолик».

Программа «Hello, World» на Spoon:

1 1 1 1 1 1 1 1 1 1 00100 010 1 1 1 1 1 1 1 010 1 1 1 1 1 1 1 1 1 1 010 1 1 1 010 1 011 011 011 011 000 0011 010 1 1 001010 010 1 001010 1 1 1 1 1 1 1 001010 001010 1 1 1 001010 010 1 1 001010 011 011 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 001010 010 001010 1 1 1 001010 000 000 000 000 000 000 001010 000 000 000 000 000 000 000 000 001010 010 1 001010 010 001010

Крис Пресси – имя ученого, выведшего молодую отрасль на качественно новый уровень: созданный им язык Befunge был двухмерным. Программа на Befunge – аккуратненькая решетка 80х25 символов, по которой интерпретатор программы должен перемещаться, следуя символьным стрелочкам (v ^ < > – вверх-вниз-влево-вправо).

Впоследствии Крис признался, что главной его целью было – создать язык, максимально сложный для компиляции. Не удивительно, что после публикации языка компиляторы Befunge расплодились в большом количестве.

Первый Befunge-93 из-за ограниченности «игрового поля» размерами 80х25 (один экран стандартного терминала) не был Тьюринг-полным (позволял решить лишь ограниченный класс задач). В процессе развитя появился Funge-98, в котором это ограничение было снято и он был приспособлен для n-мерных языков. На данный момент существует три языка, полностью соответствующих этому стандарту: Unefunge, Befunge, Trefunge – соответственно одно-, двух- и трехмерный языки.

Для тех же, кому хотелось чего-нибудь поэкзотичнее, Клифф Биффл сотворил 4-мерный язык 4DL, «требующий некоторых усилий для визуализации».

Еще более удивительной идеей является использование для кодирования программы различных цветов – красного, черного, белого... Воплощением «языка-картинки» стал язык имени датского художника Piet Mondrian, картины которого – воплощение геометрической абстракции. Давид Морган-Мар, создатель языка, так же знаменит созданием объектно-ориентированной версии языка HQ9+, еще одного эзотерического языка программирования.

Дальнейшим развитием эзотерических языков стала «эстетика полного абсурда. На языках той поры писать было невозможно, т.к. они стали крайне недружелюбными к программисту. «Чтобы все вас уважали, надо заниматься тем, что никому не понятно». Язык Malebolge («Злые Щели» в переводе Державина) – восьмой круг Дантова ада. Его автор Бен Олмстед говорит: «хотелось сделать максимально адский язык из всех возможных». Потребовалось всего два года, чтобы создать первую работающую программу на Malbolge (более того, эта программа была не написана собственноручно программистом, а «найдена» специальной исследовательской программой на языке Лисп).

Пример программы на Mallbolge «Hello world»:

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**

hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Malbolge взял очень важную планку: эзотерические языки программирования стали объектом исследования. «Как написать работающую программу на Malbolge» – это была задачка, об которую очень и очень стоило поломать голову.

Золотыми буквами в историю языка вписаны имена: Энтони Йонаса, опубликовавшего несколько работающих программ, но не раскрывшего секрета их написания; Лу Шеллера, проведшего криптоанализ языка; Томаса Вергзановски, создавшего генератор несложных, но работающих программ.

Подобно Malbolge, «вещью в себе», то есть объектом, а не инструментом изучения, стали: язык Thue, основанный на исчислении Thue, созданном одноименным норвежским математиком; ALPACA – язык клеточных автоматов (пример клеточного автомата - игра «Жизнь»); линейка языков Smetana – SMITH – Muriel (за авторством уже известного нам Криса Пресси).

Идея самомодификации кода положена в основу любого действия: единственный способ управления выполнением это скопировать свой собственный код «вперед», чтобы он выполнился еще раз. Писать такие программы «мучительно неприятно».

Джон Зюссман, в 1982 году опубликовал пародийный список языков: SIMPLE - Одноцелевой язык для абсолютных идиотов (пародия на Basic); C - «язык настолько низкоуровневый, что для любой задачи требует больше инструкций, чем язык машинных кодов»); SARTRE - «инструкции здесь не имеют смысла, они просто существуют; Лишп – пародия на Lisp, без буквы ‘c’; Whenever - инструкции которого выполняются в случайном порядке, а не в том, в котором записаны; FiPL– язык программирования рыбки – вся работа происходит на изображении рыбки, разделенном на множество частей, случайным образом меняющих свой цвет; СВН - программирование снизу вверх наискосок, «Многие западные программисты утверждают, что прежде чем начинать писать программу, необходимо время на обдумывание алгоритма, а некоторые даже призывают вникнуть в суть задачи, которую предстоит решать. Категорически не следует интересоваться постановкой задачи до момента получения готовой программы».; GOTO++; Spaghetti; paranoid; Некторые конструкции языка Paranoid:

Chef, где каждая программа которого обязана выглядеть как рецепт. Имена переменных – овощи-фрукты, значения – количество ингредиентов (в граммах, литрах или щепотках). Shakespeare, где переменные-«актеры», а программа – «пьеса»; Haifu - программы-хокку; var'aq – язык на Клингонском языке из сериала Star Trek;

Ook! - «язык программирования для орангутангов»; COW –строится из команд Moo, MOO и moO; smilescript и emoticon - языки, состоящие из одних смайликов.