168 votes

Pourquoi ne pas être dépendante tapé ?

J'ai vu plusieurs sources, l'écho de l'opinion que "Haskell est en train de devenir un dépendante de typage du langage". L'implication semble être qu'avec de plus en plus des extensions de langage, Haskell est à la dérive dans ce sens, mais il n'en est pas encore là.

Il existe essentiellement deux choses que je voudrais savoir. La première est, tout simplement, que signifie "être un dépendante de typage du langage" réellement dire? (En espérant ne pas être trop technique à ce sujet.)

La deuxième question est de savoir... ce qui est l'inconvénient? Je veux dire, les gens savent que nous sommes à la tête de cette façon, il doit donc y avoir un certain avantage. Et pourtant, nous n'y sommes pas encore, donc il doit y avoir une baisse stopper les gens qui vont tout le chemin. J'ai l'impression que le problème est une forte augmentation de la complexité. Mais, ne comprenant pas vraiment ce qui dépendante de frappe est, je ne sais pas pour sûr.

Ce que je ne sais, c'est que chaque fois que je lance la lecture d'un dépendante de type de langage de programmation, le texte est absolument incompréhensible... sans doute ce qui est le problème. (?)

22voto

Ptharien's Flame Points 2388

Dépendant de frappe est vraiment juste l'unification de la valeur et du type de niveaux, de sorte que vous pouvez paramétrer les valeurs de types (déjà possible avec les classes de type et de polymorphisme paramétrique en Haskell) et vous pouvez la paramétrer les types de valeurs (et non, à proprement parler, encore possible en Haskell, bien qu' DataKinds devient très proche).

Edit: Apparemment, à partir de ce moment, j'ai eu tort (voir @pigworker du commentaire). Je vais conserver le reste de ce qu'un enregistrement de l'mythes j'ai été nourri. :P


Le problème avec le déplacement à pleine dépendante de la dactylographie, de ce que j'ai entendu, c'est qu'elle allait se briser la phase de restriction entre le type et la valeur des niveaux qui permet Haskell pour être compilé en code machine efficace avec effacé types. Avec notre niveau actuel de la technologie, un dépendante tapé langue doit passer par un interprète à un certain point (soit directement, soit après avoir été compilé pour dépendante de type de bytecode ou similaire).

Ce n'est pas nécessairement une restriction fondamentale, mais je ne suis pas personnellement au courant de tout courant de recherche qui s'annonce prometteur à cet égard, mais qui ne l'a pas déjà fait dans GHC. Si quelqu'un d'autre en sait plus, je serais heureux d'être corrigé.

21voto

ulfnorell Points 101

John qui est un autre méprise courante au sujet des types dépendants : qu’ils ne fonctionnent pas lorsque les données sont uniquement disponibles au moment de l’exécution. Voici comment vous pouvez faire l’exemple getLine :

Edit : Hm, qui était censé pour être un commentaire à la réponse de pigworker. Clairement, je n’arrive pas à so

21voto

wren gayle romano Points 279

pigworker donne une excellente discussion des raisons pour lesquelles nous devrions être dirigés vers des types dépendants: (a) ils sont super; (b) ils seraient en fait de simplifier beaucoup de ce que Haskell déjà fait.

Comme pour le "pourquoi pas?", il y a un couple de points je pense. Le premier point est que, bien que l'idée de base derrière types de charge est facile (autoriser les types reposent sur des valeurs), les ramifications de cette notion fondamentale sont à la fois subtile et profonde. Par exemple, la distinction entre les valeurs et les types est toujours vivant et bien; mais de discuter de la différence entre eux devient beaucoup plus nuancée que dans yer Hindley--Milner ou Système F. dans une certaine mesure, cela est dû au fait que les types de charge sont fondamentalement dur (par exemple, la logique du premier ordre est indécidable). Mais je pense que le plus gros problème c'est vraiment ce qu'il nous manque un bon vocabulaire pour la capture et expliquer ce qui se passe. Comme de plus en plus de gens apprennent à propos des types dépendants, nous allons développer un meilleur vocabulaire et donc, les choses deviendront plus faciles à comprendre, même si les problèmes sous-jacents sont encore mal.

Le deuxième point a à voir avec le fait que Haskell est croissante vers des types dépendants. Parce que nous faisons réaliser des progrès vers cet objectif, mais sans faire réellement de là, nous sommes coincés avec une langue qui a différentiels des taches sur le dessus de l'accroissement des patchs. Le même genre de chose s'est passé dans d'autres langues que de nouvelles idées, est devenu populaire. Java n'utilisez pas d'avoir (paramétrique) polymorphisme; et quand ils ont enfin ajouté, il était de toute évidence une amélioration progressive avec un peu d'abstraction fuites et les infirmes de la puissance. S'avère, mélange de sous-typage et polymorphisme est par nature difficile; mais ce n'est pas la raison pourquoi Java Génériques fonctionnent de la manière dont ils le font. Ils fonctionnent de la manière dont ils le font en raison de la contrainte à une amélioration progressive dans les anciennes versions de Java. Idem, pour de plus amples retour dans la journée quand la programmation orientée objet a été inventé et les gens ont commencé l'écriture de "l'objectif" C (à ne pas confondre avec Objective-C), etc. Rappelez-vous, C++ qui a commencé sous le couvert d'être un sur-ensemble strict de C. l'Ajout de nouveaux paradigmes toujours exige de définir la langue à nouveau, ou bien de se retrouver avec quelques bazar compliqué. Mon point dans tout cela est que, en ajoutant vrai des types dépendants à Haskell, aura besoin d'une certaine quantité de l'éviscération et la restructuration de la langue--- si nous allons le faire à droite. Mais il est vraiment difficile de s'engager à ce genre de remaniement, alors que l'augmentation progrès que nous avons fait semble moins cher à court terme. Vraiment, il n'y a pas beaucoup de gens qui hack sur GHC, mais il y a une bonne quantité de code hérité de le garder vivant. C'est en partie la raison pour laquelle il ya tellement de nombreux spin-off langues comme le DDC, le poivre de Cayenne, l'Idris, etc.

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