Какой-либо язык может потенциально использоваться для создания какой-либо программы?

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

8
задан Grace Note 17 May 2010 в 21:27
поделиться

10 ответов

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

18
ответ дан 5 December 2019 в 05:18
поделиться

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

3
ответ дан 5 December 2019 в 05:18
поделиться

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

1
ответ дан 5 December 2019 в 05:18
поделиться

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

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

1
ответ дан 5 December 2019 в 05:18
поделиться

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

1
ответ дан 5 December 2019 в 05:18
поделиться

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

1
ответ дан 5 December 2019 в 05:18
поделиться

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

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

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

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

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

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

LC ≤ UTM ∧ UTM ≤ LC ⇒ LC = UTM

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

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

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

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

7
ответ дан 5 December 2019 в 05:18
поделиться

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

0
ответ дан 5 December 2019 в 05:18
поделиться

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

0
ответ дан 5 December 2019 в 05:18
поделиться

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

0
ответ дан 5 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: