Язык Си. Достоинства и недостатки.

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

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

Достоинства языка Си

1) Скорость. Только программы на языке ассемблера могут быть быстрее.
2) Малое потребление оперативной памяти.
3) Малый размер исполняемого файла. Вам не понадобится беспокоиться о наличии тяжеловесной актуальной версии библиотеки (фреймворка или среды выполнения) на запускаемом оборудовании, как в случае, с Qt, С#, Python или Java.
4) Простой синтаксис и небольшое количество возможностей языка упрощают изучение. Язык С++ включает в себя язык Си (с некоторыми оговорками), но содержит гораздо больше функционала, что усложняет изучение и анализ кода, а также может приводить к большому количеству возможных неоптимальных вариантов использования (так называемых случаев выстрелить себе в ногу).
5) Множество языков имеют Си подобный синтаксис. Это Java, PHP, javascript, , C++, C#, perl и множество других. Изучение Си упростит изучение других языков.

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

Недостатки языка Си

1) Необходимость ручного выделения и освобождение памяти. Это приводит к разрастанию кода и повышает вероятность ошибки программиста. Например в языка Python, Java, C# есть сборщик мусора который автоматически (без участия программиста) освобождает память от переменных и объектов которые более не будут использоваться.
2) Необходимость контроля за размерами массива. Невозможно автоматически изменять размеры массива при добавлении или удалении элемента (как например объекты типа vector, map и т.д. в STL C++).
3) Необходимость контроля за типами переменных. Нет автоматических переменных которым вы можете присваивать целочисленные, дробные или строковые значения, у переменной в Си есть тип и ничего кроме этого типа вы ей присвоить не можете;
4) Необходимость работы с указателями, что порождает множество возможностей для ошибок программиста;
5) Необходимость работы с макросами. Макроопределение переменных засоряет глобальное пространство имен (так как макроопределения глобальные). Макроопределения функций тоже дает множество возможностей для ошибок программиста.

Однако все эти недостатки языка Си исходят из ограничений программиста и могут быть успешно минимизированы. Имеются современные и приятные в использовании языки программирования, например C# и Python, которые дадут компактный код. Но Вы сможете сделать всё тоже самое и на Си, только программа будет в разы быстрее, а это может иметь решающее значение когда программа производит большие вычисления, например, нейронные сети, обработка сигналов, звука, изображений, видео и т.д. Если проблема производительности не стоит, и программа должны быть достаточно большой, то скорее всего язык Си не будет оптимальным выбором.

Когда язык Си подходит для решения ваших задач

1) Вы нуждаетесь в программе с максимальным быстродействием или минимальными затратами оперативной памяти;
2) Вы не являетесь профессиональным программистом. Язык Си гораздо проще С++, остальные не рассматриваем из-за малой распространенности или другой сферы применения - слишком большого отставания в производительности. Отсутствие постоянной практики не позволит Вам удерживать в голове все нюансы эффективного использования С++;
3) Вы пишите под встраиваемые системы (микроконтроллеры, DSP), данное условие связано с двумя предыдущими (имеется ограничение ресурсов и разработчики часто являются и схемотехниками и(или) программируют под различные семейства устройств);
4) Внутренний перфекционизм не позволяет Вам получать удовлетворение от написания неоптимальной программы по затратам процессорного времени, оперативной памяти, размерам исполняемого файла, необходимости использовать совместно с программой внешние библиотеки (фреймворки, среды выполнения);
5) Вы хотите научиться программированию на С/С++;
6) Вы хотите максимально контролировать аппаратную реализацию программы. Язык Си является низкоуровневым, и его операторы близки к ассемблерным (машинным кодам);
7) Вам необходима небольшая консольная утилита (программа). Для небольших программ использование объектно-ориентированного подхода, к которому склоняют большинство языков программирования (C++, C# и т.д.) не имеет особого смысла, так как он был придуман для борьбы со сложностью программ.

Когда язык Си не подходит для решения ваших задач

1) Ваше приложение имеет развитый графический интерфейс (GUI). Все современные системы с разработкой GUI ориентированы на другие языки программирования. Однако и в этом случае Вы можете только использовать вставки на языке Си там где Вам удобно или необходимо быстродействие (если среда разработки позволяет это);
2) Вы разрабатываете WEB приложение. Для этих целей есть специализированные языки программирования(например PHP, JavaScript). Существует также множество других направлений где существую специализированные языки программирования и предпочтительно использовать их;
3) В вашей компании (команде) используется другие технологии. Не стоит плыть против течения. И помни, выступающий гвоздь - бьют по шляпке;
2023-03-08



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Ключевое слово extern в языке Си
Инкапсуляция в языке Си
Макросы в языке Си
Достоинства и недостатки языка Си