MyBooks.club
Все категории

Даглас Хофштадтер - ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда

На сайте mybooks.club вы можете бесплатно читать книги онлайн без регистрации, включая Даглас Хофштадтер - ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда. Жанр: Математика издательство -,. Доступна полная версия книги с кратким содержанием для предварительного ознакомления, аннотацией (предисловием), рецензиями от других читателей и их экспертным мнением.
Кроме того, на сайте mybooks.club вы найдете множество новинок, которые стоит прочитать.

Название:
ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда
Издательство:
-
ISBN:
-
Год:
-
Дата добавления:
13 февраль 2019
Количество просмотров:
192
Читать онлайн
Даглас Хофштадтер - ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда

Даглас Хофштадтер - ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда краткое содержание

Даглас Хофштадтер - ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда - описание и краткое содержание, автор Даглас Хофштадтер, читайте бесплатно онлайн на сайте электронной библиотеки mybooks.club
Не часто приходится держать в руках книгу, которая открывает новые миры, в которой сочетаются глубина мысли и блестящая языковая игра; книгу, которой удалось совместить ничем на первый взгляд не связанные сложные области знания.Выдающийся американский ученый изобретает остроумные диалоги, обращается к знаменитым парадоксам пространства и времени, находит параллели между картинами Эшера, музыкой Баха и такими разными дисциплинами, как физика, математика, логика, биология, нейрофизиология, психология и дзен-буддизм.Автор размышляет над одной из величайших тайн современной науки: каким образом человеческое мышление пытается постичь самое себя. Хофштадтер приглашает в мир человеческого духа и «думающих» машин. Это путешествие тесно связано с классическими парадоксами, с революционными открытиями математика Курта Геделя, а также с возможностями языка, математических систем, компьютерных программ и предметного мира говорить о самих себе с помощью бесконечных отражений.Начав читать эту книгу,вы попадете в волшебные миры, отправитесь в путешествие, изобилующее увлекательными приключениями, путешествие, после которого вы по-иному взглянете на мир и на самого себя.Переведенная на 17 языков, книга потрясла мировое интеллектуальное сообщество и сразу стала бестселлером. Теперь и русский читатель получил доступ к одной из культовых книг XX века.

ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда читать онлайн бесплатно

ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда - читать книгу онлайн бесплатно, автор Даглас Хофштадтер

Оказывается, что кроме стандартных блоков (только что открытых компонентов, из которых могут быть построены все алгоритмы), почти все программы содержат еще большие блоки — так сказать, суперблоки. Эти суперблоки меняются от программы к программе, в зависимости от типа задания на высшем уровне, которое данная программа должна выполнить. Мы уже говорили о суперблоках в главе V, употребляя общепринятые названия, «подпрограммы» и «процедуры». Ясно, что если бы удалось определить новые единицы высшего уровня в терминах уже известных единиц и затем вызывать их по имени, это было бы важнейшим дополнением к любому языку программирования. Таким образом разделение на блоки оказалось бы включено в сам язык. Вместо определенного репертуара команд, из которых пришлось бы кропотливо собирать каждую программу, программист смог бы создавать свои собственные модули. Каждый из них имел бы собственное имя и мог бы использоваться в любом месте программы, как если бы он был неотъемлемой характеристикой языка. Разумеется, невозможно избежать того, что внизу, на уровне машинного языка, все будет состоять из прежних команд на этом языке; но они будут неявны и не будут видны программисту, работающему на высшем уровне. Новые языки, основанные на этих идеях, были названы языки-компиляторы. Один из самых первых и элегантных получил имя «АЛГОЛ» (от английского Algorithmic Language — алгоритмический язык). В отличие от языка ассемблера, здесь нет взаимно-однозначного соответствия между высказываниями на АЛГОЛе и командами на машинном языке. Однако некий тип соответствия между АЛГОЛом и машинным языком все же существует, хотя оно гораздо более запутано, чем соответствие между языком ассемблера и машинным языком. Грубо говоря, перевод программы на АЛГОЛе в ее машинный эквивалент сравним с переводом словесного выражения алгебраической проблемы на язык формул. (На самом деле, переход от словесного выражения задачи к её выражению в формулах гораздо более сложен, но он дает определенное представление о типе «распутывания», необходимом при переводе с языка высшего уровня на язык низшего уровня ) В середине 1950-х годов были созданы удачные программы под названием компиляторы, функцией которых был перевод с языка-компилятора на машинный язык.

Были изобретены также интерпретаторы. Подобно компиляторам, интерпретаторы переводят с языков высших уровней на машинный язык, но вместо того, чтобы сначала переводить все высказывания и затем выполнять машинный код, они считывают одну строчку и тут же ее выполняют. Преимущество здесь в том, что для использования интерпретатора не обязательно иметь полную программу. Программист может придумывать свою программу строчка за строчкой и проверять ее в процессе создания. Интерпретатор по сравнению с компилятором — то же, что устный переводчик по сравнению с переводчиком письменных текстов. Один из самых интересных и важных языков программирования — это ЛИСП (от английского List Processing — обработка списка), изобретенный Джоном Маккарти примерно тогда же когда был изобретен АЛГОЛ. Впоследствии ЛИСП приобрел большую популярность среди специалистов по искусственному интеллекту.

Между принципом работы интерпретаторов и компиляторов есть одно интересное различие. Компилятор берет входные данные (к примеру, законченную программу на Алголе) и производит некий результат (длинную последовательность команд на машинном языке). На этом его работа закончена и результат вводится в компьютер для обработки. Интерпретатор, напротив работает непрерывно, пока программист вводит одно за другим высказывания ЛИСПа, каждое из них немедленно выполняется. Однако это не означает что каждое высказывание сначала переводится и затем выполняется — тогда интерпретатор был бы всего лишь построчным компилятором. Вместо этого в интерпретаторе операции считки новой строчки, ее «понимания» и выполнения переплетены — они происходят одновременно.

Поясню эту идею немного подробнее. Как только новая строчка ЛИСПа вводится в интерпретатор, он пытается ее обработать. Это означает, что интерпретатор начинает действовать, и в нем выполняются некие машинные команды. Какие именно — это зависит, разумеется, от данного высказывания ЛИСПа. Внутри интерпретатора много команд типа ПЕРЕХОД, так что новая строчка ЛИСПа может заставить контроль двигаться довольно сложным путем вперед, назад, затем опять вперед и т. д. Таким образом, каждое высказывание ЛИСПа превращается в некий «маршрут» внутри интерпретатора, и следование по этому маршруту приносит нужный эффект.

Иногда бывает полезно интерпретировать высказывания ЛИСПа как некие блоки данных, которые постепенно вводятся в непрерывно действующую программу машинного языка (интерпретатор ЛИСПа). Думая об этом таким образом, вы по-иному видите отношения между программой, написанной на языке высшего уровня, и исполняющей эту программу машиной.

Самонастройка

Разумеется, компилятор, будучи программой, должен быть сам написан на каком-либо языке. Первые компиляторы были созданы на языке ассемблера вместо машинного языка; таким образом полностью использовались преимущества подъема на одну ступеньку над машинным языком. Краткое описание этих довольно сложных понятий представлено на рис. 58.


РИС. 58. Как ассемблеры, так и компиляторы — это переводчики на машинный язык. Это указано прямыми линиями. Более того, поскольку они сами являются программами, они первоначально также создаются на каком-либо языке программирования. Волнистые линии указы указывают на то, что компилятор может быть написан на языке ассемблера, а ассемблер — на машинном языке.

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

Уровни описания работающих программ

Языки компиляторов обычно не отражают структуры машин, на которых будут выполняться написанные на этих языках программы. Это одно из их основных преимуществ по сравнению с весьма специализированными языками ассемблера и машинным языком. Разумеется, когда программа на языке компилятора переводится на язык машины, получается программа, зависящая от машины. Таким образом, возможно описать программу, которая исполняется либо зависящим от машины путем, либо не зависящим, подобно тому, как мы можем описать абзац в книге по его содержанию (описание, не зависящее от издания) или по номеру страницы и его расположению на ней (описание, зависящее от издания).

Пока программа работает хорошо, то, как мы ее описываем и что мы о ней думаем, не столь важно. Но как только возникают неполадки, становится важным умение увидеть программу на разных уровнях. Если, например, компьютеру дана задача в какой-то момент разделить на нуль, он остановится и сообщит пользователю о возникшей проблеме, указав при этом, в каком месте программы произошло это неприятное событие. Однако эти детали часто сообщаются на более низком уровне, чем тот, на котором написана сама программа. Вот три параллельных описания забуксовавшей программы:

Уровень машинного языка:

«Выполнение программы прекратилось по адресу 1110010101110111»

Уровень языка ассемблера:

«Выполнение программы прекратилось, когда она дошла до команды РАЗДЕЛИТЬ».

Уровень языка компилятора:

«Выполнение программы прекратилось в момент оценки алгебраического выражения „(А + B)/Z“».

Одна из основных задач программистов (людей, которые создают компиляторы, интерпретаторы, ассемблеры и другие программы, которые затем используются многими людьми) — это создание находящих ошибки подпрограмм. Необходимо, чтобы информация, которую эти подпрограммы выдают пользователю, в чьей программе обнаружен дефект, представляла бы описание проблемы на высшем, а не на низшем, уровне. Интересно, что если сбой обнаруживается в генетической «программе» (например, мутация), то происходит обратное, ошибка бывает заметна только на высшем уровне, то есть на уровне фенотипа, а не генотипа. На самом деле, современная биология использует мутации, как одно из основных окон в мир генетических процессов, поскольку они могут быть прослежены на многих уровнях.


Даглас Хофштадтер читать все книги автора по порядку

Даглас Хофштадтер - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mybooks.club.


ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда отзывы

Отзывы читателей о книге ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда, автор: Даглас Хофштадтер. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.