Задать вопрос
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    я не сказал ААА движки, я сказал ААА игры

    Вы что то подразумеваете, но наружу своей головы это не выдаете.

    Спустя не первый день беседы наконец-то прозвучало:

    Движком для вас является движок для десктопа (не для мобилок, не для веба) класса "3D-шутер от первого лица" класса ААА.

    А теперь вернемся в ваш исходный вопрос:

    Доброго времени суток!
    Вопрос довольно необычный и может показаться вам странным(да что уж там, он мне кажется странным), но я все же попробую.
    Хотелось бы подробнее узнать о различиях во взаимодействии с железом при создании движка и при системном программировании.
    Интересны обе области.
    Также хотелось бы узнать какое из направлений требует бо́льших знаний и навыков (это меня ни в коем случае не отталкивает, даже наоборот).
    Ну и конкретно по геймдеву. Какое место при создании тех же движков занимает язык Си?
    Вопрос конечно тот ещё, но буду рад если кто-то примет его и ответит;)
    Заранее благодарю!


    Ну и где тут про десктоп и "3D-шутер от первого лица" - это только вам очевидно, что вы это подразумеваете.

    Если вы хотите, чтобы люди вам понимали - выражайтесь исчерпывающе.
    Причем - пишите это.

    То, что находится у вас в голове - никто не знает.
    Телепатия вряд ли существует.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    я не сказал ААА движки, я сказал ААА игры.

    Он этого мой ответ не изменился.
    ААА - это степень качества, уровень технического совершенства (и игры и её движка), а вовсе не разновидность игр.

    Я привел в пример именно ААА, так как именно такие проекты наиболее требовательны к движкам(если они разрабатываются на них). Серия игр Battlefield - ААА игры, написаны на движке frostbyte, который в свою очередь написан на плюсах и в небольшой степени на шарпе.


    Качество, степень проработки игры - это и есть ААА
    А что классом игр в вашем примере является "3D шутер от первого лица".

    3D шутеры могут быть и AAA уровня и пороще.

    Игры уровня качества ААА могут быть как 3D-шутеры, так и стратегии и пр. и пр.
    И это все основано на принципиально разных движках.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    Мне интересна разработка движков для разработки ААА игр.


    ААА - это степень тщательности проработки игры, а вовсе не тип движка.

    Старкрафт или League of Legends вполне себе игры класса ААА.
    Но упомянутые Unreal Engine и CryEngine для них не подходит.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,

    Какое место при создании тех же движков занимает язык Си?


    да мне плевать на язык. Я выбрал С/С++ по определенным параметрам, но я не говорю о том, что они лучшие.


    Полагаю, вам просто нужно подтверждение ваших мыслей.

    Извините, что не могу подтвердить ваши предположения.

    Никакого особого места С/С++ не занимают.

    Просто одни из многих (да, одни из основных, но не единственные) инструментов - не более того.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    да мне плевать на язык.

    Вот уже правильный подход.

    Rust существует с 2006 года и я пока что не видел ни одного движка

    Все еще будет.
    Стабильным он стал года 2-3 назад.
    А теперь сравните с датой появления упомянутых вами движков.
    15-20 лет vs 2-3.

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


    Ну то есть термин "движок" в вашем понимании относится только к движкам, созданным изначально для 3D-шутеров?
    Дело в том, что подобные движки очень сложны и очень дороги.
    Новые качественные движки этого класса появляются очень редко.
    "Аркадный" - сделать проще, вот потому они уже и появились.
    А для 3D-шутера/и т.п. - все еще в будущем.
    15-20 лет что существуют современные развитые движки для 3D-шутеров против 2-3 существования стабильного Rust или 5-6 лет существования стабильного Go - это ерунда, а не срок.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,

    Скажем, в случае с web или Android - места С/С++ там практически нет.
    В случае web - нет вообще.


    Да как же вы не поймете...
    Мне не интересна тема разработки игры, мне интересна разработка движка, а изложенное вами - очевидно.


    Пожалуйста, объясните каким именно техническим образом вы собираетесь разрабатывать движок под игру браузерную, используя C/C++ ?

    Я вам про то толкую, что для ряда платформ применение С/С++ невозможно технически.
    От слова "никак".
    На сегодня никак невозможно разработать движок под браузерную игру на С/С++
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    В любом случае три самых популярных движка а именно Unity, UE и CryEngine написаны на С++.

    Просто год их создания посмотрите. Вы тогда уже существовали? А они - да.
    В движке Unreal до сих пор есть кусочки кода с прошлого века!

    С тех пор утекло много воды.
    Пусть С++ не самый эффективный язык, но переделывать уже существующий движок на другой язык - это страшно дорого. Эффективность от другого языка программирования не скомпенсирует стоимости переезда.

    Только потому они до сих пор и используют C++. Но на сегодня это уже не лучший выбор. И не единственный выбор.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    Вы далеко уходите от темы и навязываете мне то, что я вообще не хотел видеть в ответах на мой вопрос

    Вы просто сложили у себя в голове другой ответ и вам просто нужно подтверждение вашего заключения от других людей.

    Я пишу, что С/С++ - уже не нужен. Но вы на него нацелились.

    Это не проблема.
    Ведь неважно, по большому счету - а что вы будете изучать и что будете использовать.
    Программисту совершенно нормально знать несколько языков программирования.

    Трудно изучить только первый.
    Просто потому что вместе с ним нужно изучать концепции, паттерны, принципы и т.п.

    Потом пойдет легче и выбор языка не будет для вас краеугольным камнем.
  • Библиотека, которая поможет понять, что "ответы" и "OtBETЫ" - это одно и тоже?

    @nrgian
    babbert,
    "нужно много писать алиасов букв" - `а` ещё есть английская, и из разных алфавитов, их очень много.

    conv["t"] = "т"
    conv["@"] = "а"
    conv["a"] = "а"
    conv["ἄ"] = "а"

    Все это тут прописываете. Там не много - строк 30 с разными буквами, навскидку.
    Либа для этого не нужна.

    из разных алфавитов

    Этих алфавитов не много - всего 3. Кириллица, латиница, греческий.
    Вряд ли вы девангари и пр. экзотику сумеете сюда приплести.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    Вы как-то слишком серьезно подходите к языку программирования.
    Это нормально на начальном этапе, я сам был таким.

    Вам кажется - что выучите не тот и "пиши-пропало"?
    Это не так.

    Трудно выучить не язык программирования, а парадигмы, паттерны, шаблоны, концепции.
    А они инварианты - из языка в язык повторяются.

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

    Очень трудно выучить только первый язык программирования.
    А скажем третий - вы выучите всего-то за неделю, если с предыдущими 2-мя действительно уже хорошо освоились.

    Программисту вполне естественно уметь работать с 2-3 языками одновременно.
    Ну а за всю профессиональную жизнь - вообще речь может идти о десятках языков.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    И почему вы постоянно отходите от темы? Я не спрашиваю сколько будет пилиться движок или сколько это будет стоить. Если вы не можете нормально ответить на поставленный вопрос, но вместо этого в другие дебри уходите, то лучше вообще не отвечайте.


    Все строго и по делу.

    Дебри? Лол!
    Ничего такого сверхсложного я не рассказал вам. Это все очевидные и лежащие на поверхности вещи.

    Дело только в том, что вы не можете понять ответ.

    Еще раз:

    С/С++ не какой либо волшебный язык, лучше всего пригодный для движков игр.
    Когда-то исторически сложилось, что он чаще всего использовался для определенного класса игр.

    Раньше - да. Но не более того. Сейчас уже всё иначе:

    1. На сегодня есть попросту несовместимые с ним платформы - браузеры.
    2. Есть платформы, где невозможно полностью полагаться на С/С++ как бы этого не хотелось - Android.
    3. Есть языки программирования, что лишены недостатков С/С++ при сохранении высочайшей производительности - Rust.
    4. На сегодня большая часть ресурсоемких вычислений реализуется в железе 3D и PhysX и драйвера под них уже давно написаны. А эта часть никак не зависит от вашего движка и его языка программирования.

    5. Мощности железа подросли, качество компиляторов, качество JIT, качество сборщиков мусора - выросло многократно. И написав движок на C или Go или Kotlin вы попросту не заметите разницы в прозводительности


    Но если сегодня писать самому программную реализацию 3D, навроде Mesa, пусть даже это на сегодня уже бессмысленно - то да, имеет смысл использовать C или Rust.

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

    А остальную часть движка делать на чем-то более удобном для программирования, например, Go.

    Дело в том, что начиная с определенного момента сложность движка будет уже очень велика, потому усилия по разработке со все возрастающей сложностью сведут на нет всю оптимизацию.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    Вы путаете понятия создания игры и создания движка. Это две совершенно разные вещи.

    Разумеется.
    Но ничто не мешает использовать как один и тот же и так и разные языки программирования.
    Всё зависит от ситуации.

    Скажем, в случае с web или Android - места С/С++ там практически нет.
    В случае web - нет вообще.
    В случае Android - можно только частично использовать C/C++ как бы вы этого не желали. Это технологическая особенность платформы Android.


    К части о движке js почитайте данную статейку https://tproger.ru/translations/js-and-c-fps/.

    JS единственный инструмент (ну и то, что в него компилируется/транспилируется - TypeScript, Dart) пригодный для создания игра под браузер. Так исторически сложилось.

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

    Но на веб-платформе у вас и нет пока альтернатив.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    это связано с их быстротой и гибкостью.


    Лол, шта?

    Pascal ровно такой же быстрый и ровно такой же гибкий.
    Rust ровно такой же быстрый и ровно такой же гибкий.

    Это связано с тем, что так исторически сложилось на тот момент.
    Rust еще не было.
    А большинство библиотек под высокопроизводительные вычисления писались на Фортран и C. Фортран, очевидно, не подходит. Остается С.

    Котлин это высокоуровневый яп и соответственно очень неповоротливый для таких целей.

    С/С++ тоже высокоуровневый язык программирования.
    Низкоуровневым называет только ассемблер (и он, кстати, не язык программирования, а просто "ассемблер").

    Более высокоуровневым по сравнению с C/C++/Kotlin можно назвать разве что SQL.
    А C/C++/Kotlin работают на примерно одном и том же уровне абстракции.

    Вы, очевидно, просто повторяете чьи то ошибочные слова, но не понимаете в чем там суть т.н. высокоуровневости.

    А разница между ними вот в чем:

    1) Существуют языки с автоматическим управлением сборкой мусора. И без такового.
    Если вам нужно глубоко заоптимизировать производительность - ручное управление памятью предпочтительнее. А ранее, во времена расцвета С/С++, это вообще был единственный производительный вариант. С тем расцвет их и связан.

    Но и вероятность программисту ошибиться тут намного выше, следовательно, себестоимость отладки значительно выше. Поэтому в последнее время применимость С/С++, который позволяет запросто отстрелить себе ногу - все сокращается и сокращается.

    Появились очень эффективные сборщики мусора (скажем в Java и Go).
    Появились языки, без сборщиков мусора и без ручного управления (скажем, Rust).

    2) Высокоуровневостью вы, видимо, называете отсутствие JVM/NET. Только это не имеет отношения к уровню абстракции языка программирования.

    И, опять таки, по вопросам производительности тоже больше нет ничего страшного в JVM/NET. Ибо JIT в настоящее время очень эффективен. И даже в ряде случае программа, использующая JIT может быть даже быстрее просто скомпилированной в машинные коды программы.

    Ну и опять же есть Go и Rust, что компилируются сразу в машинные коды.

    Поэтому в C/C++ в настоящее время нет такой исключительной необходимости, как 20 лет назад.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    Наверняка такие есть, вот только популярность и эффективность под большим вопросом.
    В любом случае три самых популярных движка а именно Unity, UE и CryEngine написаны на С++.


    Это не связано с неким "волшебным" свойством того или иного языка программирования.
    Это связано с тем, что когда эти движки закладывались очень и очень много лет назад - когда альтернатив-то С/C++ особо и не было.

    И да, их намного больше. Просто, очевидно, что вы выбрали определенный класс игр.
    Скажем, движков для платформеров куда как больше. Есть движки и для текстовых игр. И т.п и т.д.
    Но вы их попросту не рассматривайте.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    То-есть ядро не входит в движок?

    Ядро операционной системы - нет конечно.
    Оно не входит в игровой движок.
    А ядро игрового движка - это иное.

    Впрочем, возможно, из каких то соображений, вы напишете в игровом движке свой механизм распределения памяти (поверх механизма распределения памяти операционной системы, конечно же).

    Но точно так же из каких то соображений вы можете написать и свой механизм распределения памяти в драйвере операционной системы.

    Все от задач зависит.

    В современных решениях это делают всё реже и реже.

    А очень давно, пожалуй, еще лет 30 назад - это никого бы не удивило, да.
    Но сейчас - уже навряд ли.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    возможно с точки зрения синтаксиса эти два вида разработки и похожи, вот только уровни абстракции отличаются.А с уровнем абстракции меняются и различные приемы вроде работы с памятью и т.д.


    Да практически нет.
    Механизмы распределения памяти - это часть ядра, оно уже написано до вас.
    Ну какая принципиальная разница - вызываете вы функцию malloc() в программе, являющейся движком игровым, или kmalloc() в программном коде драйвера?

    Другое дело, что новые игровые движки создаются отнюдь не на С, а на языках программирования, где вообще нет необходимости в ручном управления памятью.

    Но для программиста квалифицированного - это совершенно не принципиально.
    Это просто навык, что нарабатывается в очередном языке программирования, если знаешь другой язык, за считанные дни (ну для начинающего конечно скорее о месяцах идет речь).
    По уму, полезно уметь работать и так и так.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    Я имею ввиду не создание игр, а создание конкретно движка.

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

    Движок для Андроид целесообразно писать на Kotlin/Java.

    Движок для игр в вебе - целесообразно писать на JavaScript (варианты - на TypeScript, на Dart).

    "Особая" роль С/С++ связана с тем, что:

    1) Движки пилятся очень долго. Основы многих из них заложены и 20 лет назад - например Unreal Engine. Никто не мечтает это всё переписать с нуля. Это банально очень дорого.

    2) Адекватных альтернатив у С/С++ лет 20 назад было раз-два и обчелся (например, тогда еще движки на Pascal создавались). Современные движки, что будут написаны с нуля, скорее будут использовать Rust, C#, Kotlin, Go, чем С/С++

    3) Ранее не было таких платформ как web и Android, для которых C/C++ применимы с большими ограничениями.
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    @nrgian
    Dmitriy419,
    я знаю что представленные направления различаются по требуемым знаниям.Но конкретно каким не особо имею представление.


    Не по требованиям, а по навыкам. Ну а навыки прокачиваются годами.

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

    @nrgian
    Dmitriy419,
    Игры в unity пишут на c#, но сам движок написан на плюсах.


    Там смесь:

    The Unity runtime is written in C/C++. This runtime is used in any build you create using the editor - for webplayers and plugins it is installed separate from your build, whereas it is included in it for stand-alones and other platforms such as iPhone and Wii.

    The editor is built on the Unity runtime and additionally includes editor-specific C/C++ binaries.

    Wrapped around the Unity core is a layer which allows for .net access to core functionality. This layer is used for user scripting and for most of the editor UI.


    Ядро движка написано на C++, но одно только ядро - это еще не движок.
    А C# - это API, которое собственно и превращает ядро в универсальный движок.

    Аналогия:
    Как драйвера и API ОС.
    Имея драйвера (ядро Unity), но не имея API ОС - вы не сможете ни одной буквы вывести на экране компьютера.

    С другой стороны - без драйверов тоже никуда.

    Движок в аналогии - это полная ОС.
    Ну а игра - это уже прикладная программа в ОС.