Objective-C neden Kakao ortamlarının ötesinde yaygın olarak kullanılmıyor?


24

Objective-C, güzel nesne yönelimi, basitlik, zerafet ve (C'nin bir süperseti olarak) düşük seviye yeteneğine sahiptir. Birçok insanın Go'da aradığı ve bulmaya çalıştığı C ++ 'a basit, modern bir alternatif gibi görünebilir. Ancak sadece Kakao ve NextSTEP sonrası ortamlarda kullanılır ve bu durumda bile en uygun seçenek olarak değil, tarihsel nedenlerden dolayı bir yük olarak görülür.

Neden daha yaygın olarak kullanılmıyor? Sorunları neler?


5
"tarihi sebepler", "çok sayıda kütüphane" anlamına gelir

@vartec bunu yapmak zorunda değilsiniz. MonoTouch'a bakınız, örneğin, C #. Oh ve sonra Apple'ın Objective-C, C ve C ++ ile ilgili kuralı var, değil mi? Bunu zaten terk ettiler.
sağa

Yanıtlar:


28

IMO, Objective-C ile ilgili sorun, çok küçük eksiklikler (özellikle erken dönemde) ve algılanan avantajların olmaması gibi çok büyük eksiklikler değil.

Objective-C, C'nin saf bir süpersetiydi, bu nedenle C kodu kolayca Objective-C'ye geçebiliyordu. Zihniyet için kullanmak Objective-C ise C zihniyeti bir farklılık çok . C'den Objective-C'ye geçiş kod için kolaydır, ancak pek çok programcı için hiç de kolay değildir. AC programcısı kolayca Objective-C'deki birkaç yeni kolaylık özelliğini seçemez ve hemen hemen daha iyi bir üretkenlik elde eder - hiçbir yere ulaşmadan önce birçok yeni "şey" öğrenmesi gerekir.

C ++, bazı kodların geçişini biraz daha zorlaştırdı, ancak çoğu programcının geçişi daha kolaydı. Kodlarının her detayıyla ilgilenmeye alışkın olan C programcıları hala tam olarak istedikleri ölçüde C ++ 'da yapabilirler. C ++ ayrıca, düşünme biçiminizi gerçekten değiştirmeden bazı yeni özelliklerin (örneğin, yapı elemanlarınızı otomatik olarak başlatmak için bir ekleyici eklemek) kullanımını kolaylaştırdı. OO purists bir sürü itti (- şeylerin görünüyor gelen, genellikle sürekli ve en azından hemen) düşünce radikal değişiklikler, ancak C programcıları çok tür bir şey yapmadan C ++ geçti.

C ++ da baktım en C programcıları çok daha tanıdık. Birkaç yeni anahtar kelime ekledi, ancak (özellikle erken) bu kod hala oldukça tanıdık geliyordu. "Saf üst simge" durumuna rağmen, çoğu Objective-C kodu çoğu C programcısı için oldukça yabancı görünüyor . C ++ 'da işlerin nasıl yürüdüğü ile ilgili olarak açıklanması ve anlaşılması da oldukça kolaydır. Objective-C’ye geçmek, söyleyebileceğiniz her şey hakkında "sadece bana güven ve bildiğini düşündüğün her şeyi unutabilirsin." "

Objective-C'deki tasarım kararlarının çoğu da (biraz) C ++ 'dan daha yavaş, özellikle de yavaş işlemcilere, sınırlı belleğe, vb. Sahip olan eski makinelerde. Haklı ya da yanlış, aynı zamanda büyük ölçüde tek bir şirket ürünü olarak görülüyordu. C ++, herkes ve herkesin uygulayabileceği bir şekilde serbest kaldı.

Bunların hepsi, C ++ 'nın yeterince hızlı bir şekilde “kritik kütle” ye çabucak ulaşması için yeterince hızlı bir şekilde benimsemelerine neden oldu, bu yüzden (diğer şeylerin yanı sıra), zaten çok kullanılan, iyi bilinen bir çok proje için bariz seçenek haline geldi. miktar.

Amaç-C asla bu noktaya ulaşmadı. Aslında, Apple kendi sistemleri için geliştirmek isteyen herhangi birisine neredeyse zorlayarak, onu yeniden canlandırdığında belirsizliğe dönüşmeye doğru gidiyordu. Apple'ın pazar payı, gerçekten de olsa kritik kütle vermesi için yeterince büyük değil - sadece daha büyük bir niş. Bu "varsayılan" bir seçimdir, çünkü Apple bunu yapar.

Ayrıca, en azından benim görüşüme göre, Objective-C'nin Smalltalk benzeri nesne modelinin aslında Java için C ++ 'dan çok daha doğrudan bir rakip olduğu anlamına geliyor. Evet, hala C temelleri var ve evet, hala ayrı bir dil kullanmadan düşük seviyeli kod yazabilirsiniz - ama saf C ve gerçek Objective-C, tamamen farklı iki dilden farklı bir dilden daha az farklıdır. her ikisinde de tek bir derleyici tarafından ele alınabilir (her ikisinin de birbirleriyle JNI gibi bir şeyler olmadan konuşabilmeleri yararlıdır).


Mükemmel bir tarihi inceleme. İlk önce 90'lı yılların başında beyaz kutuda Objective-C kodlu olarak kodladım ve 90'lı yıllardaki üniversitede C ++ dersi aldım, Objective-C'nin tuhaf sözdiziminden nefret ediyordum. Bu nedenle burada söylediklerinizin çoğunu takdir edebilirim.
Mark Booth,

teşekkürler, tabii ki aradığım cevap buydu. ritchie C'yi ekip çalışmasını mümkün kılmak için yaptı; "C ilginç kusurlu ve muazzam bir başarı"; Bu alıntı, düz ve basit bir dil yapmak zorunda olduğunuz için İNANMAKTADIR, böylece birçok insanın anlayabilmesi için bu onun "harika" bir dil olması gerektiği anlamına gelmez. Hiç kimse objc hakkında şikayet etmek istemez, çünkü kimse beğenmez. bjarne stroustup, "Şikayet eden dil vardır ve hiç kimsenin kullanmadığı dil vardır" bjarne stroustup. En azından pencereler bilgisayar endüstrisini kurumsal bir kümelenme ile bile büyütmeyi başardı ve umarım elmalar başarısız olmaz, çünkü dev'lerle ilgilenmezler.
jokoon

Sınır için özür dilerim, ancak geliştirici olmak bile yeni şeyler öğrenmeniz gerektiği anlamına gelse de, zaten bildiğiniz her şeyi unutmanız gerektiği anlamına gelmez. Objc'nin messenger işlevinin bazı optimize edilmiş ASM kodlarıyla yapıldığını duydum. Ne dağınıklık, nasıl olduğunu anlamak için devs söyleyebilirsiniz? Peki ya sürücüler ve çekirdekler devs? Mac'ler sadece kullanacağınız Cadillacs'lar, sattıkları pahalı objeler sadece e-postalarınızı kontrol edebilmeniz, bir dvd izleyebilmeniz için. O şeye biraz yazılım eklemek ister misin? iyi şanslar dostum. Mevcut tüm yumuşakları unut ve elmaları TM yap.
jokoon

+1, mükemmel açıklama!
Chan

11

Temel olarak, Apple bir süredir Objective-C'nin ardındaki itici güç

  • Son sürüm neredeyse tamamen terkedilmiş olsa da, Objective-C 2.0 aslında bazı temel temel sınıflarına / protokollerine giderek daha fazla bağlı olmaya başlıyor, bu da dil özellikleri ile çerçeve arasında aklıma gelen NSFastEnumeration ile doğal bir bağ var. nesnelerin döngüler içinde doğru bir şekilde yanıt vermesi için gereklidir. Bu, dil ve platform arasında artan bir bağlantı olduğu anlamına gelir.
  • Neredeyse kakao için gerçek bir alternatif yoktur. Ve sırayla Kakao OSX özelliklerine bağımlı olmaya başladı. Teknik olarak, herhangi bir çekirdek çerçeveye sahip herhangi bir işletim sistemi üzerinde çalışan bir Objective-C uygulamasına sahip olabilirken, başka bir platform için orada pek fazla yeni bir şey yoktur.

Şu anda olduğu gibi, Apple, Objective-C üzerinde tam kontrole sahip ve dili ihtiyaçlarına göre sürüyor; bu gezegende, Apple olmayan bir cihazda Objective-C çalıştırmak için yeterince büyük bir kuruluş yok. .NET / Mono, C ++ veya Java tarafından sunulan ekosistemlere bile uzaktan rakip olabilecek standart kütüphane ve araç seti.


3
GNUStep var. Ne kadar iyi yaptıklarını bir süredir kontrol etmeme rağmen, Apple'a yetişmeye çalışıyorlar.
Johansson’a göre

1
Bir de Cocotron var.
ysdx

1
Yazılan bu cevap noktasında, Apple olmayan bir platformda Objective-C 2.0 çalıştırmak gerçekten mümkün değildi. Her neyse, ondan sonra çok çaba sarf edildi ve şimdi GNUstep'i oldukça sorunsuz kullanarak FreeBSD'de Objective-C 2.0'ı çalıştırmayı umuyoruz.
Eonil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.