Возможно ли теоретически указать язык программирования, для которого не может быть никакой реализации? Язык программирования - это способ определения функций. Реализация означает метод для выполнения данной программы на этом языке на заданном входе для вывода функции, соответствующей программе на этом входе.
Каковы минимальные требования такого языка?
Ответы:
Обычно реализация языка программирования, по крайней мере, дает переводчика на языке (или компиляторе на язык), который не более, чем Turing-complete.
Используя это «определение», мы можем указать такой язык программирования:
существует только одна возможная программа
HALT
;Спецификация
HALT
: это функция, которая решает проблему остановки .Реализация этого языка программирования требует решения проблемы остановки с реализацией. (Что невозможно, поскольку наша реализация не должна быть более мощной, чем машина Тьюринга).
Спецификация обрабатывает логику и, следовательно, может потребовать гораздо большего. Другая спецификация, которую невозможно реализовать, - «ложь». (Или любое противоречивое предложение в спецификации) Но это не похоже на спецификацию, поэтому я использовал пример с проблемой остановки.
источник
1/0
и, следовательно, Ω ( ∞ ) в модели очевидной стоимости. На практике все реализации Haskell различают исключение и расхождение, и GHC имеет указанную семантику операции, которая объясняет, как исключения должны работать. Но было бы возможно иметь соответствующую реализацию, которая бы зацикливалась на деление на ноль!let loop = loop in loop
Просто любопытное примечание: движок шаблонов C ++ является Turing-complete
Теорема 1: В отсутствие границ экземпляров шаблоны C ++ полны по Тьюрингу.
Следствие 1: В отсутствие ограничений на инстанцирование, будет ли остановлен компилятор C ++ при компиляции заданной программы.
... так что сам C ++ можно считать языком программирования, для которого не может существовать "реализация" ... :-D
источник
Непонятно, что вы подразумеваете под «языком программирования» и «реализацией языка». Вы должны обеспечить строгие определения этих двух, чтобы получить ответ.
Но это не тот язык спецификации , что люди имеют в виду , когда они используют выражение «язык программирования». Язык программирования , как правило , означает, что язык , чтобы выразить вычисляемые функции (процессы, ...) и передать инструкции к машине и , следовательно , существует TM , который может имитировать те свои программы и выводить их результаты. Таким образом, в некотором смысле наличие языка программирования, который не может быть реализован, не имеет смысла.
(Я думаю, что вы, вероятно , путая языков программирования либо с языками спецификации или с формальными языками . В любом случае, мы можем определить языки, которые не вычислит.)
источник
Было множество языков, указанных без реализации, например, Algol 60 должен был быть языком для написания алгоритмов, а не для реализации. Intercal вспоминает, что некоторые из многих языков «просто для удовольствия» были заданы задолго до того, как появилась реализация.
источник