Question

On prétend que le système de type Scala est Türing complet. Mes questions sont les suivantes:

  1. Y at-il une preuve formelle pour cela?

  2. Comment un simple regard de calcul comme dans le système de type Scala?

  3. Est-ce de tout avantage à Scala - la langue? Est-ce fait Scala plus « puissant » d'une manière langues par rapport sans système de type complet Turing?

Je suppose que cela s'applique aux langues et systèmes de type en général.

Était-ce utile?

La solution

Il y a un blog quelque part avec une mise en œuvre au niveau du type de calcul Combinator SKI, qui

est connu pour être Turing-complet.

systèmes de type complets ont-Turing essentiellement les mêmes avantages et inconvénients que les langues ont Turing-complet: vous pouvez faire quoi que ce soit, mais vous pouvez prouver très peu. vous ne pouvez pas, en particulier, prouver que vous allez réellement éventuellement faire quelque chose.

Un exemple de calcul de niveau type sont les nouveaux transformateurs de collecte de la conservation du type à Scala 2.8. Dans Scala 2.8, des méthodes telles que map, filter et ainsi de suite sont garantis pour retourner une collection du même type qu'ils ont été appelés. Donc, si vous filter un Set[Int], vous revenez un Set[Int] et si vous map un List[String] vous rentrerez un List[Whatever the return type of the anonymous function is].

Maintenant, comme vous pouvez le voir, map peut réellement transformer le type d'élément. Donc, ce qui se passe si le nouveau type d'élément ne peut pas être représenté avec le type de collection originale? Exemple: un BitSet ne peut contenir que des nombres entiers de largeur fixe. Donc, ce qui se passe si vous avez un BitSet[Short] et vous associez chaque numéro à sa représentation de chaîne?

someBitSet map { _.toString() }

Le résultat serait un BitSet[String], mais c'est impossible. Ainsi, Scala choisit le plus supertype dérivé de BitSet, qui peut contenir un String, qui dans ce cas est un Set[String].

Tout ce calcul se passe au cours de compilation , ou plus précisément lors de de type temps à vérifier , en utilisant des fonctions de niveau de type. Ainsi, il est statiquement garanti de type sécurisé, même si les types sont en fait calculés et donc pas connus au moment de la conception.

Autres conseils

Mon sur codant pour le calcul ski dans les émissions de système de type Scala Turing complet.

Pour certains calculs de niveau de type simple, il y a aussi quelques exemples sur la façon de coder les nombres naturels et addition / multiplication .

Enfin, il y a une grande série articles sur le type niveau de programmation sur sur le blog de Apocalisp.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top