Незадолго до появления реального программирования ряд математиков уже начал мечтать о нём. И фантазировать, как оно могло бы быть устроено
( Read more... )
Насколько я понимаю вся идея с Тьюринг-машиной не в том чтобы на ней что-либо запускать, а использовать её в качестве простой математической модели, и потом просто строить изоморфизм между ТМ и реальными процессорами/байткодом и т.д. Т.е. можно было бы в принципе не полениться и доказать что есть такие функции на условной Scala, для которых невозможно определить войдет ли она в бесконечный цикл - но вместо этого можно доказать что (упрощенно): 1. код Скалы компилируется на JVM 2. интерпретатор байткода JVM (опять же, упрощенно) эквивалентен машине Тьюринга 3. а для машины Тьюринга мы уже знаем про halting problem Таким образом мы уже сразу же знаем что для кода и на Scala, и на Kotlin, и на Clojure, и на собственно Яве существует halting problem. Т.е. это абстракция, которая позволяет ленивым программистам - а программист должен быть ленив - без особых усилий рассуждать о возможностях языка, что может быть весьма и весьма полезно при написании DSL и т.д.
Любой нормальный язык программирования лучше подходит для рассуждений о языках программирования, чем машина Тьюринга. И его закономерности гораздо проще переносить на другие языки программирования.
Это чепуха, конечно. Реальные языки программирования слишком сложны синтаксически, чтобы было возможно строго о них рассуждать. Но каждый из них сводится к языку МТ, который чрезвычайно прост синтаксически и который, как уже отметили выше, служит прекрасной математической моделью.
Но самая чепуха в том, что в двадцать первом веке кто-то всё ещё думает, что «синтаксическая простота» = «простоте анализа» = «простоте использования».
Хотя вроде бы каждый из них давно мог бы попробовать позаниматься математикой при помощи системы обозначений аксиоматики Пеано и быстро понять на собственном примере, что «S(S(S(S(1))))» хотя и выигрывает в «синтаксической простоте» перед позиционной записью чисел, поскольку не содержит этой самой позиционной записи, тем не менее, совсем не проще записи «5». А если в этом вдруг ещё останутся сомнения, то этот человек всё ещё может записать, например, 521 + 32 в аксиоматике Пеано и попробовать глазами проверить, не допустил ли он в этой записи какую-то ошибку.
Не, ну реал, двадцать первый век на дворе, а кто-то всё ещё думает, что «меньше команд» = «проще язык».
Для рассуждений вообще подходит любой язык. Язык программирования для рассуждений не сильно удобнее машины Тюринга. Русский любой язык программирования в рассуждениях бьет за раз.
А вот для доказательств - машина тюринга вполне удобна.
Ладно, я уточню: я порекомендую на него перейти инженерам, математикам и программистам. А философам, конечно, гораздо лучше продолжить пользоваться языками с широким простором для неоднозначности и расплывчатости.
Т.е. можно было бы в принципе не полениться и доказать что есть такие функции на условной Scala, для которых невозможно определить войдет ли она в бесконечный цикл - но вместо этого можно доказать что (упрощенно):
1. код Скалы компилируется на JVM
2. интерпретатор байткода JVM (опять же, упрощенно) эквивалентен машине Тьюринга
3. а для машины Тьюринга мы уже знаем про halting problem
Таким образом мы уже сразу же знаем что для кода и на Scala, и на Kotlin, и на Clojure, и на собственно Яве существует halting problem.
Т.е. это абстракция, которая позволяет ленивым программистам - а программист должен быть ленив - без особых усилий рассуждать о возможностях языка, что может быть весьма и весьма полезно при написании DSL и т.д.
Reply
Reply
Реальные языки программирования слишком сложны синтаксически, чтобы было возможно строго о них рассуждать.
Но каждый из них сводится к языку МТ, который чрезвычайно прост синтаксически и который, как уже отметили выше, служит прекрасной математической моделью.
Reply
Хотя вроде бы каждый из них давно мог бы попробовать позаниматься математикой при помощи системы обозначений аксиоматики Пеано и быстро понять на собственном примере, что «S(S(S(S(1))))» хотя и выигрывает в «синтаксической простоте» перед позиционной записью чисел, поскольку не содержит этой самой позиционной записи, тем не менее, совсем не проще записи «5». А если в этом вдруг ещё останутся сомнения, то этот человек всё ещё может записать, например, 521 + 32 в аксиоматике Пеано и попробовать глазами проверить, не допустил ли он в этой записи какую-то ошибку.
Не, ну реал, двадцать первый век на дворе, а кто-то всё ещё думает, что «меньше команд» = «проще язык».
Reply
Reply
А вот для доказательств - машина тюринга вполне удобна.
Reply
Если кто-то сделает некий «русский язык» с однозначностью трактовок каждой фразы, я тут же порекомендую перейти на него при анализе алгоритмов и т.п.
Reply
Reply
Reply
Leave a comment