Чи можете ви вказати мову програмування без реалізації?


11

Чи теоретично можливо вказати мову програмування, для якої не може існувати жодна реалізація? Мова програмування - це спосіб визначення функцій. Реалізація означає метод виконання заданої програми на цій мові на заданому вході до виводу функції, відповідної програмі на цьому вході.

Які мінімальні вимоги до такої мови?


3
Що таке "реалізація" мови?
Рафаель

@Raphael: саме ви змінили "програмування" на "мову". Перед редагуванням було зрозуміло, що означає реалізація мови.
Цуйосі Іто

@TsuyoshiIto: Не зовсім; Я лише адаптував заголовок, щоб відповідати питанню, яке було змінено на cstheory.SE. Я змінив її назад, але досі не зрозуміло, що це означає. Компілятор? Перекладач? У будь-якому випадку, мігрування питання, якому вже майже рік і користувач, який, мабуть, ніколи не переглядав це питання, в кращому випадку не радив.
Рафаель

@Raphael: Запитання "що таке реалізація мови?" після вилучення всіх доказів було просто поза моїм розумінням. Але я згоден, що питання було спочатку незрозумілим.
Цуйосі Іто

Я думаю, що ваше передбачуване визначення "мови програмування" є непродуманим. Його слід принаймні доповнити, замінивши "функції" на "обчислювані функції". Інакше незрозуміло, чому ви вирішили назвати мову "мовою програмування". Після внесення змін до нього питання стає безглуздим, оскільки не існує таких "мов програмування, для яких не могло б існувати жодна реалізація".
Удай Редді

Відповіді:


7

Зазвичай реалізація мови програмування - це принаймні надання інтерпретатора мовою (або компілятором на мову), що не більше, ніж Тюрінг.

Використовуючи це "визначення", ми можемо вказати мову програмування так:

  • існує лише одна можлива програма, яка є HALT;

  • специфікація HALT: це функція, яка вирішує проблему зупинки .

Реалізація цієї мови програмування вимагає вирішення проблеми зупинки з реалізацією. (Що неможливо, оскільки наша реалізація не повинна бути потужнішою, ніж машина Тьюрінга).

Специфікація обробляє логіку і, таким чином, може вимагати набагато більше. Ще одна специфікація, яку неможливо реалізувати, - "помилкова". (Або будь-яке суперечливе речення в специфікації) Але це не схоже на специфікацію, саме тому я використав приклад проблеми зупинки.


1
Узагальнено: Будь-яка мова, яка визначає функцію, яка вирішує нерозв'язну проблему, не може бути реалізована.
edA-qa mort-ora-y

@ edA-qamort-ora-y Технічно це можна було реалізувати. Ви не можете вирішити проблему зупинки, але TM може імітувати іншу машину і приймати, якщо ця машина зупиниться; мова, прийнята такою ТМ, є саме мовою машин, що зупиняються. Але для практичних цілей ми зазвичай любимо, що примітивні операції мов програмування гарантовано припиняються! (принаймні на "розумному" вході)
Бен

1
О()

1/0 let loop = loop in loopΩ()

3

Просто цікава бічна зауваження: двигун шаблонів C ++ завершено Тюрінгом

Теорема 1: За відсутності меж екземплярів шаблони C ++ є завершеними по Тьюрінгу.

Висновок 1: За відсутності обмежень для встановлення даних, чи не зупиниться компілятор C ++ під час компіляції заданої програми.

... таким чином, сам C ++ можна вважати мовою програмування, для якої не може існувати жодна "реалізація" ... :-D


Тож чи може "компілятор" С використовуватись як інтерпретатор, якщо хтось не дбає про сформований код, а просто про діагностику?
supercat

Так, як показано в статті, компілятор зупиняється зі списком помилок, які відповідають історії обчислень машини Тьюрінга (та її остаточної конфігурації стрічки). Очевидно, що вхід не може бути інтерактивним (він повинен бути закодований у вихідному коді перед запуском компілятора).
Vor

2

Незрозуміло, що ви маєте на увазі під "мовою програмування" та "реалізацією мови". Вам потрібно дати чіткі визначення цих двох, щоб отримати відповідь.

Σ2Σ

ММ0

Але це не та мова специфікації, яку мають на увазі люди, коли вони використовують фразу "мова програмування". Мова програмування, як правило, позначається як мова для вираження обчислюваних функцій (процесів, ...) та передачі інструкцій машині, тому існує ТМ, яка може імітувати ці його програми та виводити їх результати. Тож у певному сенсі мати мову програмування, яку неможливо реалізувати, не має сенсу.

(Моя здогадка полягає в тому, що ви, мабуть, плутаєте мови програмування або з мовами специфікацій, або з формальними мовами . У будь-якому випадку ми можемо визначити мови, які не можна обчислити.)


Я впевнений, що "мова програмування" означає мову програмування так, як ми зазвичай говоримо про неї, а "реалізація мови" означає середовище для виконання програм цією мовою на реальних комп'ютерах. Питання не формалізоване , але точно не зрозуміло? Я легко можу написати специфікацію для нової мови програмування, не намагаючись її реалізувати; питання - просто запитання, чи можна це зробити таким чином, що мова не може бути реалізована.
Бен

@Ben, якщо ви подивитесь на оригінальне запитання на cstheory, ви побачите, що в питанні немає лише програмування слів, а лише в заголовку. Питання, викладене ОП, безумовно, однозначне. ps: Мене зацікавило б чітке (не потрібно формальне) визначення того, що є мовою програмування. Ми не можемо довести негативні результати щодо мов програмування виключно на основі інтуїції та прикладів. Якщо у вас є посилання на визначення, будь ласка, опублікуйте це як редагування або коментар до питання.
Каве

Досить справедливо, хоча ДП стверджує, що ви відповіли на це 9 годин тому, задовго після того, як вона була перенесена та відредагована. Я все-таки зробив би те саме тлумачення на основі оригінального запитання. Що стосується визначення мови програмування, я б сказав, що очевидним є формальна граматика плюс або зменшення до якоїсь іншої добре зрозумілої обчислювальної моделі (обчислення лямбда, машина тюрінга тощо), або сувора оперативна семантика. Модель скорочення, очевидно, зробить відповідь на це питання тривіальним "ні".
Бен

1

Існує безліч мов, визначених без реалізації, наприклад, Algol 60 повинен був бути мовою для написання алгоритмів, а не для реалізації. Деякі з багатьох "просто для розваги" мов були визначені задовго до того, як відбулася реалізація, Intercal приходить на думку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.