점진적 타이핑
Gradual typing유형 시스템 |
---|
일반적인 개념 |
주요 카테고리 |
마이너 카테고리 |
점진적 타이핑은 일부 변수와 식에 활자를 부여하고 컴파일 시(정적 타이핑) 타이핑의 정확성을 체크하고 일부 식을 타이핑되지 않은 상태로 둘 수 있으며 실행 시(동적 타이핑)에 최종 유형 오류가 보고되는 유형 시스템입니다.점진적인 타이핑을 통해 소프트웨어 개발자는 하나의 [1]언어 내에서 적절한 유형의 패러다임을 선택할 수 있습니다.많은 경우 기존의 동적 언어에 점진적 입력이 추가되어 정적 입력이 가능하지만 필요하지 않은 파생 언어가 생성됩니다.경우에 따라서는 언어가 처음부터 점진적인 타이핑을 사용합니다.
역사
이 용어는 Jeremy Seek에 의해 만들어졌다.Jeremy Sieck와 [1]Walid Taha는 2006년에 점진적인 타이핑에 대해 연구하기 시작했다.
실행
특히, 점진적 타이핑은 정적으로 알려지지 않은 타입을 나타내기 위해 동적이라는 특별한 타입을 사용하고, 점진적 타이핑은 동적 타입을 다른 타입과 관련짓는 일관성이라는 새로운 관계로 타입 평등이라는 개념을 대체한다.일관성 관계는 대칭이지만 [2]과도적이지 않습니다.
이전에는 스태틱 타이핑과 다이내믹 타이핑을 통합하려고 했습니다.다이나믹 타입을 서브 타입 계층의 상위와 하위로 설정하려고 했습니다.단, 서브타이핑은 transitive이기 때문에 모든 타입이 다른 타입과 관련지어지기 때문에 서브타이핑은 스태틱타입 오류를 배제하지 않습니다.두 번째 단계의 신뢰성 검사를 유형 시스템에 추가해도 이 [3][4]문제가 완전히 해결되지는 않았습니다.
서브타이핑에 관한 암묵적인 업캐스트를 허용하는 서브타이핑 규칙을 이미 사용하고 있는 객체 지향 언어의 타이핑 시스템에 단계적 타이핑을 쉽게 통합할 수 있습니다.요점은 일관성과 서브타이핑은 잘 구성된 직교 아이디어라는 것입니다.서브타이핑은 재귀적이어야 하므로 서브타이핑 언어에 서브타이핑을 추가하려면 서브타이핑 규칙을 추가하고 다이내믹타입을 서브타입으로 하는 서브타이핑 규칙을 추가합니다(단, 서브타이핑 순서의 상단을 다이내믹하게 하지 마십시오).[5]
예
점차를 입력된 언어의 예는 기존의 동적으로 입력된 언어에서 파생된 닫힘 컴파일러, TypeScript(둘 다 JavaScript[6]에)[7]를 해킹하다(PHP에), PHP(7.0[8]부터), Typed용(Racket[9][10]에), TypedClojure(Clojure에)[11]Cython(는 파이선 컴파일러),mypy(파이선을 위한 정적 형식 확인자)[12]장작 더미(대체 세인트 포함한다Py에 Atic형 검사기.또는 [13]cperl(Perl 5 타입)을 지정합니다.ActionScript는 점차적으로 입력되는[14] 언어이며, 현재는 ECMAScript의 구현이지만, 원래는 두 언어 모두 Apple의 HyperTalk의 영향을 받아 형제로서 따로 생겨났다.
J프로그래밍 언어를 위한 시스템이 [15]개발되어 유형 시스템의 정규 검증 특성에 강제성, 오류 전파 및 필터링을 추가하고 함수 정의 이외의 유형 함수를 적용하여 유형 정의의 유연성을 증가시킨다.
반대로 C#은 정적으로 입력된 언어로 시작되었지만 버전 4.0부터는 점차 입력되어 변수를 명시적으로 동적 마킹할 수 있습니다.dynamic
다트,[16] 딜런, 라쿠 등 역동적으로 입력된 언어에서 파생되지 않은 점차 입력된 언어들이 있다.
Raku(구 Perl6)는 처음부터 점진적인 타이핑이 구현되어 있습니다.유형 검사는 값이 할당되거나 바인딩된 모든 위치에서 수행됩니다."유형화되지 않은" 변수 또는 매개 변수는 다음과 같이 입력합니다.Any
(거의) 모든 값에 일치합니다.컴파일러는 컴파일 시에 타입 체크 경합이 성공하지 못할지를 판단할 수 있는 경우 컴파일 시에 플래그를 붙입니다.
Objective-C에는 메서드콜에 관한 오브젝트 포인터의 점진적인 타입이 있습니다.정적 입력은 변수가 특정 개체 클래스에 대한 포인터로 입력될 때 사용됩니다. 변수에 대한 메서드 호출이 이루어지면 컴파일러는 클래스가 해당 메서드를 지원하도록 선언되었는지 정적으로 확인하거나 경고 또는 오류를 생성합니다.단, 유형의 변수가id
를 사용하면 컴파일러는 임의의 메서드를 호출할 수 있습니다.
2011년에 출시된 JS++ 프로그래밍 언어는 ECMAScript 및 DOM API 코너 [17]케이스에 적합한 점진적 유형의 시스템을 갖춘 JavaScript의 슈퍼셋(다이나믹 타입)입니다.
레퍼런스
- ^ a b Siek, Jeremy. "What is gradual typing?".
- ^ Siek, Jeremy; Taha, Walid (September 2006). Gradual Typing for Functional Languages (PDF). Scheme and Functional Programming 2006. University of Chicago. pp. 81–92.
- ^ Thatte, Satish (1990). Quasi-static typing. POPL 1990: ACM Principles of Programming Languages. ACM. pp. 367–381. doi:10.1145/96709.96747. ISBN 978-0897913430.
- ^ Oliart, Alberto (1994). An Algorithm for Inferring Quasi-Static Types (Technical report). Boston University. 1994-013.
- ^ Siek, Jeremy; Taha, Walid (August 2007). Gradual Typing for Objects. ECOOP 2007: European Conference on 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.
- ^ 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 - OOPSLA '14. Portland, Oregon, USA: ACM Press: 1–16. doi:10.1145/2660193.2660215. ISBN 978-1-4503-2585-1.
- ^ Swamy, N.; Fournet, C.; Rastogi, A.; Bhargavan, K.; Chen, J.; Strub, P. Y.; Bierman, G. (2014). "Gradual typing embedded securely in JavaScript". Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '14 (PDF). pp. 425–437. doi:10.1145/2535838.2535889. ISBN 9781450325448.
- ^ "PHP: Function arguments - Manual » Strict typing".
- ^ 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. Retrieved 2020-11-06.
- ^ Tobin-Hochstadt, Sam; Felleisen, Matthias. "The Design and Implementation of Typed Scheme". Proceedings of the Principles of Programming Languages. San Diego, CA. Tobin-Hochstadt08. Retrieved 2020-11-06.
- ^ Chas Emerick. "Typed Clojure User Guide".
- ^ Jukka Lehtosalo. "mypy - Optional Static Typing for Python".
- ^ "Pyre - A performant type-checker for Python 3".
- ^ Aseem Rastogi; Avik Chaudhuri; Basil Hosmer (January 2012). "The Ins and Outs of Gradual Type Inference" (PDF). Association for Computing Machinery (ACM). Retrieved 2014-09-23.
- ^ "type-system-j".
- ^ "dynamic (C# Reference)". MSDN Library. Microsoft. Retrieved 14 January 2014.
- ^ "The JS++ Type System, Appendix B: Problems (Why was this hard to solve?)". Retrieved 10 February 2020.
추가 정보
- 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. 1st Summit on Advances in Programming Languages (SNAPL 2015). Leibniz International Proceedings in Informatics (LIPIcs). Vol. 32. Dagstuhl, Germany: Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik. pp. 274–293. doi:10.4230/lipics.snapl.2015.274. ISBN 9783939897804.