Какая лучшая альтернатива C++ для программирования графики в реальном времени?

C++ просто отнимает у меня слишком много времени, заставляя меня управлять собственной памятью на микроуровне, заставляя меня слишком много печатать (привет std::vector<Thingy>::const_iterator it = lotsOfThingys.begin()) и утомляя меня долгим временем компиляции. Какая лучшая альтернатива серьезному программированию графики в реальном времени? Сборка мусора является обязательной (как и возможность избежать ее использования при необходимости), а скорость должна быть конкурентоспособной с C++. Разумный рассказ о доступе к C-библиотекам также необходим.

(Полное раскрытие: у меня есть свой ответ на этот вопрос, но мне интересно узнать, что другие сочли хорошими альтернативами C++ для работы с графикой в ​​реальном времени.)

Редактировать: Спасибо всем за вдумчивые ответы. Учитывая, что на этот вопрос действительно нет «правильного» ответа, я не буду выбирать какой-либо конкретный ответ. Кроме того, я бы просто выбрал язык, который мне нравится, в качестве альтернативы C++, что было бы нечестно.

Почему бы вам не опубликовать свой ответ и не посмотреть, как за него проголосуют люди?

Carl Seleborg 16.09.2008 18:32

Возможные ответы на этот вопрос субъективны. Если вы ищете «лучших», возможно, стоит перечислить, какие, по вашему мнению, альтернативы, а затем позволить другим проголосовать за них.

Scott Saad 16.09.2008 19:00

Длительное время компиляции означает больше времени для потрясающих офисных боев на мечах.

Flame 16.09.2008 19:19

Это почти -1 за такое поддразнивание! Давай, опубликуй свой ответ.

unwind 22.04.2009 12:18

время компиляции и время кодирования не связаны с производительностью во время выполнения. Все хорошие 3D-приложения (в реальном времени или нет) основаны на C / C++ с внутренним управлением памятью, пользовательской оптимизацией (для конкретной области) и хорошим знанием алгоритмических и графических движков (openGL или DirectX).

Max 13.05.2009 15:34

Учитывая, что Баксиссимо ответил на изрядное количество вопросов о D, я предполагаю, что это его альтернатива. Он также довольно хорошо соответствует требованиям (сборка мусора, которой можно избежать, когда это необходимо, скорость, сопоставимая с C++, "разумная история" для доступа к библиотекам C.

Martin B 05.10.2009 15:25

Стоит отметить, что многие до сих пор используют C для программирования графики в реальном времени :)

zebrabox 23.12.2009 13:37

Использование современного компилятора C++ позволяет делать следующее: auto it = lotOfThingys.begin ();

Matthieu N. 03.01.2010 07:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
33
8
25 623
30

Ответы 30

C# - хороший язык, соответствующий вашим требованиям, и он определенно подходит для графики, благодаря усилиям Microsoft по предоставлению ему отличных инструментов и библиотек, таких как Visual Studio и XNA.

+1 Это великолепная платформа, на ней можно разрабатывать бесплатно (с экспресс-выпусками VS), а C# отлично подходит для быстрого решения задач. К сожалению, ему не хватает мощности, необходимой мне для написания профессиональных игр (в системе неявно заложены небольшие накладные расходы, на С ++ вы можете кодировать, плюс вы можете получить доступ к таким вещам, как команды SIMD в С ++)

Grant Peters 22.04.2009 12:50

Однако C#, возможно, не лучший вариант: «Разумная история для доступа к библиотекам C также необходима». У вас также могут быть проблемы за пределами мира Windows.

Jem 22.04.2009 15:38

Благодаря Mono, C# довольно портативен. А доступ к библиотекам C можно легко сделать с помощью P / Invoke.

el.pescado 23.12.2009 13:33

Вы можете разрабатывать на нем бесплатно без любой версии VS, большое вам спасибо.

harpo 18.06.2010 21:02

А что насчет D Язык программирования?

Некоторые ссылки, запрошенные в комментарии:

Win32 Api

Заброшенный (Мультимедийная библиотека)

Есть ли способ теперь использовать Win32 API, OpenGL и D3d через D? Последний раз, когда я смотрел (некоторое время назад), была только частичная поддержка (потому что моя игровая база кода все еще на C++)

Fire Lancer 16.09.2008 18:36

Нет настоящих альтернатив большим играм класса AAA, особенно на консолях. Для заголовков меньшего размера подойдет C#.

Наверное, это правда о крупных играх ААА. Мало кто из деловых людей захочет рискнуть всем на языке, не являющемся мейнстримом. На самом деле C# подойдет, только если вы ориентируетесь только на Windows, не так ли?

Baxissimo 16.09.2008 19:08

Есть игры ААА, написанные на других языках. Например, Jak and Daxter был написан на Лиспе.

Nathan 13.01.2009 22:38

C# также может работать на Linux и Mac, но я не думаю, что у них еще есть какие-либо 3D-библиотеки. (Хотя я бы не удивился, если бы для Linux был OpenGL)

Grant Peters 22.04.2009 12:54

Боюсь, что сборка мусора в реальном времени + не очень хорошо сочетается.

Немного сложно дать какие-либо гарантии ответа в реальном времени, если сборщик мусора может вмешаться в любое время и потратить неопределенный объем обработки ...

Вот почему я сказал «как и возможность избежать его использования при необходимости». Если вы можете отключить сбор при необходимости, все будет в порядке. Также обратите внимание, что есть разница между программным режимом графики в реальном времени и жестким режимом реального времени «систем реального времени».

Baxissimo 16.09.2008 19:04

Это уже не совсем верно для современных реализаций сборки мусора. Несмотря на то, что коммерческие игры все еще в меньшинстве, они пишутся на C#.

NM. 30.10.2008 00:47

Конечно, коммерческие игры, написанные на C#, возможны. Но могут быть не критичными в реальном времени.

Jem 22.04.2009 15:43

Это зависит от определения реального времени. Но сборка мусора на самом деле не требует длительных пауз; это деталь реализации. Лучшие реализации могут также избежать считывания всего в память на этапе отметки (чтение всего в память разрушает любое улучшение производительности, которое вы надеялись получить из своего кеша).

Max Lybbert 04.01.2010 08:16

Minecraft написан на Java (как при использовании сборки мусора), и хотя время от времени наблюдается небольшое заикание, которое может быть связано с gc, это не мешает игровому процессу. Возможно, этого недостаточно для действительно быстрого и красивого FPS.

KarlP 02.09.2012 01:50

Жесткое реальное время также возможно с GC. youtube.com/watch?v=xH1yUXd9krU: этот робот работает под управлением Java в реальном времени, а сборщик мусора был разработан совместно с людьми из моего университета.

evading 11.11.2012 21:12

Возможно гибридный подход. Python и C++ составляют хорошую комбинацию (см., Например, PyGame).

Есть одна известная MMORPG, которая пошла по этому пути - Eve Online? Это был даже Stackless Python. Не основная линия. Я забыл об этом, я думаю, это в значительной степени название AAA. Может быть, это не подходит под определение yrp.

Baxissimo 16.09.2008 19:34

Я считаю, что Eve Online использует Stackless Python для своего серверного кода. Я сомневаюсь, что 3D-код реального времени написан на Python.

Nathan 16.09.2008 20:45

C# здесь хороший ответ - у него хорошая сборка мусора (хотя вам придется немного профилировать его - чтобы изменить способ обработки вещей теперь, когда вся обработка памяти находится вне ваших рук), это просто использовать, есть много примеров и хорошо документирован. В 3D-отделе он обеспечивает полную поддержку шейдеров и эффектов, так что - это мой выбор.

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

Есть ли у вас ссылки, в которых говорится, что «C# не так эффективен, как C++»? Потому что большая часть того, что я видел, говорит о том, что разница незначительна, и я даже не уверен, какой из них быстрее. См. blogs.msdn.com/oldnewthing/archive/2005/05/10/415991.aspx Раймонда Чена и дуэль blogs.msdn.com/ricom/archive/2005/05/10/… Рико Мариани по оптимизации.

erikkallen 23.12.2009 15:03

Как и Джеймс (Хопкин), для меня гибридный подход - лучшее решение. Python и C++ - хороший выбор, но другие стили, такие как C# / C++, работают. Все зависит от вашего графического контекста. Для игр XNA - хорошая платформа (ограниченная Win32), в этом случае C# / C++ - лучшее решение. Для научной визуализации допускается Python / C++ (например, привязки vtk в python). Для мобильной игры может работать JAVA / C++ ...

Иногда, выйдя за пределы проторенной дороги, можно найти настоящую жемчужину. Возможно, вы захотите рассмотреть PureBasic (не позволяйте названию вводить вас в заблуждение). Вот некоторые подробности:

Возможности PureBasic

  • Исполняемые файлы машинного кода (сборки) (FASM)
    • Встроенная поддержка сборки
    • Не требуется время выполнения (не требуются библиотеки DLL и т. д.) 1 исполняемый файл
    • Крошечные исполняемые файлы (такие же маленькие или меньшие / такие же быстрые или быстрее, чем C++ без среды выполнения)
    • Вы можете писать библиотеки DLL
    • Поддержка многопоточности
    • Полная поддержка API ОС
  • Мультиплатформенная поддержка
    • Windows 95-2003
    • Linux
    • Mac OS X
    • Амига
  • Разработка 2D и 3D игр
    • DirectX
    • ОГРЭ
  • Щедрое лицензирование
    • Недорого (79 евро или около 112 долларов)
    • Пожизненная лицензия (включая все будущие обновления и версии)
    • Единая цена для всех платформ
  • Поддержка внешней библиотеки
    • Сторонние библиотеки DLL
    • Пользовательские библиотеки
  • Онлайн поддержка
    • Адаптивная команда разработчиков во главе с создателем
    • Он-лайн форум
      • Единое место для ответов (не нужно искать в Интернете)
      • Огромное количество примеров кода (попробуйте код в IE с IEtool)
      • Быстрые ответы на вопросы
  • Бонусное обучение (альтернатива изучению C++)
    • API
    • Структуры
    • Интерфейсы
    • Указатели

Посетите онлайн-форум, чтобы получить лучшее представление о PureBasic (http://www.purebasic.fr/english/index.php) или главный сайт: www.purebasic.com

Если ваша цель - ПК, я думаю, вы можете попробовать C# или встроить Lua в свое приложение C++ и запускать сценарии для «высокоуровневых» вещей. Однако, если ваша цель - консоль, вы должен управляете своей собственной памятью!

Правда, используя XNA. Но если вы предложите что-то другое, кроме C / C++ / Asm, то вы наверняка получите пустой взгляд, если не откровенный гнев, от AAA-компаний и большинства «профессиональных» компаний.

R Caloca 26.04.2009 05:08

Некоторые варианты Lisp, которые компилируются в машинный код, могут быть почти такими же быстрыми, как C++ для такого рода программирования. Команда Игривый щенок создала версию Lisp под названием Игровой ассемблер Lisp, которую они использовали для создания нескольких названий AAA, включая серии Jak и Daxter. Двумя основными препятствиями на пути использования Lisp-подхода в игровой индустрии будут укоренившийся характер разработки на C / C++ (как инструменты, так и человеческие ресурсы вложены в C / C++), а также сложность поиска талантливых инженеров, которые являются звездами в как область программирования игр, так и язык Лисп.

Многие команды программирования в отрасли переходят к гибридному подходу, при котором код реального времени, особенно графический и физический код, написан на C или C++, а игровая логика выполняется на языке сценариев более высокого уровня, который доступен для и редактируется как программистами, так и непрограммистами. Lua и Python оба популярны для написания сценариев более высокого уровня.

Это моя реплика снова подключить lispbuilder-sdl ... code.google.com/p/lispbuilder/wiki/LispbuilderSDL

justinhj 22.04.2009 12:29

Я должен отметить, что GOAL не был стандартным Lisp; Naughty Dog написала свой компилятор с нуля, и в нем было много функций, которые были бы совершенно чужды типичному программисту на Common Lisp. Например, это было крайне необходимо, в значительной степени полагаясь на побочные эффекты, и предлагало прозрачную интеграцию со встроенной сборкой, так что вещи, которые выглядели как формы Lisp, часто на самом деле были кодами операций.

Crashworks 05.10.2009 15:17

Я надеюсь в ближайшее время сделать некоторые игры на лиспе, но, к сожалению, найти информацию о разработке игр на лиспе довольно легко.

Isaiah 29.05.2010 21:07

Objective-C выглядит как хорошее соответствие вашим требованиям (последняя версия с дополнительным GC), хотя на мой вкус он слишком динамичен и похож на Smalltalk.

Я думаю, XNA - ваш лучший выбор. Благодаря поддержке платформы .NET вы можете создать платформу для Windows или Xbox 360, просто изменив настройку в Game Studio. Лучше всего, что все инструменты бесплатны!

Если вы решите использовать XNA, вы можете легко начать работу с их кратким руководством. Краткое руководство по XNA

До сих пор для меня это был полезный и забавный опыт, а также хороший перерыв в управлении памятью в C++.

Я не согласен с вашей предпосылкой. При осторожном и правильном использовании C++ - отличный язык, особенно для такой области, как графика в реальном времени, где скорость имеет решающее значение.

Управление памятью станет простым, если вы хорошо спроектируете свою систему и будете использовать контейнеры stl и интеллектуальные указатели.

std::vector::const_iterator it = lotsOfThingys.begin()) станет намного короче, если использовать

using namespace std;
typedef vector::const_iterator ThingyConstIter;

И вы можете значительно сократить время компиляции, разбив вашу систему на достаточно автономные модули, используя предварительно скомпилированные заголовки или используя идиому PIMPL.

предварительно скомпилированные заголовки работают и для gcc

Tom 03.01.2010 06:20

Garbage collection is a must (as is the ability to avoid its use when necessary)

Вы не можете временно отключить сборщик мусора. Тогда вам понадобится детерминированный сборщик мусора. Но у такого зверя есть и хит производительности. Я думаю, что BEA JRockit - такой зверь, и тогда вам следует придерживаться Java.

Просто чтобы прокомментировать ваш пример; typedef - ваш друг ...

typedef std::vector<Thingy> Thingys;
Thingys::const_iterator it = lotsOfThingys.begin()

Я бы сказал, что язык программирования D - хороший вариант. Вы можете связываться с объектными файлами C и взаимодействовать с кодом C++ через библиотеки C. D имеет сборку мусора, встроенную сборку, разработчики игр создали привязки к библиотекам SDL и OpenGL, а также активно работают над новыми API-интерфейсами разработки игр. Я люблю D. Жаль, что моя работа не требует ее использования. :(

Я бы не стал отказываться от C++. Фактически, я бы подумал о добавлении Boost в вашу библиотеку C++, что сделает язык намного более удобным. Ваш пример станет:

BOOST_FOREACH( Thingy& t, lostOfThingys ) {
    // do something with 't'
}

В Boost есть множество инструментов, которые помогают сделать C++ лучшим языком.

Каждый раз, когда я пытался использовать нетривиальную библиотеку Boost, я всегда разочаровывался. Boost shared_ptr - это единственное, что я пробовал из Boost, который действительно делал то, что я хотел, делал это хорошо, и не было ужасно запутанным или каким-то образом ограничивающим. YMMV.

Baxissimo 17.09.2008 03:53

Блин ... Ненависть, долгое время компиляции, запутанность, и я обычно могу написать что-то гораздо более удобное для использования довольно быстро, когда мне это нужно (и тестовые примеры убедитесь, что я исправлю ошибки). Я профессиональный разработчик игр и люблю C++ для написания игр (вся эта сырая, низкоуровневая игра!), Хотя, если это не профессиональная игра, я обычно просто выбираю C# и XNA.

Grant Peters 22.04.2009 12:48

Придется второй Грант по этому поводу. Boost слишком раздут, чтобы быть полезным в целом. В итоге я реализовал небольшое разумное подмножество Boost и STL и использовал его в качестве набора базовых библиотек для разработки моей команды.

Tarydon 04.01.2010 08:19

Не уверен, что FOREACH - лучший аргумент в пользу Boost, см., Например, BOOST_FOREACH и шаблоны без typedef о том, как он не работает для вложенных структур данных.

js. 26.07.2013 16:22

Я полностью согласен с упоминанием C# для программирования графики. У него есть небольшой недостаток, заключающийся в том, что он является управляемым языком и позволяет сборщику мусора свободно управлять вашим приложением - это самоубийство по частоте кадров через некоторое время, но с некоторыми относительно интеллектуальными выделениями пула, сделанными в начале жизни программы, можно избежать любых реальных проблем.

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

Однако XNA - не единственная альтернатива. Существует также SlimDX, который постоянно разрабатывается как средство предоставления простой оболочки DirectX аналогично Managed DirectX (который, как я полагаю, был прекращен Microsoft в пользу XNA). Оба достойны исследования: http://code.google.com/p/slimdx/

Если вы ориентируетесь на Windows, C++ / CLI («управляемый» диалект C++ от Microsoft .NET) представляет собой интересную возможность, особенно если вы хотите использовать свой опыт работы с C++. Вы можете легко смешивать собственный код (например, вызовы библиотек в стиле C) с управляемым кодом .NET и пользоваться преимуществами .NET GC и библиотек.

Что касается опасений по поводу того, что сборщик мусора влияет на производительность «в реальном времени», я думаю, что они, как правило, преувеличены. Многопоколенческий .NET GC очень хорош в том, что никогда не тратит много времени на сборку, если только вы не находитесь в какой-то критической ситуации с нехваткой памяти. Я пишу код .NET, который взаимодействует с биржами электронных деривативов, где временные задержки == много $$$, и у нас никогда не было проблем, связанных с GC. Несколько миллисекунд - это долгий срок для сборщика мусора, но не для человека, взаимодействующего с частью программного обеспечения, даже с игрой «в реальном времени». Если вам действительно нужна настоящая производительность «в реальном времени» (для медицинских устройств, управления процессами и т. д.), Вы все равно не сможете использовать Windows - это просто не ОС реального времени.

Не забудьте упомянуть о новом «автоматическом» использовании:

auto it = lotsOfThingys.begin(); // Let the compiler figure it out.
auto it2 = lotsOfFoos.begin();
if (it==it2) // It's still strongly typed; a Thingy iter is not a Foo iter.

Как это ответ на вопрос ОП?

Pavel Matuska 23.05.2013 20:09

@pavel: решает проблему "слишком много печатать" напрямую, а память - косвенно.

MSalters 26.05.2013 21:54

Я полагаю, что многие игровые движки могут удовлетворить ваши потребности. Например, с помощью SDL или Cairo, если требуется переносимость. Многие языки сценариев (в основном поставляемые с простым синтаксисом и сборкой мусора) имеют привязку к этим холстам. Другой альтернативой может быть вспышка.

Я просто укажу Обработка, то есть язык программирования и среда с открытым исходным кодом для людей, которые хотят программировать изображения, анимацию и взаимодействия.

Фактически, это тонкая оболочка вокруг Java, которая делает ее похожей на язык сценариев: у нее есть (примитивная) IDE, когда вы можете набрать несколько строк кода и нажать «Выполнить», даже не сохраняя файл. Фактически он обертывает код вокруг класса и добавляет вызов main (), компилирует его и запускает в окне.

Многие используют его для выставок в реальном времени (виджея и тому подобное). Он обладает мощью и ограничениями Java, но добавляет из коробки ряд хороших оболочек (библиотек) для упрощения доступа к Java2D, OpenGL, SVG и т. д.

Каким-то образом он стал моделью простого графического языка: есть несколько приложений, пытающихся имитировать Processing на других языках, таких как Ruby, Scala или Python. Одной из самых впечатляющих является реализация JavaScript с использованием компонента canvas, реализованного в Firefox, Safari, Opera и т. д.

Не упускайте из виду независимые языки в своих поисках. Emergence BASIC от Ionic Wind Software имеет встроенный движок DirectX 9, поддерживает ООП и может легко взаимодействовать с библиотеками C.

http://www.ionicwind.com

Джеймс.

Как разработчик / исследователь / профессор приложений 3D VR в течение примерно 20 лет, я бы предположил, что альтернативы нет (кроме, возможно, C). Единственный способ уменьшить задержку и обеспечить взаимодействие в реальном времени - это оптимизированный скомпилированный язык (например, C или C++) с доступом к быстрой надежной библиотеке трехмерной графики, такой как OpenGL. Хотя я согласен, что приходится все кодировать - это фрустрация, но это также важно для производительности и оптимизации.

Но есть и другие языки, которые компилируются в собственный код. Язык программирования D развивается очень хорошо. Некоторые говорят, что OCaml великолепен. И т. Д. Кроме того, какой бы язык вы ни использовали для своего приложения, вы всегда будете делать вызовы нативным библиотекам нижнего уровня, таким как OpenGL, BLAS и т. д., Чтобы выполнять действительно тяжелую работу. Поэтому я не согласен с тем, что для получения необходимой производительности требуются C / C++. Но в зависимости от проекта они могут потребоваться по другим причинам.

Baxissimo 23.05.2009 21:29

Я очень успешно использовал C++ в качестве движка, причем приложение было написано на Lua сверху. JavaScript также очень практичен, теперь существует последнее поколение JS-движков на основе JIT (tracemonkey, V8 и т. д.).

Я думаю, что C++ еще какое-то время будет с нами; даже у Тима Суини на самом деле еще нет перешел на Haskell (pdf), AFAIK :-)

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

В зависимости от задачи вам может сойти с рук небольшой взлом DirectX. Тогда вы можете использовать .NET и Slimdx. Управляемые языки обычно быстрее программируются и легче отлаживать.

Возможно, вам нужен действительно хороший 3D-движок? Попробуйте Ogre3D или Irrlicht. Вам нужно качество коммерческого уровня (кто-то может поспорить, что Ogre3D предлагает это) - выбирайте Cryengine или Unreal. С Ogre3D и Irrlicht вы также можете использовать .NET, хотя порты не всегда актуальны, а плагины не так просто включать, как в версиях C++. Думаю, для Cryengine / Unrealengine у ​​вас не будет реального выбора.

Вам нужно более портативное? OpenGL для спасения - хотя вам может понадобиться некоторая оболочка (например, SDL).

Вам также нужен графический интерфейс? Возможно, wxWidgets, QT.

У вас уже есть набор инструментов? Ваши библиотеки должны уметь обрабатывать форматы файлов.

Хотите написать библиотеку? C / C++ может быть решением, поскольку большая часть мира может использовать библиотеки C / C++. Возможно с использованием COM?

Есть еще много проектов / библиотек, которые я не упомянул (XNA, Boost, ...), и если вы хотите создать какую-то программу, которая не только отображает 3D-графику, у вас могут быть и другие потребности (Input, Sound , Сеть, AI, База данных, GUI, ...)

Подводя итог: язык программирования - это инструмент для достижения цели. Это нужно рассматривать в контексте поставленной задачи. Задача имеет свои собственные потребности, и эти потребности могут выбрать язык для вас (например, вам нужна определенная библиотека, чтобы получить функцию, которая требует много времени для программирования, и вы можете получить доступ к библиотеке только с языком X).

Если вам нужен универсальный вариант: попробуйте C++ / CLI (возможно, в сочетании с C# для упрощения синтаксиса).

Хороший вопрос. Что касается `` заставлять меня слишком много печатать '', C++ 0x, похоже, решает большинство из них. как уже упоминалось:

auto it = lotOfThingys.begin ()) // ... выводим тип, как в * ML VS2010beta уже реализует это.

Что касается управления памятью - для эффективности - вам нужно будет хорошо отслеживать распределение памяти, со сборкой мусора или без нее (например, создавать пулы памяти, иногда повторно использовать выделенный объект), так что в конечном итоге, является ли ваша среда мусором собраны или нет, имеет меньшее значение. Вам также придется явно вызвать gc (), чтобы память не фрагментировалась. Всегда важно иметь последовательные способы управления памятью. RAII - убийственная особенность C++ Другое дело, что память - это всего лишь один ресурс, вам все равно нужно отслеживать другие ресурсы с помощью GC, поэтому RIAA.

В любом случае, C# - хорошая альтернатива во многих отношениях, я считаю его очень хорошим языком, особенно возможность писать на нем код функционального стиля (симпатичный синтаксис лямбда ->, сопоставление / выбор синтаксиса LINQ и т.д.), таким образом возможность писать параллельный код; пока это все еще «стандартные фигурные скобки», когда они нужны вам (или вашим коллегам).

Я голосую за C++ 0x. Частичная поддержка уже доступна в gcc-4.3 + с использованием флага -std = C++ 0x.

Взгляните на объект Delphi / Pascal и некоторые примеры: http://www.delphigamer.com или http://glscene.cjb.net/

У меня хорошо работают Java и LWJGL (оболочка OpenGL). Если вам нужна дополнительная библиотека типов графа сцены, такая как Orge, взгляните на jMonkeyEngine, который мы использовали для создания приложения типа google earth (см. Www.skapeworld.com). Если вы разумно относитесь к созданию объектов, сборка мусора не проблема.

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

И вы также можете взглянуть на Haskell, если вы не знаете функциональную парадигму, этот язык будет выглядеть для вас странно, но это стоит потраченного вами времени. Тим Суини (EPIC Inc) рассматривает этот язык как альтернативу C++.

Будет ли «C» слишком очевидным ответом?

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