Концепции, которые удивили вас, когда вы прочитали SICP?

StackOverflow https://stackoverflow.com/questions/355406

  •  21-08-2019
  •  | 
  •  

Вопрос

SICP – «Структура и интерпретация компьютерных программ».

Объяснение тому же было бы неплохо

Может кто-нибудь объяснить о Металингвистическая абстракция

Это было полезно?

Решение

SICP действительно доказал, что код и данные можно рассматривать как одно и то же.

Я понял это раньше, когда думал об универсальных машинах Тьюринга (входные данные в UTM — это просто представление программы) или архитектуре фон Неймана (где одна структура хранения содержит и код, и данные), но SICP сделал эту идею гораздо более понятной. .Здесь помог Scheme (Lisp), так как синтаксис программы точно такой же, как и синтаксис списков в целом, а именно S-выражений.

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

Кстати, мне бы хотелось, чтобы SICP упомянул больше:типы.Проверка типа на компиляция время – удивительная вещь.Реализация объектно-ориентированного программирования SICP не имела этого преимущества.

Другие советы

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

Ох, кажется, я солгал, меня больше всего поразило то, что + — это функция.

Я думаю, что самое удивительное в SICP — это то, как мало примитивов на самом деле требуется для создания полного по Тьюрингу языка — почти все можно построить практически из ничего.

Раз уж мы обсуждаем SICP, то вставлю свой стандартный плагин для видеолекций на http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/, которые являются лучшим введением в информатику, которое вы можете надеяться получить за 20 часов.

Тот, который мне показался действительно крутым, был ручьи с отсроченной оценкой.Мне показалось, что вопрос о генерации простых чисел был очень интересным.Как дозатор «PEZ», который волшебным образом выдает следующее простое число в последовательности.

Один из примеров того, что «данные и код — это одно и то же» от А.Ответ Рекса меня очень глубоко зацепил.

Когда меня учили Лиспу в России, наши учителя говорили нам, что этот язык посвящен спискам:машина, cdr, минусы.Что меня действительно поразило, так это то, что вам вообще не нужны эти функции — вы можете написать свои собственные, учитывая замыкания.Итак, в конце концов, Лисп — это не списки!Это было большим сюрпризом.

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

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

Когда я преподавал SICP, меня впечатляли разные аспекты.Во-первых, загадка: данные и код — это на самом деле одно и то же, потому что код — это исполняемые данные.Глава о металингвистических абстракциях ошеломляет многих и содержит множество полезных идей.Во-первых, все правила произвольны.Это беспокоит некоторых студентов, особенно тех, кто в душе физики.Я думаю, красота не в самих правилах, а в изучении последствий правил.Изменение кода на одну строку может означать разницу между лексической и динамической областью видимости.

Сегодня, хотя SICP по-прежнему интересен и интересен для многих, я понимаю, что он устарел.Во-первых, он не учит навыкам и инструментам отладки (я включаю туда системы типов), что важно для работы в современных гигантских системах.

Больше всего меня удивило, насколько легко реализовать языки.Это можно было бы написать на доске интерпретатор для Scheme.

Я почувствовал рекурсию в другом смысле после прочтения некоторых глав SICP.

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

Замыкания.

Исходя из преимущественно императивного опыта (Java, C# и т. д.-- Я впервые прочитал SICP примерно год назад и перечитываю его сейчас), мышление в функциональных терминах было для меня большим откровением;это полностью изменило то, как я думаю о своей сегодняшней работе.

Прочитал большую часть книги (без упражнений).Я научился тому, как абстрагировать реальный мир на определенном уровне и как реализовать язык.

В каждой главе есть идеи, которые меня удивляют:

Первые две главы показывают мне два способа абстрагирования реального мира:абстракция с процедурой и абстракция с данными.

Глава 3 знакомит со временем в реальном мире.В результате возникают состояния.Мы пробуем назначение, которое вызывает проблемы.Затем мы пробуем потоки.

Глава 4 посвящена металингвистической абстракции, другими словами, мы реализуем новый язык, создавая вычислитель, который определяет значение выражений.

Поскольку оценщик из главы 4 сам по себе является программой на Лиспе, он наследует структуру управления базовой системы Лиспа.Итак, в главе 5 мы шаг за шагом погружаемся в работу реального компьютера с помощью абстрактной модели — регистровой машины.

Спасибо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top