Knowledge

Gradual typing

Source đź“ť

226:
Gradual typing allows software developers to choose either type paradigm as appropriate, from within a single language. In many cases gradual typing is added to an existing dynamic language, creating a derived language allowing but not requiring static typing to be used. In some cases a language uses
390:
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
270:
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
258:
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.
350:
has been developed, 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.
894:
Siek, Jeremy G.; Vitousek, Michael M.; Cimini, Matteo; Boyland, John Tang (2015). Ball, Thomas; Bodik, Rastislav; Krishnamurthi, Shriram; Lerner, Benjamin S.; Morrisett, Greg (eds.).
380:(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 as 384:, 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. 254:
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, because
898:. Leibniz International Proceedings in Informatics. Vol. 32. Dagstuhl, Germany: Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik. pp. 274–293. 358:
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 the
677: 324: 171: 621: 582: 61: 251:
that relates the dynamic type to every other type. The consistency relation is reflexive and symmetric but not transitive.
801: 504: 605:
Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications
520: 913: 661: 216: 566: 262:
Gradual typing can easily be integrated into the type system of an object-oriented language that already uses the
247:
is used to represent statically-unknown types. The notion of type equality is replaced by a new relation called
355: 316: 308: 296: 367: 377: 371: 363: 292: 200: 164: 646:
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '14
501:
Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '90
135: 347: 637:
Swamy, N.; Fournet, C.; Rastogi, A.; Bhargavan, K.; Chen, J.; Strub, P. Y.; Bierman, G. (2014).
279:
Examples of gradually typed languages derived from existing dynamically typed languages include
79: 41: 438: 57: 940: 870: 485: 415: 157: 110: 235:
The term was coined by Jeremy Siek, who developed gradual typing in 2006 with Walid Taha.
8: 75: 842: 919: 526: 362:
type. Gradually typed languages not derived from a dynamically typed language include
909: 697:
Proceedings of the Symposium on Object-Oriented Programming Systems, Companion Volume
657: 617: 578: 516: 453: 120: 923: 899: 744: 718: 649: 609: 570: 530: 508: 280: 203:
and expressions may be given types and the correctness of the typing is checked at
904: 692: 599: 545: 339:, though it originally arose separately as a sibling, both influenced by Apple's 263: 140: 130: 66: 794: 574: 472: 196: 105: 70: 934: 192: 125: 100: 822: 653: 613: 603: 847: 332: 271:
to be reflexive. (But do not make the top of the subtyping order dynamic!)
204: 145: 871:"The JS++ Type System, Appendix B: Problems (Why was this hard to solve?)" 638: 387: 212: 188: 84: 36: 22: 600:"Checking correctness of TypeScript interfaces for JavaScript libraries" 512: 792: 561:
Siek, Jeremy; Taha, Walid (August 2007). "Gradual Typing for Objects".
411: 403: 336: 288: 284: 407: 340: 267: 255: 300: 395:
is used, the compiler will allow any method to be called on it.
827: 749: 399: 335:
is a gradually typed language that is now an implementation of
328: 304: 716: 690: 793:
Aseem Rastogi; Avik Chaudhuri; Basil Hosmer (January 2012).
636: 312: 779: 320: 893: 402:
programming language, released in 2011, is a superset of
765: 211:) and some expressions may be left untyped and eventual 678:"PHP: Function arguments - Manual Â» Strict typing" 406:(dynamically typed) with a gradual type system that is 391:
a warning or error. However, if a variable of the type
723:
Proceedings of the Principles of Programming Languages
565:. Lecture Notes in Computer Science. Vol. 4609. 693:"Interlanguage Migration: From Scripts to Programs" 608:. Portland, Oregon, USA: ACM Press. pp. 1–16. 458:OOPSLA'04 Workshop on Revival of Dynamic Languages 323:(alternative static type checker for Python), or 932: 639:"Gradual typing embedded securely in JavaScript" 550:(Technical report). Boston University. 1994-013. 780:"Pyre - A performant type-checker for Python 3" 719:"The Design and Implementation of Typed Scheme" 597: 499:Thatte, Satish (1990). "Quasi-static typing". 295:(for PHP), PHP (since 7.0), Typed Racket (for 547:An Algorithm for Inferring Quasi-Static Types 165: 795:"The Ins and Outs of Gradual Type Inference" 471:Siek, Jeremy; Taha, Walid (September 2006). 436: 763: 717:Tobin-Hochstadt, Sam; Felleisen, Matthias. 691:Tobin-Hochstadt, Sam; Felleisen, Matthias. 766:"mypy - Optional Static Typing for Python" 172: 158: 903: 598:Feldthaus, Asger; Møller, Anders (2014). 742: 563:ECOOP 2007 – Object-Oriented Programming 560: 470: 432: 430: 243:In gradual typing, a special type named 474:Gradual Typing for Functional Languages 933: 543: 498: 482:Scheme and Functional Programming 2006 451: 427: 896:Refined Criteria for Gradual Typing 802:Association for Computing Machinery 13: 887: 725:. San Diego, CA. Tobin-Hochstadt08 14: 952: 699:. Portland, OR. Tobin-Hochstadt06 238: 863: 835: 815: 786: 772: 757: 736: 710: 684: 227:gradual typing from the start. 670: 630: 591: 554: 537: 492: 464: 445: 437:Siek, Jeremy (24 March 2014). 1: 905:10.4230/lipics.snapl.2015.274 421: 7: 575:10.1007/978-3-540-73589-2_2 315:(a static type checker for 274: 10: 957: 745:"Typed Clojure User Guide" 230: 439:"What is gradual typing?" 843:"dynamic (C# Reference)" 544:Oliart, Alberto (1994). 454:"Pluggable Type Systems" 654:10.1145/2535838.2535889 614:10.1145/2660193.2660215 266:rule to allow implicit 452:Bracha, Gilad (2004). 348:J programming language 299:), Typed Clojure (for 42:Strong vs. weak typing 486:University of Chicago 648:. pp. 425–437. 507:. pp. 367–381. 191:that lies inbetween 513:10.1145/96709.96747 418:API corner cases. 764:Jukka Lehtosalo. 623:978-1-4503-2585-1 584:978-3-540-73588-5 569:. pp. 2–27. 488:. pp. 81–92. 346:A system for the 182: 181: 948: 927: 907: 882: 881: 879: 877: 867: 861: 860: 858: 856: 839: 833: 832: 819: 813: 812: 810: 809: 799: 790: 784: 783: 776: 770: 769: 761: 755: 754: 740: 734: 733: 731: 730: 714: 708: 707: 705: 704: 688: 682: 681: 674: 668: 667: 643: 634: 628: 627: 595: 589: 588: 558: 552: 551: 541: 535: 534: 496: 490: 489: 479: 468: 462: 461: 449: 443: 442: 434: 394: 383: 361: 281:Closure Compiler 215:are reported at 174: 167: 160: 93:Minor categories 50:Major categories 29:General concepts 19: 18: 956: 955: 951: 950: 949: 947: 946: 945: 931: 930: 916: 890: 888:Further reading 885: 875: 873: 869: 868: 864: 854: 852: 841: 840: 836: 823:"type-system-j" 821: 820: 816: 807: 805: 797: 791: 787: 778: 777: 773: 762: 758: 741: 737: 728: 726: 715: 711: 702: 700: 689: 685: 676: 675: 671: 664: 641: 635: 631: 624: 596: 592: 585: 559: 555: 542: 538: 523: 497: 493: 477: 469: 465: 450: 446: 435: 428: 424: 392: 381: 359: 277: 241: 233: 178: 17: 12: 11: 5: 954: 944: 943: 929: 928: 914: 889: 886: 884: 883: 862: 834: 814: 785: 771: 756: 743:Chas Emerick. 735: 709: 683: 669: 662: 629: 622: 590: 583: 553: 536: 522:978-0897913430 521: 491: 463: 444: 425: 423: 420: 276: 273: 240: 239:Implementation 237: 232: 229: 221:dynamic typing 197:dynamic typing 185:Gradual typing 180: 179: 177: 176: 169: 162: 154: 151: 150: 149: 148: 143: 138: 133: 128: 123: 118: 113: 111:Flow-sensitive 108: 103: 95: 94: 90: 89: 88: 87: 82: 73: 64: 52: 51: 47: 46: 45: 44: 39: 31: 30: 26: 25: 15: 9: 6: 4: 3: 2: 953: 942: 939: 938: 936: 925: 921: 917: 915:9783939897804 911: 906: 901: 897: 892: 891: 872: 866: 850: 849: 844: 838: 830: 829: 824: 818: 803: 796: 789: 781: 775: 767: 760: 752: 751: 746: 739: 724: 720: 713: 698: 694: 687: 679: 673: 665: 663:9781450325448 659: 655: 651: 647: 640: 633: 625: 619: 615: 611: 607: 606: 601: 594: 586: 580: 576: 572: 568: 564: 557: 549: 548: 540: 532: 528: 524: 518: 514: 510: 506: 502: 495: 487: 483: 476: 475: 467: 459: 455: 448: 440: 433: 431: 426: 419: 417: 413: 409: 405: 401: 396: 389: 385: 379: 375: 373: 369: 365: 357: 352: 349: 344: 342: 338: 334: 330: 326: 322: 318: 314: 310: 306: 302: 298: 294: 290: 286: 282: 272: 269: 265: 260: 257: 252: 250: 246: 236: 228: 224: 222: 218: 214: 210: 209:static typing 206: 202: 198: 194: 193:static typing 190: 186: 175: 170: 168: 163: 161: 156: 155: 153: 152: 147: 144: 142: 139: 137: 136:Substructural 134: 132: 129: 127: 124: 122: 119: 117: 114: 112: 109: 107: 104: 102: 99: 98: 97: 96: 92: 91: 86: 83: 81: 77: 74: 72: 68: 65: 63: 59: 56: 55: 54: 53: 49: 48: 43: 40: 38: 35: 34: 33: 32: 28: 27: 24: 21: 20: 941:Type systems 895: 874:. Retrieved 865: 853:. Retrieved 848:MSDN Library 846: 837: 826: 817: 806:. Retrieved 788: 774: 759: 748: 738: 727:. Retrieved 722: 712: 701:. Retrieved 696: 686: 672: 645: 632: 604: 593: 562: 556: 546: 539: 500: 494: 481: 473: 466: 457: 447: 397: 386: 376: 354:Conversely, 353: 345: 333:ActionScript 278: 261: 253: 248: 244: 242: 234: 225: 220: 208: 205:compile time 184: 183: 121:Intersection 115: 23:Type systems 876:10 February 851:. Microsoft 388:Objective-C 311:compiler), 264:subsumption 249:consistency 213:type errors 189:type system 85:Duck typing 37:Type safety 16:Type system 855:14 January 808:2014-09-23 729:2020-11-06 703:2020-11-06 422:References 412:ECMAScript 404:JavaScript 337:ECMAScript 289:JavaScript 287:(both for 285:TypeScript 219:(which is 207:(which is 131:Refinement 80:structural 341:HyperTalk 327:(a typed 256:subtyping 201:variables 106:Dependent 935:Category 924:15383644 567:Springer 275:Examples 101:Abstract 71:inferred 67:Manifest 531:8725290 360:dynamic 301:Clojure 268:upcasts 245:dynamic 231:History 217:runtime 199:. Some 195:and in 146:Session 116:Gradual 76:Nominal 62:dynamic 922:  912:  828:GitHub 750:GitHub 660:  620:  581:  529:  519:  370:, and 329:Perl 5 317:Python 309:Python 305:Cython 297:Racket 141:Unique 126:Latent 58:Static 920:S2CID 804:(ACM) 798:(PDF) 642:(PDF) 527:S2CID 478:(PDF) 408:sound 368:Dylan 325:cperl 187:is a 910:ISBN 878:2020 857:2014 658:ISBN 618:ISBN 579:ISBN 517:ISBN 414:and 410:for 400:JS++ 398:The 378:Raku 372:Raku 364:Dart 321:pyre 313:mypy 293:Hack 78:vs. 69:vs. 60:vs. 900:doi 650:doi 610:doi 571:doi 509:doi 505:ACM 416:DOM 382:Any 331:). 319:), 307:(a 303:), 291:), 223:). 937:: 918:. 908:. 845:. 825:. 800:. 747:. 721:. 695:. 656:. 644:. 616:. 602:. 577:. 525:. 515:. 503:. 484:. 480:. 456:. 429:^ 393:id 374:. 366:, 356:C# 343:. 283:, 926:. 902:: 880:. 859:. 831:. 811:. 782:. 768:. 753:. 732:. 706:. 680:. 666:. 652:: 626:. 612:: 587:. 573:: 533:. 511:: 460:. 441:. 173:e 166:t 159:v

Index

Type systems
Type safety
Strong vs. weak typing
Static
dynamic
Manifest
inferred
Nominal
structural
Duck typing
Abstract
Dependent
Flow-sensitive
Gradual
Intersection
Latent
Refinement
Substructural
Unique
Session
v
t
e
type system
static typing
dynamic typing
variables
compile time
type errors
runtime

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑