0

, (이이 기능을 지원한다면) 에이다에서이 같은 :런타임에 유형을 결정한 정적 유형 언어? 예를 들어

"최고", "아래"와 변수
type Type_Name is range bottom .. top; 

.

var if (z<3) int else char; 

: (C)가 선언 변수 식별자 후의 형태를 갖는다면,

struct s { 
    int a; 
    if (z<3) { 
     char b; 
     int c; 
    } else { 
     struct ss { 
      int b; 
      char c; 
     } 
    } 
} v; 

또는 (는이를 지원한다면)

또는 C에서 같은 것을

또는 그런 것.

이것은 호기심이 아닙니다. 나는 그것이 유용 할 지조차 모르겠다. 그리고 그것을 사용하기 전에 s.ss.b 같은 것이 있는지 여부를 확인하는 것과 같은 많은 문제를 일으킬 것이라는 것을 안다.

아, 아마도 제목에서 질문을 다시 말해야합니다. 런타임에 유형을 결정한 정적 유형 언어가 있습니까? 그렇다면 무엇입니까?

btw 아마도 언어가 정적으로 입력되지 않을 것입니다. 그러나 나는 변수의 타입이 사용되기 전에 명시 되어야만하는 언어를 의미합니다 (물론 이것을 할 수는 없습니다).

+0

귀하의 질문에 모순이 구체화되어 있습니다. 'Statically ryped'는 컴파일 타임에 유형을 결정한다는 의미입니다. 진짜 질문이 아닙니다. – EJP

답변

1

런타임에 유형을 결정하는 정적 유형 언어에는 거의 요점이 없습니다. 정적 유형 지정의 요점은 모든 유형의 오류를 정적으로, 즉 컴파일 할 때 감지하는 것입니다.

런타임에 유형을 결정하려는 경우 "유형"개념을 무시하고 오리 유형 접근법을 사용할 수도 있습니다. 여기서 중요한 것은 조작이 지원되는지 여부입니다.

런타임에 유형을 결정하는 정적 유형 언어를 사용하는 유일한 이유는 컴파일 할 때 결정 불가능한 경우를 처리하기 위해서입니다. 아마 이런 언어가있을 것입니다. 그러나 저는 언어 개발 장면에 더 신경 쓰지 않아서 말할 수 없습니다.

+0

디자인 단계에서 형식 검사기가 통역사와 융합 된 언어를 만들었습니다. 형식이 정적이지만 런타임에 오류 메시지를 반환합니다. 이를 통해 우리는 새로운 구조를 빠르게 추가하고 언어를 발전시킬 수있었습니다. 나중에 언어가 안정화 될 때 우리는 두 언어를 분리했습니다. 재미있는 경험이었습니다! 추천하지 마시길 바랍니다 :-) – jurgenv

+0

@jurgenv 매우 재미 있습니다. 공유해 주셔서 감사합니다. – Marcin

0

정적으로 입력 된 언어로 동적 사용을 에뮬레이트 할 수 있습니다. 이 과정의 일부 제한 될 것입니다하지만 당신은 그것을

몇 가지 예를 수행 할 수 있습니다 C#에서

다음 코드는 유효 하나입니다.

object variant; 

if(a<5) 
    variant = new int(); 
else 
    variant = new double(); 

및 C

는 ++

boost::variant< std::vector<int> , std::list<int> > v; 

if (n > 10000) 
    v=std::vector(); 
else 
    v=std::list(); 

유효합니다.