간단히 말해서 : 유형 체계는 학문적 맥락에서 어떻게 분류 되는가; 특히, 다른 종류의 시스템 유형을 구별 할 수있는 평판 좋은 출처를 어디에서 찾을 수 있습니까?
어떤 의미 에서이 질문의 어려움은 대답을 찾을 수 없다는 것이 아니라 너무 많이 찾을 수 있다는 것입니다. 배경은 Haskell 위키에서 타이핑 에 관한 기사를 개선하려고 노력하고 있으며 현재 다음과 같은 차이점을 주장합니다.
- 타이핑 없음 : 언어에 유형 개념이 없거나 타이핑 된 관점에서 : 언어에는 정확히 하나의 유형이 있습니다. 어셈블리 언어에는 '비트 패턴'유형 만 있고, Rexx 및 Tk에는 '텍스트'유형 만 있으며, 핵심 MatLab에는 '복합 값 매트릭스'유형 만 있습니다.
- 약한 타이핑 : 구별 유형이 거의 없으며 여러 유형에 대한 유형 동의어가있을 수 있습니다. 예를 들어 C는 부울, 정수, 문자, 비트 세트 및 열거에 정수를 사용합니다.
- 강력한 타이핑 : Ada, Wirthian language (Pascal, Modula-2), Eiffel과 같은 세밀한 유형의 세트
이것은 내 개인적인 인식과는 완전히 반대되는 것으로서
- 약한 입력 : 객체에는 유형이 있지만 상황에 따라 암시 적으로 다른 유형으로 변환됩니다. 예를 들어, Perl, PHP 및 JavaScript는 가능한 모든
"1"
컨텍스트에서 사용할 수있는 모든 언어입니다1
. - 강력한 타이핑 : 객체에는 유형이 있으며 오버로드를 사용하여 시뮬레이션 할 수는 있지만 암시 적 변환이 없으므로 잘못된 컨텍스트에서 객체를 사용하면 오류가 발생합니다. 파이썬에서 문자열이나 float로 배열을 인덱싱하면 TypeError 예외가 발생합니다. Haskell에서는 컴파일 타임에 실패합니다.
나는 현장보다 경험이 많은 다른 사람들에게 이것에 대한 의견을 물었고, 한 사람이 다음과 같은 특성을 부여했다.
- 약한 입력 : 데이터에 대해 잘못된 작업을 수행하는 것은 제어 또는 거부되지 않고 단지 유효하지 않은 / 임의의 결과 만 생성합니다.
- 강력한 타이핑 : 데이터에 대한 작업은 데이터가 작업과 호환되는 경우에만 허용됩니다.
내가 이해하는 것처럼, 첫 번째와 마지막 특성화는 C를 약한 유형이라고하고 두 번째 특성은 강력하게 유형이라고합니다. 첫 번째와 두 번째는 Perl과 PHP를 약한 유형으로, 세 번째는 강력하게 유형이라고합니다. 세 가지 모두 파이썬을 강력한 유형으로 묘사합니다.
나는 대부분의 사람들이 나에게 "글쎄, 합의가없고, 용어의 수용된 의미가 없다"고 말할 것이라고 생각한다. 그 사람들이 잘못 경우에, 나는 그것에 대해 듣고 드리겠습니다,하지만 그들은 잘 경우, 그럼 어떻게 합니까 CS 연구자들은 설명하고 형 시스템을 비교? 덜 문제가되는 용어를 사용할 수 있습니까?
관련 질문으로, 동적 / 정적 구별이 종종 "컴파일 시간"과 "런타임"이라는 관점에서 주어 졌다고 생각합니다. 언어 컴파일 여부가 그 언어의 속성이 아니기 때문에 불만족 스럽습니다. 구현으로. 동적 타이핑과 정적 타이핑에 대한 순수한 의미 론적 설명이 있어야한다고 생각합니다. "정적 언어는 모든 하위 표현식을 입력 할 수있는 언어"입니다. 나는이 개념을 명확하게하는 어떤 생각, 특히 참고 문헌에 감사한다.