Чому «Об’єктив-С» не використовується широко за межами середовищ какао?


24

Objective-C відрізняється приємною орієнтацією на об'єкт, простотою, вишуканістю та (як суперсет C), низькою здатністю до рівня. Це може здатися простою, сучасною альтернативою C ++, яку багато людей шукають і намагаються знайти в Go. Але він просто використовується в середовищі какао та після-наступного СТЕП, і навіть у цьому випадку сприймається скоріше як тягар з історичних причин, ніж як оптимальний вибір.

Чому він тоді не використовується більш широко? Які її проблеми?


5
"історичні причини" означають "багато бібліотек"

@vartec вас не змушують цього робити. Наприклад, дивіться MonoTouch, це C #. О, і тоді у вас є правило Apple щодо Objective-C, C і C ++, правда? Вони вже відмовились від цього.
праворуч

Відповіді:


28

ІМО, проблема з Objective-C полягає не стільки в масових недоліках, скільки в незначних недоліках (особливо на ранніх стадіях) і відсутності сприйнятих переваг.

Objective-C був чистим набором C, тому код C міг легко переходити до Objective-C. Настрій для використання Objective-C, проте, відрізняється від C склад розуму в партії . Перехід від C до Objective-C простий у коді, але для багатьох програмістів зовсім непростий. Програміст змінного струму не може просто вибрати декілька нових зручностей у 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 відродила його, майже змусивши його всіх, хто хотів розвиватися для своїх систем. Частка ринку Apple недостатньо велика для того, щоб реально надати їй критичну масу - просто більшу нішу. Це вибір "за замовчуванням" лише там, де / тому, що Apple робить це так.

Я також додам, що, принаймні, на мою думку, об'єктна модель Smalltalk, що нагадує Objective-C, означає, що насправді вона набагато більше прямого конкурента Java, ніж C ++. Так, у нього все ще є підкладки C, і так, ви все одно можете писати код низького рівня, не використовуючи окремої мови, але чистий C і справжній Objective-C досить різні, що це схоже на одну мову, ніж дві абсолютно різні мови, які трапляється, що обидва обробляються одним компілятором (хоча зручно, що вони можуть розмовляти один з одним без чогось на зразок JNI, щоб приєднатися до них).


Відмінний історичний огляд. Я вперше зашифрував у Objective-C на білій коробці NextSTEP-машини в 90-х і вже викладав C ++ в університеті, ненавиджу химерний синтаксис Objective-C. Як такий, я можу оцінити багато речей, які ви тут говорите.
Марк Бут

дякую, це явно відповідь, яку я шукав. ritchie змусив C зробити можливою командну роботу; "C - химерний недолік та величезний успіх"; ця цитата означає, що ви повинні зробити рівну, просту мову, щоб багато людей могли її зрозуміти, і це не означає, що вона повинна бути "приголомшливою" мовою. Ніхто не хоче скаржитися на objc, тому що нікому це не подобається. "Є мова, на яку люди скаржаться, а мовою ніхто не користується" bjarne stroustup. Принаймні Windows змогла змусити комп’ютерну індустрію зростати навіть за допомогою корпоративного грона, і я сподіваюся, що яблуко не вдасться, оскільки вони не переймаються розробниками.
jokoon

Вибачте за рент, але навіть якщо бути розробником означає, що вам доведеться вивчати нові речі, це не означає, що ви повинні забути все, що вже знаєте. Я чув, що функція обміну повідомленнями обмінника зроблена з деяким оптимізованим кодом ASM. Який безлад, як ти можеш сказати чортам, щоб це зрозуміли? Як щодо драйверів та розробників ядер? Маки - це лише Cadillacs, якими ви користуєтеся для керування, вони просто привабливі дорогі предмети, які продаються, щоб ви могли просто перевірити електронну пошту, дивитися DVD. Хочете додати щось програмне забезпечення до цієї речі? удачі товариш. забудьте про всі існуючі м'які, і зробіть яблучний шлях TM.
jokoon

+1, відмінне пояснення!
Чан

11

Ну, в основному, Apple є рушійною силою Objective-C з певного часу:

  • Незважаючи на те, що остання версія фактично відмовлена, Objective-C 2.0 фактично починає все більше прив’язуватися до деяких основних класів / протоколів основи, а це означає, що між мовними особливостями та основою існує невід'ємний зв'язок, NSFastEnumeration, що мені спадає на думку , яка необхідна для належного реагування об'єктів на циклі. Це означає, що між мовою та платформою зростає зв’язок.
  • Практично немає альтернативи какао. А какао в свою чергу починає залежати від дедалі більшої кількості функцій OSX. Хоча технічно, у вас може бути реалізація Objective-C, запущена на будь-якій ОС з будь-яким основним каркасом, останніх речей там не дуже багато для будь-якої іншої платформи.

Як і зараз, Apple має повний контроль над Objective-C і керує мовою відповідно до своїх потреб, в той час як на цій планеті немає організації, яка зацікавлена ​​в запуску Objective-C на пристрої, який не є Apple, який був би достатньо великим, щоб забезпечити стандартна бібліотека та інструментарій для початку, що навіть може віддалено конкурувати з екосистемами, представленими .NET / Mono, C ++ або Java.


3
Там GNUStep. Вони намагаються йти в ногу з Apple, хоча я деякий час не перевіряв, наскільки добре у них справи.
Пер Йоханссон

1
А ще є Кокотрон.
ysdx

1
Після написання цієї відповіді реально нічого не вдалося запустити Objective-C 2.0 на платформі, що не належить Apple. У будь-якому випадку, після цього було докладено багато зусиль, і тепер ми можемо очікувати, що запустити Objective-C 2.0 на FreeBSD за допомогою GNUstep досить гладко.
Eonil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.