Czy teoretycznie jest możliwe określenie języka programowania, dla którego nie byłoby możliwe wdrożenie? Język programowania to sposób definiowania funkcji. Implementacja oznacza metodę wykonania danego programu w tym języku na danym wejściu na wyjściu funkcji odpowiadającej programowi na tym wejściu.
Jakie są minimalne wymagania takiego języka?
Odpowiedzi:
Zazwyczaj implementacja języka programowania daje przynajmniej tłumacza w języku (lub kompilatorze języka), który nie jest niczym więcej niż ukończeniem Turinga.
Korzystając z tej „definicji” możemy określić język programowania taki jak ten:
istnieje tylko jeden możliwy program
HALT
;specyfikacja
HALT
: jest to funkcja, która rozwiązuje problem zatrzymania .Implementacja tego języka programowania wymaga rozwiązania problemu zatrzymania przy implementacji. (Co jest niemożliwe, ponieważ nasza implementacja nie powinna być mocniejsza niż maszyna Turinga).
Specyfikacja obsługuje logikę i dlatego może prosić o wiele więcej. Inną specyfikacją, której wdrożenie będzie niemożliwe, jest „fałsz”. (Lub dowolne sprzeczne zdanie w specyfikacji) Ale to nie wydaje się być specyfikacją, dlatego użyłem przykładu problemu zatrzymania.
źródło
1/0
a zatem jest Ω ( ∞ ) w modelu kosztu oczywistego. W praktyce wszystkie implementacje Haskell rozróżniają wyjątek i rozbieżność, a GHC ma określoną semantykę operacji, która wyjaśnia, jak powinny działać wyjątki. Ale możliwe byłoby posiadanie zgodnej implementacji, która zapętlałaby się na zawsze przy dzieleniu przez zero!let loop = loop in loop
Ciekawa uwaga: silnik szablonów C ++ jest kompletny w Turingu
Twierdzenie 1: W przypadku braku granic tworzenia szablonów szablony C ++ są kompletne według Turinga.
Konsekwencją 1: W przypadku braku limitów tworzenia instancji, czy kompilator C ++ zatrzyma się podczas kompilacji danego programu, jest nierozstrzygalny.
... więc sam C ++ można uznać za język programowania, dla którego nie może istnieć „implementacja” ... :-D
źródło
Nie jest jasne, co rozumiesz przez „język programowania” i „implementację języka”. Musisz podać rygorystyczne definicje tych dwóch, aby uzyskać odpowiedź.
Ale nie jest to język specyfikacji, który ludzie mają na myśli, gdy używają wyrażenia „język programowania”. Język programowania jest zazwyczaj rozumie się język do wyrażania funkcje obliczalne (procesy, ...) i do komunikowania się z instrukcjami do maszyny, a zatem nie jest TM, które może symulować te swoje programy i wyjście ich wyników. W pewnym sensie posiadanie języka programowania, którego nie można wdrożyć, nie ma znaczenia.
(Domyślam się, że prawdopodobnie mylisz języki programowania z językami specyfikacji lub językami formalnymi . W każdym razie możemy zdefiniować języki, które nie są obliczalne.)
źródło
Podano wiele języków bez implementacji, np. Algol 60 miał być językiem do pisania algorytmów, a nie do implementacji. Niektóre z wielu języków „tylko dla zabawy” zostały określone na długo przed nadejściem implementacji, przychodzi mi na myśl Intercal.
źródło