강력 / 약한 타이핑 및 정적 / 동적 타이핑은 직교합니다.
강 / 약 은 기능적으로 말해서 가치의 유형이 중요한지 여부입니다. 약한 유형의 언어에서는 숫자로 채워지는 두 개의 문자열을 사용하여 정수를 더할 수 있습니다. 강력한 형식의 언어에서는 오류입니다 (먼저 값을 올바른 형식으로 캐스트하거나 변환하지 않는 한). 강하고 약한 타이핑은 흑백이 아닙니다. 대부분의 언어는 100 % 엄격하거나 100 % 약하지 않습니다.
정적 / 동적 타이핑은 유형이 값 또는 식별자에 바인딩되는지 여부입니다. 동적 형식 언어에서는 형식에 관계없이 모든 변수에 모든 값을 할당 할 수 있습니다. 정적 유형 지정은 모든 식별자에 대한 유형을 정의하며 다른 유형에서 지정하는 것은 오류이거나 내재 된 캐스트입니다. 일부 언어는 유형이 지정되지 않은 식별자 ( 'variant')뿐만 아니라 정적으로 선언 된 형식을 허용하는 하이브리드 방식을 사용합니다. 컴파일러가 유형을 파악하도록하여 모든 유형을 명시 적으로 선언하지 않고 정적 유형을 지정할 수있는 메커니즘 인 유형 유추도 있습니다 (Haskell은이를 광범위하게 사용하고 C #은 var
키워드를 통해이를 노출합니다 ).
약한 동적 프로그래밍은 실용적인 접근 방식을 허용합니다. 언어는 대부분 방해가되지 않지만 발로 직접 촬영할 때는 들어오지 않습니다. 이와 반대로 강력한 정적 타이핑은 프로그래머가 컴파일러 또는 인터프리터가 오류 클래스를 감지 할 수 있도록 코드에 명시 적으로 값에 대한 특정 기대치를 표현하도록합니다. 좋은 유형의 시스템을 사용하면 프로그래머는 가치에 대해 할 수있는 것과 할 수없는 것을 정확하게 정의 할 수 있으며, 우연히 누군가가 원치 않는 사람을 시도하면, 유형 시스템은 종종 그것을 방지하고 일이 어디에서 왜 잘못되었는지 정확하게 보여줄 수 있습니다.