Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

На чем пишут ОС для мобильных устройств (телефонов)?

По статистике, большинство игр пишется на C++. Почему, по этой же статистике, большинство игр пишут именно на C++, а не C#, например? Можно ли писать игры/программы под телефоны например, на C#? Можно ли на том же C# написать операционную систему под телефоны, в каком-нибудь типичном Visual Studio? Какие есть различия между языками C, C+, C++, C#?

ПрограммированиеОперационные системы
Bao Bav
  · 1,7 K
Лучший
Диванный эксперт широкого профиля :)  · 26 июл 2021

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

По статистике, большинство игр пишется на C++. Почему, по этой же статистике, большинство игр пишут именно на C++, а не C#, например?

Игры пишут на C++ потому, что C++ производительней. Вообще, все способы написать программу начиная от любого ассемблера, заканчивая любым средством кодогенерации, отличаются соотношением простоты написания к производительности. В целом, имеет место закономерность, что упрощение написания программы (любой) на каком-то ЯП/платформе/среде достигается путём различных допущений о том, как она должна работать и путём автоматизации и снижения контроля программиста над тем, что конкретно делает его программа. Эти допущения, при нестандартных ситуациях использования и эта автоматизация (которая вовсе не всегда делает то же самое, что сделал бы разбирающийся программист в той же ситуации вручную, зная, что конкретено должна делать программа) приводят к потерям производительности. Отсюда, часто имеет место закономерность: чем удобнее/быстрее писать программу, тем медленнее она работает или тем больше памяти она требует для работы. В этом сущность всех технологий разработки: чем проще/быстрее написать, тем (часто) хуже работает. Следовательно, выбор технологии всегда упирается в конкретную задачу: технические и не технические ограничения. Так, если нужно сделать программу быстро, то используется вагон автоматизации и получается программа, которая требует много памяти/много процессорного времени. Можно ли качественнее? - Почти всегда - "да", но это дольше, а программистам кто-то платит з/п и этот "кто-то" и определяет, как быстро ему нужен продукт (программа), а от этого отталкиваются разработчики при выборе технологии.

Что касается конкретно C++, то как и любое решение, он является компромиссом между "сделать хорошо, но делать долго" и "сделать быстро, но как получится": что-то более удобное может быть менее производительным, а что-то более производительное - менее удобным.

Кроме того на C++ обычно пишут сам движок игры. Саму игру (игровую логику, механики, правила, которые работают "поверх" движка) можно написать на многих языках и, нередко, часть её пишут на чём-то ещё, например, на том же C#: такие известные игровые движки как Unreal Engine и Unity написаны на C++, но, например, Unity использует в качестве языка сценариев (то, чем описывается значительная часть игровой логики) - C#, Unreal Engine - визуальное программирование Blueprint.

Можно ли писать игры/программы под телефоны например, на C#?

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

Можно ли на том же C# написать операционную систему под телефоны, в каком-нибудь типичном Visual Studio?

Увы, самое удобное на чём можно написать ОС - C/C++. Во-первых, это связано, с возможностью напрямую взаимодействовать с "железом", а тот же, например, C# не позволяет (насколько мне известно) встраивать вставки на ассемблере. И во-вторых (что точно невозможно на C#, Java, Python и т.п.), ЯП для написания ОС должен позволять работать без специальной среды/виртуальной машины/рантайма, но для того-же C# нужен .NET, для Java - JVM, а для Python - интерпретатор. Как раз второе требование напрочь исключает возможность применения этих ЯП для написания ОС, т.к. именно ОС и является той системой, которая (на самом базовом уровне) распределяет ресурсы для других программ - память, процессорное время, доступ к различным устройствам и т.д. и т.п. , а любая среда/виртуальная машина/рантайм сами распределяют те ресурсы, которые они получили от ОС, которой (если речь про написание ОС) просто нет.

В Visual Studio можно попробовать написать ОС. В конечном счёте, компилятор и редактор кода ещё никому не повредили.

Какие есть различия между языками C, C+, C++, C#?

Синтаксически - почти никаких - все являются C-подобными (кроме C, т.к. C по определению является C-подобным: именно от него происходит само понятие Си-подобный ЯП).

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

Что касается сравнения производительности C/C++ и любого другого ЯП, то, быть может кроме ассемблера, любой другой будет, в лучшем случае, наравне с C/C++, а чаще всего - менее производителен (требовать больше памяти/процессорного времени). Разумеется, это в умелых руках: если место произрастания рук разработчика не соответствует биологической норме, то можно написать непроизводительную программу и на C/C++, а сравнение производительности программ написанных криворучкой на C/C++ и профессионалом на менее производительном ЯП, может показать, что "программа на C/C++ оказалась менее производительной" - ввиду криворукости её разработчика: любой инструмент хорош в умелых руках и плох в неумелых.

С т.з. удобства - тут, во многом, вкус и цвет. Я бы выбирал из С++, C#, Java. В чём-то С++ более многословен, а в чём-то C#. Например, на C++ можно написать в классе "public:" (или любой другой спецификатор доступа) и все нижележащие поля/методы класса сразу станут доступны, а в C# для этого надо каждому прописывать: на чтение это, кстати, тоже распространяется: чем больше кто-то пишет, тем больше кто-то читает и 100500 спецификаторов доступа у каждого метода зашумляют взгляд.

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

С т.з. хобби/трудоустройства, для хобби, С++ однозначно лучше, т.к. возможностей для творчества и удовлетворения программистских амбиций предоставляет вагон; для трудоустройства - х.з., в зависимости от региона, но, насколько мне известно, вакансий с C# побольше, чем для C++ (особенно, чем дальше от столиц и крупных городов). Хотя в совсем малых городах, провинциях и перифериях, думаю, они одинаково НЕ актуальны, т.к. там из IT, может быть, разве что, 1С Бухгалтерия (но в таком случае, раз они равноправны, то C++ чуть лучше, т.к. с т.з. хобби он предпочтительней).

1 эксперт не согласен

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