378 votes

CSS turing est-il complet?

CSS n'est pas, autant que je sache, complète Turing. Mais ma connaissance du CSS est très limitée.

  • CSS Turing est-il complet?
  • Y a-t-il des projets ou des comités existants qui envisagent des caractéristiques linguistiques qui pourraient permettre à Turing d'être complet si ce n'est pas le cas actuellement?

468voto

Jakob Points 1315

Vous pouvez encoder la Règle 110 en CSS3, donc c'est Turing-complet, aussi longtemps que vous considérez qu'un accompagnement appropriées fichier HTML et les interactions de l'utilisateur de faire partie de l ' "exécution" de CSS. Une assez bonne mise en œuvre est disponible, et une autre mise en œuvre est incluse ici (JsFiddle version):

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Rule 110</title>
        <style type="text/css" media="screen">
            body {
                -webkit-animation: bugfix infinite 1s;
                font-family: "Courier New";
                font-size: 28px;
            }
            @-webkit-keyframes bugfix { from { padding: 0; } to { padding: 0; } }

            /* 111 110 101 100 011 010 001 000
0 1 1 0 1 1 1 0 */

            body > input {
                -webkit-appearance: none;
                display: block;
                float: left;
                border-right: 1px solid #ddd;
                border-bottom: 1px solid #ddd;
                padding: 5px 12px;
                margin: 0;
            }
            body > input::before {
                content: "0";
            }

            body > input:nth-of-type(-n+30) { border-top: 1px solid #ddd; }
            body > input:nth-of-type(30n+1) { border-left: 1px solid #ddd; clear: left; }

            body > input::before { content: "0"; }

            body > input:checked::before { content: "1"; }
            body > input:checked { background: #afa !important; }


            input:not(:checked) +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input::before {
                content: "1";
            }
            input:not(:checked) +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input {
                background: #fa0;
            }


            input:checked +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input::before {
                content: "1";
            }
            input:checked +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input {
                background: #fa0;
            }


            input:checked +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input::before {
                content: "1";
            }
            input:checked +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input {
                background: #fa0;
            }

            input:checked + input:checked + input:checked +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input::before {
                content: "0";
            }
            input:checked + input:checked + input:checked +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input {
                background: #fff;
            }

            input:not(:checked) + input:not(:checked) + input:not(:checked) +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input::before {
                content: "0";
            }
            input:not(:checked) + input:not(:checked) + input:not(:checked) +
                    *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
                    input {
                background: #fff;
            }

            body > input:nth-child(30n) { display: none !important; }
            body > input:nth-child(30n) + label { display: none !important; }

        </style>
    </head>

    <body>
        <input type="checkbox" />
        <input type="checkbox" />

        /* A total of 900 checkboxes required */

        <input type="checkbox" />
        <input type="checkbox" />

    </body>
</html>

33voto

DVK Points 63282

Par cet article, il n'est pas. L'article a également fait valoir qu'il n'est pas une bonne idée pour faire un.

Pour citer l'un des commentaires:

Donc, je ne crois pas que CSS est turing. Il n'y a pas de capacité à définir une fonction dans CSS. Pour qu'un système de turing-complet, cela doit être possible pour écrire un interprète: une fonction qui interprète les expressions désigner les programmes à exécuter. Le CSS n'a pas d' les variables qui sont directement accessibles pour l'utilisateur; vous ne pouvez donc pas le même modèle la structure qui représente l' programme à être interprété dans le CSS.

5voto

Maurício Szabo Points 242

Turing-complétude n'est pas seulement à propos de "définir des fonctions" ou "avez-fi/boucles/etc". Par exemple, Haskell n'a pas de "boucle", lambda-calcul n'ont pas de "si", etc...

Par exemple, ce site: http://experthuman.com/programming-with-nothing. L'auteur utilise Ruby et de créer un "FizzBuzz" programme de fermeture (pas de chaînes de caractères, nombres, ou quelque chose comme ça)...

Il y a des exemples quand les gens de calculer certaines fonctions arithmétiques sur Scala en utilisant uniquement le type de système

Donc, oui, à mon avis, CSS3+HTML est turing-complet (même si vous ne pouvez pas vraiment faire tout calcul réel avec puis sans devenir fou)

-36voto

Ryan Prior Points 1075

CSS n’est pas un langage de programmation, donc la question de turing-complet est dénuée de sens. Si les extensions de programmation sont ajoutées à CSS comme ce fut le cas dans IE6 alors cette nouvelle synthèse est une chose tout à fait différent.

CSS est simplement une description des styles ; Il n’a aucune logique, et sa structure est plat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X