Я давно интересовался различными темами, такими как комбинаторная логика, лямбда-исчисление, функциональное программирование, и изучал их. Однако, в отличие от «Теории вычислений», которая стремится ответить на вопрос «вычислимости», то есть вещей, которые могут / не могут быть вычислены с различными ограничениями, я изо всех сил пытаюсь найти аналог для «Теории программирования»
Википедия описывает это как:
Теория языка программирования (PLT) - это раздел компьютерных наук, который занимается проектированием, реализацией, анализом, характеристикой и классификацией языков программирования и их индивидуальных особенностей.
Это все равно, что сказать «все», что на самом деле не является конкретным.
Общая последовательность тем обычно такова:
Комбинаторная логика> Лямбда-исчисление> Теория типов Лофта Мартина> Типизированное лямбда-исчисление> (Здесь что-то происходит)> Разработаны языки программирования - которые очень мало связаны с CL /
Я могу видеть основную «математику», связанную с CL / и интересные доказательства, которые в результате получаются, включая теорему Черча-Россера, и это аккуратно. Тем не менее, я изо всех сил пытаюсь понять «конечную цель» всего этого начинания? Что за святой Грааль PLT, если хотите? На данный момент, кажется, просто чешется интеллектуальный зуд, но я не могу действительно перейти от исследования / теории к чему-то практическому.
Примечание: я получаю его до использования -calc для доказательства неразрешимости. Но помимо его применимости к «вычислимости», я просто не понимаю, и мне трудно даже понять необходимость исследования PLT из этого узкого POV. Существующие книги, ссылки, которые могут пролить свет на «большую картину» PLT?
Ответы:
Общая цель PLT - сделать промышленную разработку программного обеспечения (в общем смысле) более дешевой (также в общем смысле) путем оптимизации наиболее важного инструмента (языков программирования) и соответствующей инструментальной экосистемы.
Некоторые причины, почему математика вовлечена:
PL очень нетривиальны, и не ясно, что они делают правильные вещи без доказательств. Математика дает упрощенную модель реальных языков программирования. Эта модель позволяет нам изучать настоящие языки программирования в значительно упрощенной обстановке, устраняя (мы надеемся) большинство проблем уже на уровне модели. Реальные языки программирования в настоящее время математически неразрешимы. Другими словами: лямбда-исчисление - это плодовая муха, E.Coli, сферическая корова PLT.
PLT не имеет подходящих эмпирических методов, которые было бы неплохо / лучше иметь, поэтому математика делается в качестве замены.
Математика прекрасна и глубока.
Математика дает простую, проверенную и проверенную методологию исследования, которая важна для помощи аспирантам. Как правило, некоторые варианты, например: Исследовать элемент PL XYZ путем добавления его в лямбда-исчисление. Добавьте простые типы для XYZ и докажите добротность. Добавьте дженерики для XYZ и докажите добротность. Докажите теорему параметричности для обобщений XYZ. Добавьте зависимые типы для XYZ и докажите правильность типа. Разработайте частичный вывод типов для XYZ-зависимых типов. Добавьте постепенные типы для XYZ и докажите добротность. Добавить контракты для XYZ. Каждый из них - бумага. Вы можете остановиться, если у вашего аспиранта или постдока не хватает времени. Каждый из вышеперечисленных интересен и даст представление об обобщениях, параметричности, выводе типов и т. Д. Этот конвейер является отличнымспособ навигации по трудным водам всех возможных языков программирования. Второй способ обучения - реализация языков в компиляторе, но для человека это не так просто.
Нужен ли PLT - интересный вопрос. Кажется, большинство работающих программистов считают, что это не так. Они не правы: большинство языков, разработанных работающими программистами без знания PLT (например, Javascript, PHP), начинаются ужасно и допускают все ошибки, которых теоретики PL давно научились избегать. Если PL, разработанный любителем, попадает в мейнстрим, теоретикам PL нужно около десяти лет, чтобы исправить очевидные недостатки (например, модифицировать статическую систему типирования, см. Typescript). Позвольте мне обобщить эту ситуацию:
За исключением: Такое положение дел является полностью ошибкой PLT, потому что большинство из них не имеет опыта промышленного программирования, поэтому не знаю, в чем заключаются болевые точки работающих инженеров-программистов. В частности, по социологическим причинам большинство теоретиков PL считают, что чисто функциональное программирование в таких языках, как Agda, является решением всех проблем, которое не выдерживает проверки.
источник