Что лучше c или javascript
Перейти к содержимому

Что лучше c или javascript

  • автор:

JavaScript vs. C++: создание одной и той же 3D-игры на обоих языках

Я написал один и тот же шутер от первого лица на JavaScript, а потом на C++. В этой статье опишу, как все это происходило.

Несколько лет назад, когда WebGL начал свое шествие по браузерам, у меня возникла идея — написать шутер от первого лица на JavaScript и HTML. Абсолютно безумная затея, но она сработала, и даже не очень лагала (попробуйте сами). В свободное время я понемногу модифицировал код, со временем игра обросла фичами и стала интересной.

JavaScript-версия: работает в браузере

JavaScript-версия: работает в браузере

Тем временем появился Electron (если кратко, инструмент, позволяющий соединить веб-приложение с браузером и запускать как нативное приложение). И я задумался: «Опа! Может, сделать настоящее нативное приложение из моей игры на WebGL? Засуну его в Electron, и дело в шляпе».

Я так и сделал. Получилось на удивление неплохо, настоящее приложение. Но результат работал не очень: хоть я и приложил много усилий, чтобы приложение работало именно как приложение, а не веб-сайт, но все равно недостатков была масса — большие задержки, отсутствие нормальной аппаратной поддержки, 3D, настроек полноэкранного режима, плохая блокировка курсора и еще куча всего.

Поэтому я решил переписать свою игру на C++. И правда — а почему нет-то? Наверное, и не слишком сложно будет — JavaScript-код моей игры основывался на 3D-движке CopperLicht (я его сам написал), у которого API почти как у 3D-движка IrrLicht (его тоже написал я), на котором и так основан мой игровой движок Framework CopperCube. Работы вроде не очень много — нужно только переписать игровую логику. Все остальное — окно, интерфейс, коллизии, шрифты, текстуры, звук, картинки, обработка файлов и другое — уже было написано, еще и API использовало очень похожее.

На портирование ушли недели, но в результате игра стала нативным Win32-приложением на C++. Можете скачать ее здесь.

Нативная версия на C++

Нативная версия на C++

Сравнение

Теперь у меня есть редкая возможность сравнить ход разработки одного и того же приложения на C++ и JavaScript. Разберу по пунктам.

Производительность

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

Даже самая ресурсоемкая часть — процедурная генерация домов и обнаружение столкновений физическим движком — не сильно лагали на JavaScript. Тормозит буквально раза в два больше, чем в C++-версии. Оптимизация выполнения JavaScript в Chrome меня очень впечатлила. К несчастью, все равно JavaScript-версия ощущается куда более медленной. Далее я объясню, почему.

Дьявол кроется в деталях

В реализации на C++ я мог контролировать любую деталь выполнения, любую мелочь. В JavaScript-версии во многих вещах я полагался на браузер — в этом и крылась проблема. На JavaScript процедурная версия едва заметно подлагивала из-за того, что некоторые вызовы WebGL имеют свойство ненадолго вешать браузер. Буквально на миллисекунды, но их очень много — поэтому игра «плыла», ощущалась очень медленной по ритму. Я написал несколько обходов для основных проблем, но с другими ничего сделать, увы, было нельзя. На C++ же контролировать можно все — и если возникают проблемы, можно придумать способ их решить.

Версия на JavaScript на моем компьютере выдавала тот же FPS, что и на C++ — около 120 кадров в секунду. Но ощущалась она очень, очень медленной. В зависимости от используемой ОС и железа компьютера браузер ведет себя сильно по-разному, и даже ввод иногда лагает.

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

В игровом коде есть два способа исполнения «игрового цикла»: requestAnimationFrame() и setInterval() . Одна из версий частично решает проблему скорости ввода на одних системах, другая — на других. От этого ситуация запутывается еще сильнее.

Таких мелких проблем было много, но у всех была одна причина — в JavaScript-версии все очень сильно зависит от реализации браузера, который часто делает не то, что вы от него хотите. В C++ такой проблемы не было в принципе.

Скорость разработки

И JavaScript, и C++ я знаю достаточно хорошо, поэтому скорость была примерно одинаковой. В C++ иногда возникает нужда реализовать вещи, о которых в JavaScript думать не надо, но зато система типов C++ помогает в отлове багов и опечаток. «Хвала» современным браузерам — JavaScript отлаживать так же удобно, как C++ двадцать лет назад.

Лично я думаю, у обоих языков есть и плюсы, и минусы. В конце концов, оба они — просто инструменты для достижения цели.

Если вы решите вдруг написать свой трехмерный шутер от первого лица, я настоятельно рекомендую делать это не на JavaScript/HTML/WebGL. Для встроенных в сайты мелких игрушек или прототипов они хороши, но сделать на них полноценный, да еще и нативный продукт нереально. Ну, по крайней мере, сейчас. Кто знает, вдруг через несколько лет все станет резко наоборот. Знаю много людей, которые с таким инструментарием делают двухмерные игры, и получается прекрасно. Но для трехмерной игры от первого лица это так не работает.

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

Стоит ли переходить с C# на JS?

img

Сабж вот в чем, уже 6 день изучаю кодинг. На C# уже там методы какие то пошли. Всё ясно и понятно, но есть одно но! Порог в вхождение, я узнал что изучая СиШарп мне еще долго придется трудиться чтобы стать Джуном, а у меня временные рамки чтобы через 4 мес уже работать джуном где-то.
Хочу узнать стоит ли переходить на Js, html, css, и изучать React и Angular?
Цель у меня: Меньше времение = больше денег.
P.S: Случайно создалось в тех вопросах, хотел на программирование

P.S.S: Сформулировал не правильно вопрос и сабж таким образом что, все подумали что я какой то челик который решил чисто порофлить. Парни я реально хочу узнать потому что не опытен в этой среде, мне хочется побыстрее деньги не потому что я от балды захотел покодить, у меня такое положение что надо побыстрее влиться как джун чтобы развивать свои навыки и решать уже там, более осознанно. Обращаясь к вам я не хотел эти рофельные мемы . И негативные высеры вроде: «Пожу говна дружок! Мы здесь играем в серьезных кодеров, а таких анимешников как ты нам не нужы».

img

12 Apr 2021 в 00:39 #2

Конечно переходи, тебя здесь все очень ждут

img

12 Apr 2021 в 00:40 #3

изучай всё, я вот на джаве сейчас с шарпа пересел, но приходится и джаваскрип и хтмл и sql юзать, все связано

12 Apr 2021 в 02:02 #4

Лучше посмотри вакансии в своем городе для джунов, стажировки, и по ним выбирай. Сомневаюсь, что во фронт войти без опыта сильно проще, на хабре в самых популярных вакансиях по откликам сплошной фронтенд. Регулярно встречаю посты о том, как на позицию джуниора приходят сотни откликов в день, вот пример https://habr.com/ru/company/wrike/blog/462787/ . Так что, возможно, придется как-то выделяться скиллами на фоне такой толпы.

12 Apr 2021 в 02:20 #5

Конечно переходи!

Что лучше — всю жизнь формошлёпить в конструкторе IDE на microsoft java, именуемый c#, или довольствоваться мужским языком программирования, который используется во всех сферах, начиная от фронта/бека в вебе, кроссплатформенный для написания десктопных/мобильных приложений/игр (electron, ветвь native (reactnative, vuenative, nativevue, angularnative и так до бесконечности), apache cordova, phonegap, да я устану перечислять), хоть в микроконтроллеры подавайся (iskra js)

Вопрос риторический, для каких целей нужно — для таких и изучай

Любые советчики будут советовать относительно своих интересов и потребностей

Мелкомягких джавистов не слушай, они советуют обычно ересь

12 Apr 2021 в 02:27 #6

ну 4 за месяца джуна на js то можно запоулчить ток компаниям нужен стронг джун + англ преинтермедия хотя бы

12 Apr 2021 в 02:50 #7

уже 6 день изучаю кодинг

Люди после нескольких лет работы переходят на другие языки, а ты спрашиваешь стоит ли переходить после 6 дней?

Конечно не стоит, поизучай пару лет, а потом переходи

12 Apr 2021 в 03:03 #8

Сабж вот в чем, уже 6 день изучаю кодинг. На C# уже там методы какие то пошли. Всё ясно и понятно, но есть одно но! Порог в вхождение, я узнал что изучая СиШарп мне еще долго придется трудиться чтобы стать Джуном, а у меня временные рамки чтобы через 4 мес уже работать джуном где-то.
Хочу узнать стоит ли переходить на Js, html, css, и изучать React и Angular?
Цель у меня: Меньше времение = больше денег.
P.S: Случайно создалось в тех вопросах, хотел на программирование

С такими целями далеко не пойдешь

12 Apr 2021 в 03:09 #9

img

12 Apr 2021 в 04:03 #10

Сабж вот в чем, уже 6 день изучаю кодинг. На C# уже там методы какие то пошли. Всё ясно и понятно, но есть одно но! Порог в вхождение, я узнал что изучая СиШарп мне еще долго придется трудиться чтобы стать Джуном, а у меня временные рамки чтобы через 4 мес уже работать джуном где-то.
Хочу узнать стоит ли переходить на Js, html, css, и изучать React и Angular?
Цель у меня: Меньше времение = больше денег.
P.S: Случайно создалось в тех вопросах, хотел на программирование

с такими запросами тебе стоит изучить питон.

менять самый универсальный(лучший) язык на ява скрипт?

12 Apr 2021 в 04:23 #11

менять самый универсальный(лучший) язык на ява скрипт?

Но C# не самый универсальный. И даже не топ2. Да и в топ3, скорее всего, не попадает.

12 Apr 2021 в 05:59 #12

Сабж вот в чем, уже 6 день изучаю кодинг. На C# уже там методы какие то пошли. Всё ясно и понятно, но есть одно но! Порог в вхождение, я узнал что изучая СиШарп мне еще долго придется трудиться чтобы стать Джуном, а у меня временные рамки чтобы через 4 мес уже работать джуном где-то.
Хочу узнать стоит ли переходить на Js, html, css, и изучать React и Angular?
Цель у меня: Меньше времение = больше денег.
P.S: Случайно создалось в тех вопросах, хотел на программирование

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

img

12 Apr 2021 в 07:34 #13

Но C# не самый универсальный. И даже не топ2. Да и в топ3, скорее всего, не попадает.

Это твой субъективный топ?

12 Apr 2021 в 08:10 #14

Это твой субъективный топ?

Это топ основанный на том по каким направлениям у таких универсальных языков есть вакансии, а по каким нет. И C# там особо нечем козырять кроме геймдева, бэкэнда, десктоп разработки и немного мобильной разработки на Xamarin, хотя вакансий по последнему довольно мало. Java, Python и JS могут предложить в этом плане намного большее разнообразие и универсальность.

А то что ты можешь писать под IoT/embedded или сделать свою ОС на C#, это довольно мало кого волнует кроме пары энтузиастов.

img

12 Apr 2021 в 08:14 #15

Это топ основанный на том по каким направлениям у таких универсальных языков есть вакансии, а по каким нет. И C# там особо нечем козырять кроме геймдева, бэкэнда, десктоп разработки и немного мобильной разработки на Xamarin, хотя вакансий по последнему довольно мало. Java, Python и JS могут предложить в этом плане намного большее разнообразие и универсальность.

А то что ты можешь писать под IoT/embedded или сделать свою ОС на C#, это довольно мало кого волнует кроме пары энтузиастов.

js для челов которые в программировании ноль и они хотят чего-то стоить в виде создания сайтиков.

Python года через 3 никому не усрется ибо каждый мамкин программист изучает python по советам гуру на ютабе.

img

12 Apr 2021 в 08:15 #16

Это топ основанный на том по каким направлениям у таких универсальных языков есть вакансии, а по каким нет. И C# там особо нечем козырять кроме геймдева, бэкэнда, десктоп разработки и немного мобильной разработки на Xamarin, хотя вакансий по последнему довольно мало. Java, Python и JS могут предложить в этом плане намного большее разнообразие и универсальность.

А то что ты можешь писать под IoT/embedded или сделать свою ОС на C#, это довольно мало кого волнует кроме пары энтузиастов.

12 Apr 2021 в 14:47 #17

js для челов которые в программировании ноль и они хотят чего-то стоить в виде создания сайтиков.

Python года через 3 никому не усрется ибо каждый мамкин программист изучает python по советам гуру на ютабе.

Name язык всегда изучают по роликам на ютубе, но еще живут) Питон будет жить долго и очень долго. Я часто встречаю этих челов которые изучают язык по ютубу, а потом бегают по чатам и спрашивают А ПОЧЕМУ У НАС НИЧЕГО НЕ РАБОТАЕТ.

Для тс
Изучай Python + Django если хочешь ворваться относительно быстро. Попутно с питоном и джангой можешь еще и JS бить сверху(надеюсь ты уже хорошо знаешь хтмл + ксс)

Python Core можно пройти за месяц, остальной месяц тратишь на задачки, после джанго + js core, и так за 2-3 месяца запилишь пару проектов для резюме и все.

13 Apr 2021 в 00:21 #18

js для челов которые в программировании ноль и они хотят чего-то стоить в виде создания сайтиков.

Python года через 3 никому не усрется ибо каждый мамкин программист изучает python по советам гуру на ютабе.

С твоей аватаркой в принципе уже ясно кто ты и что тебе не стоит писать в таких разделах)

img

13 Apr 2021 в 08:29 #19

Ну ты смотри, перейди на JS, тоже посиди недельку, потом глядишь и мб окажется что на JS сложно и стоит перейти на Python, там в принципе тоже могут появиться трудности и там уже и изучение Golang не за горами, потом, в принципе, еще можешь чекнуть PHP или Ruby(можешь даже попробовать их параллельно поучить за 6-7 дней). Ну а там в принципе еще есть много разных ЯП. Сам найдешь? Не дурак ведь
Ты только посмотри сколько языков можно узнать за каких-то 5-6 неделек, а потом уже и резюме на 2 страницы сможешь оформить и искать сразу на мидла

С твоей аватаркой в принципе уже ясно кто ты и что тебе не стоит писать в таких разделах)

как аватарка влияет на то, чем я занимаюсь ? чел ты иди носик смени и длинные тапочки надень

13 Apr 2021 в 08:36 #20

Сабж вот в чем, уже 6 день изучаю кодинг. На C# уже там методы какие то пошли. Всё ясно и понятно, но есть одно но! Порог в вхождение, я узнал что изучая СиШарп мне еще долго придется трудиться чтобы стать Джуном, а у меня временные рамки чтобы через 4 мес уже работать джуном где-то.
Хочу узнать стоит ли переходить на Js, html, css, и изучать React и Angular?
Цель у меня: Меньше времение = больше денег.
P.S: Случайно создалось в тех вопросах, хотел на программирование

P.S.S: Сформулировал не правильно вопрос и сабж таким образом что, все подумали что я какой то челик который решил чисто порофлить. Парни я реально хочу узнать потому что не опытен в этой среде, мне хочется побыстрее деньги не потому что я от балды захотел покодить, у меня такое положение что надо побыстрее влиться как джун чтобы развивать свои навыки и решать уже там, более осознанно. Обращаясь к вам я не хотел эти рофельные мемы . И негативные высеры вроде: «Пожу говна дружок! Мы здесь играем в серьезных кодеров, а таких анимешников как ты нам не нужы».

это вброс или рофл, все тру прогеры и гики знают что переход возможен только на 1с

Добавить комментарий

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