Nella diapositiva 30/78 della presentazione this, Simon suggerisce che l'implementazione delle classi di tipi era una "disperazione" all'inizio. Qualcuno sa perché è stato?Perché le classi di tipo erano difficili da implementare?
risposta
Credo di essere una delle poche persone che hanno esperienza diretta del perché è stato difficile, dal momento che l'ho implementato in hbc quando non esisteva arte nota.
Quindi ciò che era chiaro dal documento Wadler & Blott era che il controllo dei tipi era un'estensione del controllo di tipo Hindley-Milner e che in fase di esecuzione dovresti passare i dizionari. Da quello a un'implementazione reale è un passo piuttosto grande. Un buon modo per capire la difficoltà è implementarlo effettivamente partendo solo dal documento di Wadler-Blott.
In primo luogo, è necessario venire con l'idea di un controllo di tipo che non solo controlla i tipi, ma trasforma anche il programma; inserire prove (dizionari) durante il controllo dei tipi. Devi anche capire come costruire nuovi dizionari da quelli vecchi usando le dichiarazioni di istanza come sistema di inferenza.
Potrebbe sembrare tutto ovvio in retrospettiva, ma ricorda che da quel momento sono stati scritti molti documenti con spiegazioni. Capire come fare qualcosa da un foglio è molto diverso dal farlo.
Inoltre, si desidera che le classi di tipi siano ragionevolmente efficienti e conducano al proprio insieme di problemi.
Mi piacerebbe una versione più lunga di questa storia se sei disposto a (o lo hai) pubblicato da qualche parte. –
@ JohnF.Miller Beh, sono passati oltre 20 anni fa, quindi i dettagli non sono più così chiari nella mia memoria. – augustss
Puoi entrare in maggiori dettagli? Puoi anche indicare le carte che menzioni? –
- 1. Lingue e macchine virtuali: funzionalità difficili da ottimizzare e perché
- 2. Posso implementare automaticamente le classi?
- 3. Singleton - Perché usare le classi?
- 4. Le classi astratte possono implementare in C#?
- 5. Perché è possibile mischiare le classi in un campo tipo?
- 6. Perché le operazioni relazionali per la sicurezza dei caratteri sono così difficili?
- 7. Le funzioni point free erano in linea?
- 8. Cosa erano gli isolati di Node.js? E perché sono morti?
- 9. Perché i tipi di CLR non firmati sono così difficili da utilizzare in C#?
- 10. Haskell classi di tipo ereditare
- 11. Impossibile implementare il tipo di rappresentazione come membro del tipo
- 12. Perché Eclipse non sta aggiornando le classi?
- 13. Classi di tipo chiuso
- 14. Perché implementare le code come array circolare?
- 15. Perché le classi statiche sono sigillate?
- 16. Come implementare le classi nidificate non statiche nelle interfacce?
- 17. Perché le classi progettate per l'ereditarietà dovrebbero raramente implementare un'interfaccia Serializbile?
- 18. Extensible Haskell Tipo Classi
- 19. Perché dovrei usare le classi in python?
- 20. Inizializzazione variabile statica per le classi in C++, perché includere il tipo di dati?
- 21. Perché le classi annidate sono "ereditate"?
- 22. Perché utilizzare le classi in php?
- 23. Perché le classi immutable.js non richiedono "nuovo"?
- 24. Perché ant compilare tutte le classi ciascuna?
- 25. Le classi derivate devono implementare la semantica del movimento quando viene fornita da una base?
- 26. Haskell: classi tipo di domanda
- 27. problema quando si mescolano le classi di tipo e le famiglie tipo
- 28. Implementare INotifyPropertyChanged su classi Entity Framework generate
- 29. Perché le classi possono essere utilizzate come parametri di tipo e per cosa?
- 30. Proprietà di tipo memorizzato per le classi in Swift
Non è un esperto della tradizione di Haskell, ma probabilmente perché non era mai stato fatto prima e nessuno sapeva ancora come farlo. –
Questo è certo, è sempre il caso :) Ma in caso di classi di tipi, cosa ha causato esattamente problemi? –
@ ŁukaszLew - no, per quanto ho capito, questa era un'idea completamente nuova di Wadler e Blott. Quindi non potresti andare ad adattare altre soluzioni, per esempio. – Ingo