2

정적으로 입력 된 언어로만 존재합니까? 그리고 언어가 강하게 입력되지 않은 경우에만 존재합니까 (예 : 자바에 자바가 있습니까?)? 또한 컴파일 언어로 가정 할 때 컴파일 단계에 어디에 속합니까?유형 추정기 란 무엇입니까?

일반적으로 유형이 언어 사양에 따라 모호한 지 구현에 맡기지 않은 규칙이 있습니까?

답변

4

유형 추론은 일부 고정 유형 언어의 기능입니다. 컴파일러에서는 형식 주석이없는 엔터티에 형식을 할당하기 위해이 작업을 수행합니다. 컴파일러는 프로그래머를 대신하여 정적 유형 정보를 효과적으로 '채운다'.

형식 유추는 많은 암시 적 강제 변환 및 모호성과 언어에 더 제대로 작동하는 경향이있다, 그래서 대부분의 타입 유추 된 언어 등, 과부하, 강제 변환의 방법으로 약간의 기능적인 언어입니다

형식 유추가의 일부입니다 예를 들어, F # spec은 형식 추론 알고리즘과 규칙에 대해 자세히 설명합니다.이 규칙은 '합법적 인 프로그램'을 효과적으로 결정합니다.

대부분의 언어는 형식 유추의 일부 제한된 형식 (예 : C#의 'var')을 지원하지만 대부분의 사람들은 대다수 유형이 유추되는 언어를 참조하기 위해 '형식 유추'를 사용하기 때문에 명시적인 것보다 (예 : F #에서, 지역 변수뿐만 아니라 함수 및 메소드 시그니처가 일반적으로 추론됩니다. 'var'은 지역 변수의 추론을 허용하지만 메소드 선언은 전체 유형 정보를 필요로합니다).

2

형식 유추 기가는 컨텍스트의 변수 유형을 결정합니다. 그렇게하기 위해 강력한 타이핑에 의존합니다. 예를 들어, 함수형 언어는 매우 강력하고 정적으로 형식화되지만 형식 유추에만 의존합니다.

C# 및 VB.Net은 형식 유추를 사용하는 정적 형식 언어의 다른 예입니다.이 형식은 제네릭을 사용할 수 있도록 제공하며 LINQ의 쿼리, 특히 투영을 지원하는 데 필요합니다.

동적 언어는 유형을 유추하지 않으며 런타임에 검색됩니다.

0

유형 추론은 일부 정적 언어에서 발견되는 약간의 절충안입니다. 컴파일 타임에 일 때 유형을 으로 유추 할 수 있으면 유형을 지정하지 않고 변수를 선언 할 수 있습니다. 잠재적 인 타이핑의 융통성을 제공하지는 않지만 유형 안전성을 얻고 많은 양을 쓸 필요가 없습니다.

the Wikipedia article을 참조하십시오.

0

유형 유추 기는 형식 유추 알고리즘을 사용하여 유형을 정적으로 추론하는 모든 것입니다. 따라서 정적 언어의 기능 만이 아닙니다.

동적 언어 또는 안전하지 않거나 암시적인 형식 변환이있는 정적 분석 도구를 작성할 수 있으며 형식 유추가 작업의 주요 부분이됩니다. 그러나 안전하지 않거나 동적 인 유형의 시스템이나 암시 적 변환을 포함하는 언어에 대한 유형 유추는 일반적인 경우 프로그램의 유형 안전성을 증명하는 데 사용할 수 없습니다.이러한 형식 유추으로

이 사용됩니다

  • 정적 언어로 입력 한 주석을 피하기 위해, (제도, 자기와 파이썬에 대한 예) 동적 언어를위한 컴파일러를 최적화
  • ,
  • 버그 검사에서 도구, 컴파일러 및 동적 언어에 대한 보안 분석을 제공합니다.
관련 문제