Является ли Objective C Подходящим Языком Для 3D-игр?

StackOverflow https://stackoverflow.com/questions/928925

  •  06-09-2019
  •  | 
  •  

Вопрос

Я вижу много споров о том, какой язык использовать для разработки 3D-игр в реальном времени, и общее мнение таково, что C или C ++ - единственные языки, которые могут обеспечить подходящую производительность для высокопроизводительных, системноемких 3D-игр.Я вижу, что многие люди говорят, что C #, Java или Python работают слишком медленно, особенно из-за сборки мусора.Как насчет Objective C?Есть ли в Objective C автоматическая сборка мусора?Что, кроме автоматической сборки мусора, делает язык "слишком медленным" или непригодным для 3D-игр?

Этот вопрос, вероятно, больше похож на "мысленный эксперимент", поскольку я сомневаюсь, что когда-либо смогу разработать игру, которая настолько ресурсоемка, что эти вопросы нужно решать, но, будучи программистом, я необъяснимо одержим производительностью, поэтому я все равно хотел бы знать, просто для собственного удовольствия.

Это было полезно?

Решение

В Objective-C 2.0 доступна сборка мусора в Mac OS X 10.5, но это необязательно - вы все равно можете компилировать приложения Objective-C без сборки мусора, если пожелаете.На других платформах (iPhone, Mac OS X до версии 10.5 и любых других) сборка мусора отсутствует, и вам приходится вручную управлять своей памятью.

Objective-C - это строгий надмножество C, так что вы можете закодировать обычный C в Objective-C, если хотите.Следовательно, нет причин не использовать Objective-C для игр, которые также не применимы к использованию C.Вы можете использовать дополнительные функции, предоставляемые Objective-C, так много или так мало, как вам захочется.

Другие советы

Единственное реальное замедление с Objective-C сам по себе это был бы механизм обмена сообщениями — и даже тогда, как правило, это компоненты фреймворка Cocoa, которые замедляют работу.Отправка сообщений Objective-C на самом деле не влияет на производительность это намного.

В любом случае, для большинства игр большая часть проблем с производительностью будет связана с графическим кодом:если вы делегируете графические материалы OpenGL, что до смешного быстро, то действительно не должно возникнуть проблем с использованием Objective-C для игр.Единственное другое место, где я вижу, что Objective-C или Cocoa создают узкие места, — это интенсивный физический код, и он, вероятно, в любом случае должен быть написан на чистом C / C ++.Однако все остальное на самом деле не должно иметь такого большого значения.

Честно говоря, я бы поспорил, что большинство игр для OS X в настоящее время написаны на Objective-C с использованием фреймворков Cocoa, причем чувствительный к производительности код написан на чистом C / C ++ (и с графическим кодом, использующим OpenGL).

Меня тоже интересует эта тема, и я нашел это http://wiki.gnustep.org/index.php/3DKit

Это выглядит довольно мертво, но теперь с clang / llvm 2.9 многие преимущества Objective-C 2 доступны в Linux, и было бы интересно иметь 3D API.

Objective-C не поддерживает автоматическую сборку мусора.Java имеет различные методы сборки мусора, и некоторые из них разработаны таким образом, чтобы быть совместимыми с играми, выполняя их постепенно через регулярные промежутки времени.Я был бы удивлен, если бы в C # или во всем остальном, где также есть сборка мусора, не было нескольких методов на выбор, некоторые из которых совместимы с играми.

Единственное, что приходит мне в голову, что могло бы сделать игру непригодной для 3D-игр, - это если бы она была интерпретирована и особенно медленно реализовывалась.Это не характерно ни для чего из того, что вы перечислили выше.

P.S.Чтобы ответить на ваш первоначальный вопрос, я почти уверен, что любой, у кого есть iPod Touch или iPhone, сможет сказать вам, что Objective-C определенно подходит для 3D-игр :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top