왜 Objective-C가 Cocoa 환경을 넘어 널리 사용되지 않습니까?


24

Objective-C는 훌륭한 객체 지향성, 단순성, 우아함 및 (C의 상위 집합으로) 낮은 수준의 기능을 제공합니다. 많은 사람들이 Go에서 찾고 찾으려고하는 C ++의 단순하고 현대적인 대안처럼 보일 수 있습니다. 그러나 Cocoa 및 NextSTEP 환경 이후에 사용되며,이 경우에도 최적의 선택보다는 역사적 이유로 부담으로 여겨집니다.

왜 더 널리 사용되지 않습니까? 무엇이 문제입니까?


5
"역사적 이유"는 "많은 라이브러리"

@vartec 당신은 그렇게 강요하지 않습니다. 예를 들어 MonoTouch를 참조하십시오. C #입니다. 그리고 Objective-C, C 및 C ++에 관한 Apple의 규칙이 있습니까? 그들은 이미 그것을 버렸습니다.
오른쪽

답변:


28

Objective-C의 문제인 IMO는 사소한 단점 (특히 초기)과인지 된 이점의 부족만큼 큰 단점이 아닙니다.

Objective-C는 순수한 C의 상위 집합이므로 C 코드 는 Objective-C로 쉽게 전환 할 수 있습니다. 그러나 Objective-C 를 사용 하는 사고 방식 은 C 사고 방식과 많이 다릅니다 . C에서 Objective-C 로의 전환은 코드에서는 쉽지만 많은 프로그래머에게는 쉽지 않습니다. AC 프로그래머는 Objective-C에서 몇 가지 새로운 편의 기능을 쉽게 선택할 수 없으며 거의 ​​즉시 생산성을 향상시킬 수 없습니다.

C ++은 일부 코드의 전환을 좀 더 어렵게 만들었지 만 대부분의 프로그래머의 전환은 훨씬 쉬워졌습니다. 코드의 모든 세부 사항을 다루는 데 익숙한 C 프로그래머는 C ++에서 원하는 정도로 정확하게 그렇게 할 수 있습니다. C ++은 또한 사고 방식을 바꾸지 않고도 새로운 기능 (예 : ctor를 추가하여 구조체 멤버를 자동으로 초기화)을 쉽게 사용할 수 있도록했습니다. 많은 OO 순수 주의자 들은 사고의 급격한 변화를 촉발 했지만, 많은 C 프로그래머들은 (적어도 즉시, 그리고 종종 외모에서) 아무 것도하지 않고 C ++로 전환했습니다.

C ++은 또한 대부분의 C 프로그래머에게 훨씬 친숙해 보였습니다 . 몇 가지 새로운 키워드를 추가했지만 코드는 여전히 상당히 친숙하게 보입니다. "순수한 수퍼 세트"상태에도 불구하고 대부분의 Objective-C 코드 대부분의 C 프로그래머에게 상당히 외모로 보입니다 . C에서 많은 것들이 C에서 어떻게 작동하는지에 관해 설명하고 이해하기가 상당히 쉽습니다. Objective-C로 전환하는 것은 "나를 믿고 당신이 알고 있다고 생각하는 모든 것을 잊어 버리는 것보다 훨씬 더 많은 장소를 가지고 있습니다. "

Objective-C의 많은 디자인 결정은 특히 느린 프로세서, 제한된 메모리 등을 가진 상대적으로 오래된 컴퓨터에서 C ++보다 느리게 만들었습니다. 옳고 그름은 주로 단일 회사 제품으로 여겨졌습니다. C ++은 모든 사람과 모든 사람이 자유롭게 구현할 수 있습니다.

이 모든 것들로 인해 C ++은 "임계 질량"을 상당히 빨리 달성 할 수있을 정도로 빨리 빨리 채택되었습니다. 따라서 (다른 것들 중에서도) 이미 널리 사용되고 널리 알려져 있기 때문에 많은 프로젝트에서 명백한 선택이되었습니다. 수량.

Objective-C는 그 시점에 도달하지 않았습니다. 사실, 애플이 시스템을 개발하고 싶은 사람에게 거의 강제로 적용함으로써 애플이 부활했을 때 모호해지기 시작했다. 애플의 시장 점유율은 그다지 큰 비중을 차지할 정도로 크지 않다. Apple이 그렇게하는 이유만으로 "기본"선택입니다.

또한 적어도 내 의견으로는 Objective-C의 Smalltalk와 같은 객체 모델은 사실상 C ++보다 Java와의 직접적인 경쟁자라는 것을 의미합니다. 예, 여전히 C 토대를 가지고 있으며 별도의 언어를 사용하지 않고도 저수준 코드를 작성할 수 있습니다. 그러나 순수한 C와 실제 Objective-C는 완전히 다른 두 언어보다 단일 언어보다 덜 다릅니다. 둘 다 단일 컴파일러로 처리됩니다 (두 사람이 JNI와 같은 것을 사용하지 않고 서로 대화 할 수는 있지만 편리합니다).


훌륭한 역사적 리뷰. 나는 90 년대에 화이트 박스 NextSTEP 머신에서 Objective-C로 처음 코딩했고, 대학에서 C ++을 이미 배웠으며 Objective-C의 기괴한 구문을 싫어했습니다. 따라서 나는 당신이 여기에서 말하는 많은 것들을 이해할 수 있습니다.
Mark Booth

고마워, 그것은 분명히 내가 찾고있는 대답입니다. 리치는 C가 팀워크를 가능하게했다. "C는 기발한 결함과 엄청난 성공"; 이 인용문은 많은 사람들이 이해할 수 있도록 평평하고 간단한 언어를 만들어야한다는 것을 의미하며, 이것이 "멋진"언어 여야한다는 것을 의미하지는 않습니다. 아무도 그것을 좋아하지 않기 때문에 아무도 objc에 대해 불평하고 싶지 않습니다. "사람들이 불평하는 언어가 있고 아무도 언어를 사용하지 않습니다"bjarne stroustup. 최소한 Windows는 회사 클러스터로도 컴퓨터 산업을 성장시킬 수 있었고 애플이 개발자를 신경 쓰지 않기 때문에 애플이 실패하기를 바랍니다.
jokoon

분노에 대해 죄송하지만 개발자가 새로운 것을 배워야한다고해서 이미 알고있는 모든 것을 잊어 버린 것은 아닙니다. objc의 메신저 기능이 최적화 된 ASM 코드로 만들어 졌다고 들었습니다. 무슨 혼란, 어떻게 개발자들에게 그것을 이해하도록 말할 수 있습니까? 드라이버와 커널 개발자는 어떻습니까? Mac은 운전에 사용하는 캐딜락 일뿐입니다. 판매하는 멋진 고가의 물건이므로 이메일을 확인하고 DVD를 볼 수 있습니다. 저것에 소프트웨어를 추가하고 싶습니까? 행운을 빌어 친구. 기존의 모든 소프트를 잊고 apple way TM을 수행하십시오.
jokoon

+1, 훌륭한 설명!
Chan

11

글쎄, 기본적으로 애플은 Objective-C의 원동력이다.

  • 마지막 버전이 사실상 포기하는 동안, 오브젝티브 C 2.0은 실제로 점점 코어의 일부에 연결되기 시작한다 기초 클래스 / 프로토콜, 수단, 언어 기능과 프레임 워크 사이의 고유 링크가 NSFastEnumeration의 내 마음에 생겨나는 루프에서 객체가 올바르게 응답하는 데 필요합니다. 이는 언어와 플랫폼 사이에 갈수록 연관성이 커지고 있음을 의미합니다.
  • Cocoa에 대한 실질적인 대안은 없습니다. 그리고 Cocoa는 점점 더 많은 OSX 기능에 의존하기 시작했습니다. 기술적으로는 핵심 프레임 워크가있는 모든 OS에서 Objective-C 구현을 실행할 수 있지만 다른 플랫폼에 대한 최신 자료는 없습니다.

현재 Apple은 Objective-C를 완벽하게 제어하고 필요에 따라 언어를 구동하지만이 행성에는 Apple 이외의 장치에서 Objective-C를 실행하는 데 관심이있는 조직이 없습니다. .NET / Mono, C ++ 또는 Java가 제공하는 에코 시스템과 원격으로 경쟁 할 수있는 표준 라이브러리 및 툴킷부터 시작하십시오.


3
GNUStep이 있습니다. 그들은 그들이 얼마나 잘하고 있는지 한동안 확인하지는 않았지만 Apple과 계속 연락하려고합니다.
Per Johansson

1
그리고 Cocotron도 있습니다.
ysdx

1
이 답변이 작성된 시점에서 Apple 이외의 플랫폼에서 Objective-C 2.0을 실행할 수 없었습니다. 어쨌든 그 이후 많은 노력을 기울 였으므로 이제는 GNUstep을 사용하여 FreeBSD에서 Objective-C 2.0을 매우 원활하게 실행할 수 있습니다.
Eonil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.