Как правило, люди выбирают язык на основе следующих моментов.
Переносимость: Переносимость является наиболее важным фактором при выборе языка. Если исходный код не является переносимым, Вам придется потратить много времени.
Рефакторинг : язык должен быть простым для понимания, иначе на небольшие изменения уйдет большое количество времени.
Доступность: Компилятор и IDE ( Integrated Development Environment ) должны быть легко доступны на рынке, и самое главное, чтобы они были дешевыми.
Эффективность: язык обладает хорошей эффективностью, а количество ошибок должно быть меньше.
===============================================
Каждый язык имеет собственное значение, нельзя назвать какой-либо язык хорошим или плохим.
Допустим мы использовали только несколько строк ассемблерного кода, помимо всего остального кода,
который мы написали на C. Cледующие пункты, которые описывают разницу между C и Ассемблером.
===============================================
1.Язык С обеспечивает переносимость и не зависит от конкретной платформы. Это самое большое преимущество C, и здесь кодер ничего не может изменить при использовании C. Код, написанный на C, может быть легко повторно использован на другой платформе. (Unix VS IBM System 390)
Ассемблер не обеспечивает переносимость и его исходный код, специфичен для процессора, поэтому сборка ( редактор связей - Linker ) инструкций зависит от архитектуры процессора.
- Программное обеспечение, написанное на ассемблере, работает лучше, чем C. Современные компиляторы C генерируют более оптимизированный ассемблерный код. Компиляторы C обычно оптимизируют лучше, чем вы можете поддерживать своими силами.
- В общем, нельзя сказать, что ассемблерный код, сгенерированный компилятором, всегда лучше, потому что, когда человек пишет программное обеспечение на ассемблере, он думает о множестве сценариев, специфичных для требований и процессора, которые не обрабатываются компилятором высокого уровня С(С++).
- Я считал, что API, написанный на ассемблере,будет более быстрым. Это основная причина написания подпрограмм memset() и memcpy() на ассемблере. Я думал,что исполняемый файл, созданный на языке ассемблера, имеет меньший размер по сравнению с языком "C", «но это не всегда так»
==========================================
«Является ли C тем же ассемблером, но в более удобной оболочке?» - Нет.
Вообще говоря комманда Ассемблера много ближе к машинному коду чем сомманда "С". Но строго говоря это не так Ассемблер генерит микрокод поддержка, которого была в свое время проблемой ( решенной в конце концов ) на ЕС 1046.
C не является «языком низкого уровня». Машинный язык и язык ассемблера (и микрокод в архитектуре микрокода) являются языками низкого уровня. Все остальное, включая "C", является языком высокого уровня.
Хотя "C" (и некоторые другие языки) позволяет вам встраиваться в язык ассемблера, это не меняет того факта, что C является языком высокого уровня. "C" с примесью ассемблера — это всего лишь смесь "C" (языка высокого уровня) и языка ассемблера (языка низкого уровня). Другими словами, "C" со встроенным языком ассемблера представляет собой смесь двух языков на двух разных уровнях. "C" можно использовать для некоторого «низкоуровневого программирования», но C не является языком низкого уровня.