Можно ли использовать какой-либо язык для создания какой-либо программы? - PullRequest
8 голосов
/ 16 апреля 2010

Я слышал, что если у программиста достаточно времени и навыков на любом конкретном языке и достаточно строк кода, то любая программа может быть создана на любом данном языке. Я знаю, что переписать Adobe Photoshop на BASIC, конечно, не будет экономически эффективным, но может ли достаточно хороший и достаточно терпеливый программист потенциально создать любую программу на любом языке?

Ответы [ 10 ]

18 голосов
/ 16 апреля 2010

Если язык Тьюринг завершен , то теоретически вы можете написать в нем любую программу - однако даже у этого есть некоторые ограничения, такие как пользовательский интерфейс и API ОС. Например, Brainfuck завершен по Тьюрингу, но нет никакого графического интерфейса, потому что вы не можете получить доступ к видеопамяти, и нет поддержки потоков. Однако с ним можно выполнить любую вычислительную задачу.

7 голосов
/ 16 апреля 2010

Это зависит от того, как именно вы определяете «любую программу» и «любой язык».

Начнем с первого: «любая программа». Существует много программ (на самом деле, существует бесконечно много программ), которые не могут быть написаны вообще , независимо от языка программирования. Одной из самых известных является так называемая проблема остановки: напишите программу H, которая при задании любой программы P и любого ввода x определяет, остановится ли P(x) в конечном итоге. Алан Тьюринг доказал много десятилетий назад, что такая программа существует невозможно . Ergo, вы не можете написать эту программу на любом языке программирования.

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

Краткая история: чтобы доказать неразрешимость проблемы остановки, Алан Тьюринг изобрел гипотетическую машину под названием Машина Тьюринга. ТМ - это в основном гипотетический компьютер с бесконечной памятью, который вычисляет определенную функцию. Оказывается, вы можете построить универсальную машину Тьюринга, которая может эмулировать любую другую машину Тьюринга.

Примерно в то же время Алонзо Черч изобрел лямбда-исчисление. LC является также абстрактной математической моделью вычисления, но полностью отличается. Люди начали задаваться вопросом: какая из этих двух моделей более мощная? Есть ли что-нибудь, что UTM может вычислить, что LC не может, и наоборот? Может ли ЛК решить проблему остановки?

Как оказалось, вы можете написать эмулятор для UTM в LC и вы можете создать TM, который интерпретирует LC. Это означает, что TM может вычислить все, что может вычислить LC (просто запустив его в интерпретаторе), а LC может вычислить все, что может вычислить UTM (просто запустив его в эмуляторе). Итак, у нас есть

LC ≤ UTM ∧ UTM ≤ LC ⇒ LC = UTM

На английском языке: LC и UTM одинаково мощны. Фактически, оказывается, что каждая модель вычислений и каждая машина и каждый язык программирования, который мы когда-либо находили, максимум как мощный как LC и UTM и действительно любая другая модель. Это приводит к так называемому тезису Черча-Тьюринга , в котором говорится, что все достаточно мощные модели вычислений одинаково мощны, и не может быть модели вычислений, более мощной, чем UTM или LC. (Могут быть модели вычислений, которые являются менее мощными, как, например, регулярные выражения или полные функции или язык только с ограниченными циклами.)

Мы называем такие модели вычислений Тьюринг-полными . И, кстати, вам не нужно много, чтобы быть полным по Тьюрингу .

Итак, теперь мы можем определить, что мы подразумеваем под «любой программой» и «любым языком»:

Если программа может быть написана на одном языке, полном по Тьюрингу , то она может быть написана на любом языке, полном по Тьюрингу .

3 голосов
/ 16 апреля 2010

Это все вопрос времени, не так ли? Отсутствие подходящих библиотек и API-интерфейсов для использования на BASIC может привести к тому, что проект Adobe Photoshop будет работать вечно, и по завершении он может работать не очень гладко, но теоретически выполнимо.

1 голос
/ 16 апреля 2010

Вы должны быть осторожны с тем, что вы подразумеваете под «любой программой». Например, если вас попросили написать программу, которая создает текстовый файл на диске, содержащий «Hello world», и вас попросили записать его на чистом Javascript, это было бы невозможно, потому что чистый Javascript не имеет возможности что-либо записать на диск. .

Для более подробного обсуждения этой идеи вы можете прочитать о вычислимости .

1 голос
/ 16 апреля 2010

Вы также можете воссоздать Windows 95, набрав бит за битом в шестнадцатеричном редакторе, но какой в ​​этом смысл?

1 голос
/ 16 апреля 2010

Конечно (Сорт). Есть компромисс, производительность. Также некоторые языки могут не иметь доступа к определенным функциям системы, что делает их неспособными выполнять определенные задачи на компьютере. Некоторые языки просто ... слабее других, и это займет некоторое время.

1 голос
/ 16 апреля 2010

Язык должен быть полным по Тьюрингу и также должен быть способ доступа к собственной ОС для многих различных операций, таких как файлы, сокеты и т. Д. *

0 голосов
/ 07 мая 2010

Я думаю, что если вы добавите «достаточно креативно» и включите в себя использование, которое следует считать программированием, и определение «любой программы» как любой программы, которая уже существует, тогда ответ - да.

0 голосов
/ 16 апреля 2010

Если вы добавили «... на достаточно мощный компьютер и, учитывая, что в языке есть библиотеки, которые могут обрабатывать все, что нужно программе», то ответ все равно будет «нет». Некоторые языки могут настолько свести программистов с ума, что они убивают себя. Если бы меня когда-либо заставили вернуться к Visual Basic 3 (без классов или коллекций), я бы не знал, как переписать Блокнот.

0 голосов
/ 16 апреля 2010

Я думаю, если у вашего языка есть средства для доступа ко всем необходимым входам и выходам, тогда да.

...