Возможно, мое ограниченное понимание предмета неверно, но это то, что я понимаю до сих пор:
Функциональное программирование основано на лямбда-исчислении, сформулированном Алонзо Черчем.
Императивное программирование основано на модели машины Тьюринга, созданной Аланом Тьюрингом, учеником Черча.
Лямбда-исчисление является таким же мощным и способным, как и машина Тьюринга, что
означает , что они эквивалентны по вычислительной мощности.
Если функциональное программирование основано на Lambda Calculus, а не на машине Тьюринга, то почему некоторые (или все) из них описаны как полные по Тьюрингу, а не как Lambda или что-то в этом роде? Является ли термин «полнота Тьюринга» каким-либо образом особенным для машин Тьюринга или это просто слово?
Наконец, если императивные языки основаны на машине Тьюринга, а компьютеры - это машины Тьюринга без бесконечной памяти, означает ли это, что они работают лучше, чем функциональные языки программирования на наших современных ПК?
Если это так, то что было бы эквивалентно машине лямбда-исчисления?
Я знаю, что это, кажется, 3 отдельных вопроса, но все они тесно связаны, и каждый из них зависит от того, является ли предыдущий вопрос правильным с самого начала.
(a -> a) -> a
.Ответы:
В двух словах :
Что характеризует императивные языки программирования как близкие к машинам Тьюринга и обычным компьютерам, таким как ПК (сами по себе ближе к машинам с произвольным доступом (ОЗУ), а не к машине Тьюринга), так это концепция явной памяти, которую можно модифицировать для хранения (промежуточные результаты ). Это автоматическое представление вычислений с концепцией состояния (включающего в себя как управление конечным состоянием, так и содержимое памяти), которое может меняться по мере выполнения вычислений.
Большинство других моделей более абстрактны. Хотя они могут выражать вычисления как последовательность шагов преобразования исходной структуры, эти преобразования применяются в некой межпространственной вселенной математических значений. Это может сохранить свойства, такие как ссылочная прозрачность, которые могут упростить математический анализ. Но он более далек от естественных физических моделей, которые полагаются на особенности памяти.
Таким образом, не существует естественных функциональных машин, кроме как в более широком смысле, как объяснено ниже, поскольку программное обеспечение на самом деле не отделимо от аппаратного обеспечения.
Ссылка на Тьюринга как критерий вычислимости происходит, вероятно, из-за того, что его модель, машина Тьюринга, была ближе всего к этому ограничению физической реализуемости, что делало ее более интуитивной моделью вычислений.
Дополнительные соображения :
Существует много моделей вычислений, которые были разработаны, чтобы охватить наиболее общий способ вычисления. Они включают машины Тьюринга, на самом деле во многих различных вариантах, лямбда-исчисление (в том числе и варианты), системы переписывания полу-тью, частично рекурсивные функции, комбинаторную логику
Все они отражают некоторые аспекты различных методов, используемых математиками для выражения или проведения вычислений. Большинство из них до некоторой степени использовались в качестве основы для разработки некоторых языков программирования (например, Snobol для систем переписывания, APL для комбинаторов, Lisp / Scheme для лямбда-исчисления) и часто могут комбинироваться различными способами в современных языках программирования.
Одним из основных результатов является то, что все эти вычислительные модели оказались эквивалентными, что приводит к тезису Черча-Тьюринга о том, что никакие физически реализуемые модели вычислений не могут сделать больше, чем любая из этих моделей. Модель вычислений называется полной по Тьюрингу, если она может быть доказана эквивалентной одной из этих моделей и, следовательно, эквивалентной всем им.
Название могло бы быть другим. Выбор машины Тьюринга (ТМ) в качестве эталона, вероятно, связан с тем, что она, вероятно, является самой простой из этих моделей, имитирующей близко (хотя и упрощенно) способ, которым вычисляет человек, и довольно легко реализуемым (в ограниченной конечной форме). в качестве физического устройства, до такой степени, что машины Тьюринга были построены с наборами Lego . Основная идея не требует математической сложности. Это, вероятно, простота и реализуемость модели, которая дала ей эту ссылочную позицию.
В то время, когда Алан Тьюринг создал свое вычислительное устройство, на столе находились другие предложения, которые могли бы служить формальным определением вычислимости, критической проблемой для основ математики (см. Entscheidungsproblem ). Эксперты того времени рассматривали предложение Тьюринга как наиболее убедительно охватывающее известную работу о том, какой должна быть вычислимость (см. Вычислимость и рекурсия , Р. И. Соаре, 1996, см. Раздел 3.2). Различные предложения оказались эквивалентными, но предложение Тьюринга было более убедительным. [из комментариев Ювала Фильмуса]
Следует отметить, что с аппаратной точки зрения наши компьютеры - это не машины Тьюринга, а то, что называется машинами произвольного доступа (ОЗУ) , которые также являются полными по Тьюрингу.
Чисто императивный язык (что бы это ни значило) - это, вероятно, формализмы, используемые для самых основных моделей, таких как машины Тьюринга, или язык ассемблера (пропуская его двоичное кодирование) компьютеров. Обе они общеизвестно нечитаемы, и им очень сложно писать важные программы. На самом деле, даже язык ассемблера имеет некоторые функции более высокого уровня, чтобы немного упростить программирование по сравнению с прямым использованием машинных инструкций. Основные императивные модели закрыты для физических миров, но не очень удобны.
Это быстро привело к разработке моделей вычислений более высокого уровня, которые начали смешивать с ним различные вычислительные методы, такие как вызовы подпрограмм и функций, наименование места в памяти, определение области имен, количественное определение и фиктивные переменные, уже используемые в некоторой форме. в математике и логике и даже в очень абстрактных понятиях, таких как рефлексия ( Lisp 1958).
Классификация языков программирования по парадигме программирования, такой как императивная, функциональная, логическая, объектно-ориентированная, основана на превосходстве некоторых из этих методов при проектировании языка, а также на наличии или отсутствии некоторых вычислительных функций, которые обеспечивают некоторые свойства программ или фрагменты программы, написанные на языке.
Некоторые модели удобны для физических машин. Некоторые другие более удобны для высокоуровневого описания алгоритмов, это может зависеть от типа алгоритма, который должен быть описан. Некоторые теоретики даже используют недетерминированную спецификацию алгоритмов, и даже они могут быть переведены в более традиционные термины программирования. Но здесь нет проблемы несоответствия, потому что мы разработали сложную технологию компилятора / интерпретатора, которая может переводить каждую модель по мере необходимости (что также является основой тезиса Черча-Тьюринга).
Теперь вы никогда не должны смотреть на свой компьютер как на сырое оборудование. Он содержит логическую схему, которая выполняет очень элементарную обработку. Но во многом это связано с микропрограммами внутри компьютера, о которых вы никогда не узнаете. Тогда у вас есть операционная система, которая делает вашу машину даже отличной от того, что делает аппаратное обеспечение. Кроме того, у вас может быть виртуальная машина, которая выполняет байт-код, а затем язык высокого уровня, такой как Pyva и Jathon или Haskell. или OCaml, который может быть скомпилирован в байт-код.
На каждом уровне вы видите разные модели вычислений. Очень сложно отделить аппаратный уровень от уровня программного обеспечения, таким образом, назначив конкретную вычислительную модель машине. И поскольку все они являются взаимно переводимыми, идея конечной модели аппаратных вычислений в значительной степени является иллюзией.
Машина лямбда-исчисления существует: это компьютер, который может уменьшить выражения лямбда-исчисления. Объявление, которое легко сделать.
О специализированных машинных архитектурах
Фактически, дополняя ответ Питера Тейлора и развивая аппаратное и программное обеспечение, были созданы специализированные машины, которые лучше адаптированы к конкретной парадигме, и их базовое программное обеспечение было написано на языке программирования, основанном на этой парадигме.
Они включают
Burroughs B5000 и его преемники (1960 - е), которые были адаптированы для эффективной реализации рекурсии, представленной в свое время на языке Алгол 60 .
Western Digital WD / 9000 Pascal микродвигатель , а машина , основанная на микропрограммный байткод specialied для Паскаля языка программирования, в начале 1980 - х лет.
Несколько брендов Lisp Machines в 1980-х.
По сути, это также обязательные аппаратные структуры, но они смягчены специальными аппаратными функциями или микропрограммированными интерпретаторами для лучшей адаптации к намеченной парадигме.
На самом деле, аппаратное обеспечение, специализирующееся на конкретных парадигмах, похоже, никогда не было успешным в долгосрочной перспективе. Причина в том, что технология компиляции для реализации любой парадигмы на ванильном оборудовании становилась все более и более эффективной, так что специализированное оборудование было не так уж и нужно. Кроме того, производительность аппаратного обеспечения быстро улучшалась, но стоимость улучшения (включая развитие базового программного обеспечения) легче амортизировалась на аппаратном обеспечении vanilla, чем на специализированном оборудовании. Специализированное оборудование не может конкурировать в долгосрочной перспективе.
Тем не менее, и хотя у меня нет точных данных об этом, я подозреваю, что эти предприятия оставили некоторые идеи, которые действительно повлияли на эволюцию машин, памяти и архитектуры наборов команд.
источник
Тьюринг-полный это просто имя. Вы можете назвать это Абдул-полным, если хотите. Имена определяются исторически и часто называются в честь «неправильных» людей. Это социологический процесс, который не имеет четких критериев. Имя не имеет значения, кроме официальной семантики.
Императивные языки не основаны на машинах Тьюринга. Они основаны на ОЗУ машин. Ваш компьютер является машиной ОЗУ. Машины Тьюринга - хорошая теоретическая модель, но они не очень хорошая модель реальных компьютеров.
Языки программирования, основанные на других парадигмах, могут быть очень успешными, даже если базовый процессор не поддерживает их изначально; Например, принтеры используют язык стека. В программировании есть нечто большее, чем машинный код.
источник
A[x]
. Машины Тьюринга не могут делать это в постоянное время. Вот почему даже в теоретической информатике время выполнения алгоритмов анализируется на модели машины ОЗУ, а не на модели машины Тьюринга.Потому что «полный по Тьюрингу» означает «он может вычислить все, что может вычислить машина Тьюринга».
источник
На один из ваших вопросов, похоже, еще не ответили:
Lisp машина . Аппаратное обеспечение, разработанное специально для модели вычислений LISP. В статье в Википедии рассказывается о коммерческих продуктах, но у моего директора по учебе в университете была рука, созданная в его офисе.
источник
Изобретенные Церковью функциональные языки в форме лямбда-исчисления были доказаны Тьюрингом завершенными. Это фактическое математическое доказательство, которое можно найти в опубликованных научных работах, «сводя» лямбда-исчисление к операциям / вычислениям на машинах Тьюринга. во времена газеты Турингса 1936 года и позже были предложены / распространены различные «комплексные» модели вычислений. это не было сразу понято, что все были эквивалентны. доказательство (я), что они были эквивалентны, были опубликованы примерно в конце 1930-х и 1940-х годов после газеты Турингс.
машина Тьюринга концептуально (но не функционально) проще, чем другие модели, и это, вероятно, значительная часть причины, по которой в его честь названа полнота Тьюринга. другие идеи, такие как лямбда-исчисление, являются более абстрактными и возникли / возникли главным образом в теории математики / логики. Тьюринг предложил теоретическую машину . «машина» буквально «физическое устройство», это замечательный концептуальный объект / конструкция, которая связывает / объединяет два разных мира: прикладной и теоретический. это дает новый абстрактный смысл физическим объектам, например, «время и пространство». это не просто совпадение, что математики иногда ссылаются на «технологии», «механизмы» или «устройства» доказательств. Тьюрингу удалось гениально соединить все это в своем концептуальном изобретении. его определение довольно простое, но его анализ показывает некоторые из самых необычных проявлений, когда-либо возникающих в истории научной / математической мысли. Тьюринг был первым ученым / математиком, который понял большую часть этого значения / силы / потенциала.
источник