Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Gradual typing

From Wikipedia, the free encyclopedia
Type system
Type systems
General concepts
Major categories
Minor categories

Gradual typing is atype system that lies in betweenstatic typing anddynamic typing. Somevariables and expressions may be given types and the correctness of the typing is checked atcompile time (which isstatic typing) and some expressions may be left untyped and eventualtype errors are reported atruntime (which isdynamic typing).

Gradual typing allows software developers to choose either type paradigm as appropriate, from within a single language.[1] In many cases gradual typing is added to an existing dynamic language,[2] creating a derived language allowing but not requiring static typing to be used. In some cases a language uses gradual typing from the start.

History

[edit]

The term was coined by Jeremy Siek, who developed gradual typing in 2006 with Walid Taha.[1][non-primary source needed]

Implementation

[edit]

In gradual typing, a special type nameddynamic is used to represent statically-unknown types. The notion of type equality is replaced by a new relation calledconsistency that relates the dynamic type to every other type. The consistency relation is reflexive and symmetric but not transitive.[3]

Prior attempts at integrating static and dynamic typing tried to make the dynamic type be both the top and bottom of the subtype hierarchy. However, becausesubtyping is transitive, that results in every type becoming related to every other type, and so subtyping would no longer rule out any static type errors. The addition of a second phase of plausibility checking to the type system did not completely solve this problem.[4][5]

Gradual typing can easily be integrated into the type system of an object-oriented language that already uses thesubsumption rule to allow implicitupcasts with respect to subtyping. The main idea is that consistency and subtyping are orthogonal ideas that compose nicely. To add subtyping to a gradually-typed language, simply add the subsumption rule and add a subtyping rule that makes the dynamic type a subtype of itself, because subtyping is supposed to be reflexive. (But do not make the top of the subtyping order dynamic!)[6]

Examples

[edit]

Examples of gradually typed languages derived from existing dynamically typed languages includeClosure Compiler,TypeScript (both forJavaScript[7]),[8]Hack (for PHP), PHP (since 7.0[9]), Typed Racket (forRacket[10][11]), Typed Clojure (forClojure),[12]Cython (aPython compiler),mypy (a static type checker forPython),[13]pyre (alternative static type checker for Python),[14] orcperl (a typedPerl 5).ActionScript is a gradually typed language[15] that is now an implementation ofECMAScript, though it originally arose separately as a sibling, both influenced by Apple'sHyperTalk.

A system for theJ programming language has been developed,[16] adding coercion, error propagation and filtering to the normal validation properties of the type system as well as applying type functions outside of function definitions, thereby the increasing flexibility of type definitions.

Conversely,C# started as a statically typed language, but as of version 4.0 is gradually typed, allowing variables to be explicitly marked as dynamic by using thedynamic type.[17] Gradually typed languages not derived from a dynamically typed language includeDart,Dylan, andRaku.

Raku (formerly Perl6) has gradual typing implemented from the start. Type checks occur at all locations where values are assigned or bound. An "untyped" variable or parameter is typed asAny, which will match (almost) all values. The compiler flags type-checking conflicts at compile time if it can determine at compile time that they will never succeed.

Objective-C has gradual typing for object pointers with respect to method calls. Static typing is used when a variable is typed as pointer to a certain class of object: when a method call is made to the variable, the compiler statically checks that the class is declared to support such a method, or it generates a warning or error. However, if a variable of the typeid is used, the compiler will allow any method to be called on it.

TheJS++ programming language, released in 2011, is a superset ofJavaScript (dynamically typed) with a gradual type system that issound forECMAScript andDOM API corner cases.[18]

References

[edit]
  1. ^abSiek, Jeremy (24 March 2014)."What is gradual typing?".
  2. ^Bracha, Gilad (2004)."Pluggable Type Systems".OOPSLA'04 Workshop on Revival of Dynamic Languages.
  3. ^Siek, Jeremy; Taha, Walid (September 2006).Gradual Typing for Functional Languages(PDF).Scheme and Functional Programming 2006.University of Chicago. pp. 81–92.
  4. ^Thatte, Satish (1990). "Quasi-static typing".Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '90.ACM. pp. 367–381.doi:10.1145/96709.96747.ISBN 978-0897913430.S2CID 8725290.
  5. ^Oliart, Alberto (1994).An Algorithm for Inferring Quasi-Static Types (Technical report). Boston University. 1994-013.
  6. ^Siek, Jeremy; Taha, Walid (August 2007). "Gradual Typing for Objects".ECOOP 2007 – Object-Oriented Programming. Lecture Notes in Computer Science. Vol. 4609.Springer. pp. 2–27.doi:10.1007/978-3-540-73589-2_2.ISBN 978-3-540-73588-5.
  7. ^Feldthaus, Asger; Møller, Anders (2014)."Checking correctness of TypeScript interfaces for JavaScript libraries".Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications. Portland, Oregon, USA: ACM Press. pp. 1–16.doi:10.1145/2660193.2660215.ISBN 978-1-4503-2585-1.
  8. ^Swamy, N.; Fournet, C.; Rastogi, A.; Bhargavan, K.; Chen, J.; Strub, P. Y.; Bierman, G. (2014)."Gradual typing embedded securely in JavaScript"(PDF).Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '14. pp. 425–437.doi:10.1145/2535838.2535889.ISBN 9781450325448.
  9. ^"PHP: Function arguments - Manual » Strict typing".
  10. ^Tobin-Hochstadt, Sam; Felleisen, Matthias."Interlanguage Migration: From Scripts to Programs".Proceedings of the Symposium on Object-Oriented Programming Systems, Companion Volume. Portland, OR. Tobin-Hochstadt06. Retrieved2020-11-06.
  11. ^Tobin-Hochstadt, Sam; Felleisen, Matthias."The Design and Implementation of Typed Scheme".Proceedings of the Principles of Programming Languages. San Diego, CA. Tobin-Hochstadt08. Retrieved2020-11-06.
  12. ^Chas Emerick."Typed Clojure User Guide".GitHub.
  13. ^Jukka Lehtosalo."mypy - Optional Static Typing for Python".
  14. ^"Pyre - A performant type-checker for Python 3".
  15. ^Aseem Rastogi; Avik Chaudhuri; Basil Hosmer (January 2012)."The Ins and Outs of Gradual Type Inference"(PDF).Association for Computing Machinery (ACM). Retrieved2014-09-23.
  16. ^"type-system-j".GitHub.
  17. ^"dynamic (C# Reference)".MSDN Library. Microsoft. Retrieved14 January 2014.
  18. ^"The JS++ Type System, Appendix B: Problems (Why was this hard to solve?)". Retrieved10 February 2020.

Further reading

[edit]
  • Siek, Jeremy G.; Vitousek, Michael M.; Cimini, Matteo; Boyland, John Tang (2015). Ball, Thomas; Bodik, Rastislav; Krishnamurthi, Shriram; Lerner, Benjamin S.; Morrisett, Greg (eds.).Refined Criteria for Gradual Typing. Leibniz International Proceedings in Informatics. Vol. 32. Dagstuhl, Germany: Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik. pp. 274–293.doi:10.4230/lipics.snapl.2015.274.ISBN 9783939897804.S2CID 15383644.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Gradual_typing&oldid=1280551774"
Category:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp