정적 유형 언어와 동적 유형 언어는 원칙적으로 반대 개념으로 보입니다. 그러나 Objective-C와 같은 언어는 어떻게하면 한 번에 이러한 두 가지 일 수 있습니까? Objective-C는 동적 인 것보다 정적 인 것처럼 보입니다. 누군가 이것이 이것이 어떻게 가능한지 설명 할 수 있습니까?프로그래밍 언어를 정적으로 입력하고 동적으로 입력 할 수있는 방법은 무엇입니까?
답변
Objective-C는 실제로 개념적으로 C 언어 자체의 계층이며 정적 및 동적 유형을 모두 가질 수 있습니다. Objective-C 확장을 사용하는 경우 동적 인 기본 -C 파일을 사용하는 경우 정적입니다.
그러나 C는 sort-of도이 기능을 제공합니다. C의 void * 타입에 대해서 생각해 보면, 어떤 타입을 가리킬 수 있다는 것을 알 수 있습니다. 따라서 동적 인 타입의 언어를 제공합니다. 예를 들어
:
int i;
float f;
double d;
void *p = &i;
p = &f;
p = &d;
위 p
에 모든 과제에서, 다른 종류를 가리 키도록 만들어졌다. 당신이 영리 충분히 코드를 할 경우, 당신은 심지어 내가 언어 을 고려할 것 C.
에서 RTTI와 다형성을 에뮬레이션 할 수 있습니다 주로은 정적 또는 동적으로 사용 가장 무엇을 기반으로 입력했습니다.
두 관용구를 모두 지원할 수있는 기술 능력에 대해 질문하는 경우 특히 흥미로운 질문이 아닙니다. 대부분의 현대 언어를보고 어떻게하는지보십시오. 대개의 경우 catch-all 동적 유형 (VB에서는 Object
, C에서는 dynamic
, C에서는 void*
등)을 사용합니다. 형이상학/론적 수준에서
직관을 무시하는 행동을 제안 할 수있는 물리학 이론, 부탁 하나를 선도하는 "이 될 수 있는가?" 예를 들어, 파동 - 입자 이중성은 현실이 어떠해야하는지에 대한 상식적 인 개념을 뛰어 넘을 것이며, 그래서 그것은 우리로 하여금 상상할 수없는 것을 숙고하게 만듭니다.
그러나 프로그래밍 언어는 현실의 모델이 아닙니다. 그것들은 우리의 목적에 부합하도록 고안된 마음의 발명품입니다. 따라서 프로그래밍 언어가 어떻게 그렇게 될 수 있는지 상상하는 것은 의미가 없습니다. 우리가 그렇게하기를 원했기 때문에 그 길입니다. 그것은 우리의 목적에 부합하기 때문입니다. 다른 이유가 필요하지 않거나 보증되지 않습니다.
언어가 동적 일 수도 있고 정적 일 수도 있다는 이유 때문에 유용하지 않기 때문에 나는 경박하거나 분개하지 않습니다. 더 이상 조사 할 필요가 없다.
이것은 내가 지금까지 보아온 가장 불쾌하고 비협조적 인 대답 중 하나입니다. – jpswain
@ orange80 : 천만에. –
내가이 모든 것으로부터 이해 한 것은 그것이 사람들이 그렇게 만든 것입니다. 아마도 너무 많은 단어로 말입니다. – madhukar93
C는 정적 형식의 언어이지만 형식을 다른 형식으로 다시 변환하고 일반 포인터 (void * 형식)를 사용할 수 있습니다. void * 유형은 "지정되지 않은 데이터 유형에 대한 포인터"를 의미합니다. 보통이, 정의, 형식 정의의 여러 수준으로 떨어져 추상화되어 있지만 오브젝티브 C는, 이러한 무효 * 유형의 사용을 통해 동적 유형을 구현하는 등
난 당신이 정적 이 및 동적 방법 해상도를 입력 혼동 생각. 목표 -C는 확실히 강력하고 정적으로 입력됩니다. C와 마찬가지로 모든 변수는 선언되고 유형화되어야합니다 (다른 현대의 정적 유형 언어와 마찬가지로 유형 유추도 없습니다). 컴파일러는 변수 유형을 기반으로 코드를 생성하며 런타임에이 유형을 변경할 수 없습니다.
그러나 Objective-C 메서드 호출은 메시지 전달 패러다임을 사용합니다. 여기서 메시지 이름과 대상은 컴파일시 인코딩되지만 Objective-C 런타임 라이브러리는 런타임시 실행할 코드의 주소를 런타임에 조회합니다.
Apple Objective-C 문서에서 동적 메서드 확인 때문에 Objective-C가 동적으로 형식화되어 있기 때문에 실제로이 동일한 질문에 대해 궁금합니다. 문서가이 기능을 기반으로 동적으로 입력되었다고 말하는 것을 혼동해서는 안된다는 데 동의합니다. – Oscar
원한다면 모든 Obj-C 객체 유형을 _id_로 만들고 C 기본 형식을 제외하고는 _int_와 같은 유형을 완전히 무시할 수 있다는 점을 감안할 때 "선택적으로 형식이 지정되어 있지 않습니까?" – jpswain
@ orange80,'id' *는 유형입니다. 사실, Objective-C의 모든 객체 인스턴스는 컴파일러 유형'id' ('struct objc_object *')에 있습니다. 정적 유형 지정은 C 나 Objective-C에서 선택 사항이 아닙니다. –
Objective-C에는 정적 및 동적 입력이 혼합되어 있습니다. 일반 C 객체는 정적으로 입력되지만 Objective-C 객체는 동적으로 입력됩니다. Objective-C 런타임은 객체에 보내는 메시지가 객체에 의해 인식되는 한 객체의 유형을 신경 쓰지 않습니다.
정적 형식의 언어와 동적 형식의 언어는 실제로는 반대입니다. 적어도 이러한 용어가 일반적으로 사용되는 방식은 다릅니다.
정적 유형 언어는 컴파일 중 (또는 적어도 코드 실행 전에) 형식 검사 (보고) 단계를 포함하는 언어입니다. 목표 C는 확실히 이것을 가지고 있으므로 정적으로 타입이 지정됩니다.
동적 유형 언어는 이러한 유형 검사 단계가없는 언어입니다. 따라서 Objective C는이 정의에 의해 동적으로 타입이 지정되지 않습니다. 이것이 가장 표준적인 정의라고 생각합니다.
그러나 Objective C는 프로그래머가 코드의 일부, 특히 특수 정적 유형 id
을 통해 객체에 대해 감소 된 정적 유형 검사를 지정할 수 있기 때문에 동적 유형 지정 (정적 유형 이외에)이라고도합니다. 개인적으로 나는 그것이 동적으로 타입이 지정된 객체를 잘 지원하는 정적으로 타입이 지정된 언어라고 말하는 것이 덜 혼란 스럽다고 생각한다.
거의 모든 정적 유형 언어에는 동적 유형 지정에 대한 일부 지원이 포함되어 있습니다. 예를 들어, 런타임 검사를 사용하여 제로 오류, 배열 경계 오류, 다운 캐스트 오류 등으로 나누기를 포착하기 때문입니다. 동적으로 타이핑 된 언어를 호출합니다. 그렇지 않으면 거의 모든 언어를 동적으로 타입 지정해야합니다.
- 1. 현재 입력 언어를 감지하는 방법은 무엇입니까?
- 2. 3 가지 프로그래밍 언어를 연결하는 방법은 무엇입니까?
- 3. 정적으로 동적으로 동일한 라이브러리를 연결합니다.
- 4. 소프트웨어에서 동적으로 채색 할 수있는 아트 애셋을 만드는 방법은 무엇입니까?
- 5. EditText를 입력 할 때 listview를 필터링 할 수있는 방법은 무엇입니까?
- 6. 영어 이외의 텍스트를 입력하고 입력 된 텍스트를 처리하는 방법
- 7. HP에서 동적으로 링크하기 위해 정적으로 의존하는 라이브러리를 만드는 방법은 무엇입니까?
- 8. UI 언어를 동적으로 변경하십시오.
- 9. 프로그래밍 언어를 프로그램에 포함하기
- 10. RPython에 정적으로 무엇이 입력 되었습니까?
- 11. 입력 언어를 감지합니까?
- 12. 내 응용 프로그램이 정적으로 동적으로 연결된 CRT를 어떻게 만드는 지 알 수있는 방법은 무엇입니까?
- 13. 여러 프로그래밍 언어를 마스터 할 수 있습니까?
- 14. 어떤 프로그래밍 언어를 배워야합니까?
- 15. 소프트웨어 개발에 사용되는 프로그래밍 언어를 식별하는 방법은 무엇입니까?
- 16. 프로세싱을 VS에서 수행 할 수있는 방법은 무엇입니까?
- 17. 사용자가 코드 샘플을 입력 할 수있는 가장 위험한 방법은 무엇입니까?
- 18. drupal의 편집기가 프로그래밍 언어를 인식하고 문법을 강조하는 방법은 무엇입니까?
- 19. 동적으로 입력 된 언어가 왜 느린가요?
- 20. 좋아하는 프로그래밍 언어를 왜 좋아합니까?
- 21. 정적으로 입력되고 삽입 가능한 스크립팅 언어가 있습니까?
- 22. iPad 프로그래밍, 프로그래밍 방식으로 색상을 뒤집을 수있는 방법은 무엇입니까?
- 23. 게임 개발자로서 새로운 언어를 배우면 얻을 수있는 이점은 무엇입니까?
- 24. Ragel에서 템플릿 언어를 구문 분석하는 방법은 무엇입니까?
- 25. 더 많은 프로그래밍 언어를 배워야합니까?
- 26. "입력 할 때 검색"을 제공하는 가장 좋은 방법은 무엇입니까?
- 27. 오디오 입력 프로그래밍
- 28. 부스트 테스트가 동적으로 또는 정적으로 링크 되었습니까?
- 29. 해석 된 프로그래밍 언어를 구문 분석하는 프로세스는 무엇입니까?
- 30. 아파치 2에 PHP5를 정적으로 컴파일하는 방법은 무엇입니까?
어떻게? 두 가지 패러다임을 희생해서. –