¿Existen idiomas completos de uso general que no sean Turing completos disponibles hoy en día?

11

Los idiomas completos que no son de Turing ofrecen una gran ventaja sobre los idiomas completos de Turing, ya que son mucho más analizables y, por lo tanto, ofrecen posibilidades de optimización mucho más amplias. Sin embargo, apenas se usan y la integridad de Turing se vende realmente como una buena característica.

¿Hay algún lenguaje convencional no completo de Turing disponible hoy en día que esté hecho para programación de propósito general?

MaiaVictor
fuente
8
Creo que las dos cosas que estás buscando son mutuamente incompatibles. Si no está completo, entonces no se puede convertir en un uso arbitrario.
Bobson
@Dokkat Reabrí la pregunta y eliminé la discusión Meta de los comentarios. Tenga en cuenta que si no está de acuerdo con una de las pautas del sitio, la forma correcta de impugnarlo es publicar una Meta discusión; no solo ignorarlo. Además, para preguntas subjetivas, la clave del éxito es la investigación previa y la definición rigurosa. Cuanto más investigas, más específica (y responsable) se vuelve tu pregunta, y más te alejas del notorio espacio "no constructivo".
yannis
Además, ¿por qué considera que las "posibilidades de optimización más amplias" son una "gran ventaja"? Esto no quiere decir que la optimización no valga la pena, pero ciertamente no llamaría a la optimizabilidad inherente de un lenguaje una "gran ventaja" dado el poder de las computadoras modernas.
Bobson
2
Coq se puede considerar como bastante "mainstream" en su dominio, con competidores (HOL, Agda, ACL y similares) mucho menos visibles.
SK-logic
Tal vez no entiendo realmente qué es la integridad de Turing , pero ¿cómo puede un lenguaje ser de propósito general y no completo de Turing? Pensé que el significado de no estar completo de Turing, no es poder realizar ninguna tarea computacional, por lo tanto, tener como objetivo un propósito específico ...?
Aviv Cohn

Respuestas:

24

Hoy en día, no hay idiomas completos multipropósito que no sean Turing completos. Sin embargo, hay varios idiomas específicos de dominio completo que no son de Turing. ANSI SQL, expresiones regulares, lenguajes de datos (HTML, CSS, JSON, etc.) y expresiones s son algunos ejemplos notables.

Realmente no hay un beneficio para los lenguajes completos multipropósito que no son de Turing. El aspecto "mucho más analizable", que supongo es un guiño al teorema de Rice, se aplica, pero no tiene mucho sentido para los idiomas que se dirigen a varios dominios de aplicación diferentes, otros requisitos tienen prioridad. La flexibilidad de la integridad de Turing es mucho más importante que su complejidad. Los lenguajes de programación, como cualquier otra pieza de software, tienen que ver con compensaciones.

Para lenguajes específicos de dominio, por otro lado, podría ser al revés. Si no está creando "un idioma para gobernarlos a todos", puede implementar solo las funciones que tengan sentido para el propósito específico de su idioma. Y la mayoría de las veces, la integridad de Turing no es una de ellas.

Yannis
fuente
CSS3 es Turing completo.
SK-logic
55
@ SK-logic CSS tiene sentido sin HTML, se puede aplicar a cualquier tipo de XML y nada le impide implementarlo para ningún otro formato con forma más o menos compatible (árboles con nodos con nombre, orden de hermanos, etc.). Personalmente he escrito reglas CSS para un archivo SVG. Es mucho más común para HTML porque HTML es mucho más común que los otros formatos.
2
@ Mike, esa es una analogía rota. La semántica de CSS3 está estrechamente vinculada a la semántica del lenguaje de presentación.
SK-logic
2
Tenga en cuenta que SQL con Windows y CTE (es decir, SQL: 2003) también está completo de Turing.
Jörg W Mittag
1
"Hoy en día, no existen idiomas completos multipropósito que no sean Turing completos". - C sin almacenamiento externo no es Turing completo, sin embargo, es muy general y de uso general. (Bueno, yo personalmente diría que es un Lenguaje específico de dominio para escribir núcleos Unix, y ni siquiera es particularmente bueno en eso, pero el mundo no está de acuerdo.)
Jörg W Mittag
-3

La razón por la cual los lenguajes incompletos de Turing no son convencionales es que es fácil implementar el suyo propio cuando lo necesite y como lo necesite. Un ejemplo interesante es el script de bitcoin: https://github.com/bitcoin/bitcoin/blob/master/src/script.cpp

Adam Kurkiewicz
fuente
55
De Verdad? ¿Le importaría implementar Coq desde cero, por su cuenta, si es tan fácil?
SK-logic
¿Es esta solo tu opinión o puedes respaldarla de alguna manera?
mosquito
Los ejemplos son todos los lenguajes específicos de dominio que no necesitan recursión, iteración ilimitada u otras plataformas de Turing. Además, estoy seguro de que la mayoría de nosotros hemos implementado algún tipo de calculadoras simples que procesan la aritmética básica.
MauganRa
1
Sin embargo, estoy de acuerdo en que no es trivial mantener el lenguaje Turing incompleto. Incluso sin las tarpits de Turing obvias, siempre podría contener un error de compilación que permita utilizar una de las plataformas subyacentes.
MauganRa