2012-07-12 2 views
2

이 두 정의 중 올바른 것은 무엇입니까? 정적 형식 및 동적 형식 정의

  • 가 정적
    입력 - 유형 매칭이 컴파일시에 체크 (따라서 컴파일 된 언어에 적용 할 수 있습니다)
  • 동적 입력 - 유형 매칭은 런타임에 확인, 또는 전혀됩니다. (이 용어는 컴파일 또는 인터프리터 언어에 적용 할 수 있습니다)

    는 정적
    입력 - 나는 'X가 int 유형의'말할 수 있도록 유형은 변수에 할당됩니다.
  • 동적은 입력 - 내가 정적 또는 동적 입력이 연결되지 않은이 정의에

'의 int를 들고 X'말할 것이다 그래야 유형, (모든 경우) 값에 할당 컴파일 된 언어 또는 해석 된 언어.

어느 쪽이 맞나요? 아니면 어느 쪽이 맞지 않습니까?

답변

1

둘째는 내 눈에 더 나은 정의입니다. 왜 일을하는지, 어떻게 작동하는지에 대한 설명을 찾고 있지 않다고 가정합니다.

더 나은 다시

  • 정적 입력 변수를
  • 동적 입력을 변경할 수 없습니다 명시 적 유형을 제공 변수를
+2

"EXPLICIT"에 대해 확실하지 않습니다. 타입 추론을 통해 프로그래머는 명시 적으로 변수에 유형을 부여하지 않습니다. –

+0

나는 형식 유추가 있고 그것에 대해 몰랐던 언어를 사용하지 않았다. – Cramer

0

나는 후자를 좋아 변경할 수 있습니다 암시 유형을 제공한다는 말을하는 것입니다 정의. 기본 클래스에서 Java 또는 C++와 같은 객체 지향 언어에서 파생 클래스로 캐스팅 할 때 형식 확인을 고려하십시오.이 형식은 첫 번째 정의가 아닌 두 번째 정의에 적합합니다. 그것은 (선택적인) 동적 타입 검사를 가진 컴파일 된 언어입니다.

+0

이 동적 검사는 어떻습니까? 두 정의 모두 컴파일 된 언어를 동적으로 입력 할 수 있습니다. – baruch

+0

@baruch 기본 클래스에서 파생 클래스로 캐스팅하면 런타임 형식 검사가 발생합니다. 즉 정의에 따라 동적 타이핑입니다. –

4

어느 쪽이 맞나요? 그렇지 않은 분도 있습니까?

첫 번째 정의 쌍은 더 가깝지만 맞지 않습니다.

는 정적 입력 - 유형 매칭

이 까다 롭습니다 컴파일시에 체크 (따라서 컴파일 된 언어에 적용 할 수 있습니다). 언어가 해석되었지만 실행이 시작되기 전에 유형 검사가 수행 되었다면 여전히 정적으로 입력 된 것으로 생각합니다. OCaml REPL은 소스 코드를 기술적으로 (그리고 유형을 검사하여) 자체 바이트 코드로 컴파일 한 다음 바이트 코드를 해석한다는 점을 제외하면 거의 예외적 인 예입니다.

동적 형식 - 형식 일치가 런타임에 확인되거나 전혀 검사되지 않습니다.오히려

:

동적 입력 - 유형 검사는 런타임에 수행됩니다.

untyped - 유형 검사가 수행되지 않습니다.

는 정적 입력 - 내가 'x는 int 유형의'말할 수 있도록 유형은 변수에 할당됩니다.

동적 입력 - 나는

변수는 무관 'x는 int를 들고'말할 수 있도록 유형, (모든 경우) 값에 할당됩니다. 변수 및 함수 정의에서 많은 정적으로 유형이 지정된 언어의 소스 코드에서만 유형을 명시 적으로 볼 수 있지만 모든 하위 표현식에도 정적 유형이 있습니다. 예를 들어 "foo" + 3은 int에 문자열을 추가 할 수는 없지만 관련 변수가 없기 때문에 일반적으로 정적 유형 오류입니다.

2

단어 정적을 보는 데 도움이되는 한 가지 방법은 정적 속성은 가능한 모든 입력에 대해 프로그램을 실행하는 모든 경우에 적용되는 속성입니다.

  • 자바 스크립트 : 없음 세그먼테이션 폴트 (segfault)/메모리 오류

  • 자바/C#을/F 번호를 : 그럼 당신은 특정 언어 나 유형의 시스템을보고 예를 들어, 확인할 수있는 정적있는 특성을 고려할 수있는 경우 프로그램을 컴파일하고 변수의 유형이 T 인 경우이 변수는 모든 실행에서이 유형의 값만 보유합니다. 하지만 슬프게도 참조 유형은 null을 값으로 사용합니다 (billion dollar mistake).

  • ML은

  • 하스켈은

  • COQ "이 프로그램은 표준 출력에 아무것도 인쇄되지 않습니다"예를 들어, 속성을 부작용에 대한 문을 확인할 수 있습니다 위의 보증 강력하고, 더 null이 없습니다 또한 종료를 확인합니다 -

당신이 확인하고 싶어 얼마나,이 맛과 손의 문제에 따라 달라집니다 "이 프로그램은 모든 입력에 종료됩니다." 모든 마술 (검증)은 가격이 책정됩니다.

ML을 본적이 없다면 시도해보십시오. 적어도 Yaron Minsky의 talk에게 5 분의주의를 기울이십시오. 프로그래머로서의 삶을 바꿀 수 있습니다.