Язык программирования C

Краткая справка

С - легендарный язык программирования, разработанный в компании Bell Labs Деннисом Ритчи в начале семидесятых.Предшественником его стал язык B, который был разработан совместно с Кеном Томпсоном. Согласно легенде, Ритчи и Томпсон создали новый язык для того, чтобы перенести любимую игру, в которой надо было стрелять и уворачиваться от астероидов, с сервера компании на компьютер в офисе.

Со временем, язык настолько усовершенствовался, что на нем решили переписать ядро операционной системы UNIX, что дало хороший старт для популяризации языка в системном программировании.В 1978 году вместе с соавтором языка Awk, Брайаном Керниганом, Ритчи издает книгу “Язык программирования С”, которая стала первым неформальным руководством для всех программистов.

Позднее, язык стал настолько популярным, что его начали использовать практически везде.Однако, в книге Ритчи и Кернигана были довольно расплывчатые формулировки, что приводило к разным интерпретациям. Поэтому, вскоре после этого вышла спецификация от Американского национального института стандартов (ANSI C), которая до сих пор поддерживается всеми компиляторами. Тогда же было выпущено и второе издание книги, описывающее этот стандарт. Одновременно с этим сотрудник той же компании, в которой работал автор языка, Бьёрн Страуструп, загорелся идеей создать свой Си с классами и ООП, который будет назван С++ и станет продолжением языка С.

Философия языка C

Си довольно минималистичный язык. Его называют “высокоуровневым ассемблером”, но в отличие от ассемблера, код на нем может быть скомпилирован без изменений на любом устройстве. Он создавался для того, чтобы сделать проще написание больших объемов кода с минимумом багов, не нагружая компилятор, как это происходило в другом популярном языке того времени - Бейсике.

Си ориентирован на процедурное программирование, хотя в нем присутствуют и некоторые средства для ООП. В нем изначально не было ( и не было добавлено позже) автоматического управления памятью (так называемый “сборщик мусора) и функционального программирования. Язык предоставляет множество возможностей и свободу действий, однако не защищает программиста от потенциальных ошибок. Таких как переполнение буфера или обращение к несуществующим элементам массивов, а также от утечек памяти. Для устранения некоторых из этих проблем используются отдельные инструменты, которые позволяют провести дополнительную проверку или библиотеки, которые могут задействовать возможности, не входящие в стандарт Си.

Где применяется C

Си применяется при написании низкоуровневых программ, например драйверов для ОС, операционных систем (больше всего это относится к UNIX и UNIX-подобным системам)и системных служб. Реже пишут программы полностью на С (например, Wireshark). Для улучшения производительности программ часть кода какого-либо проекта также может быть переписана на Си (по аналогии с ассемблером). А самое главное, что на С пишутся программы для микроконтроллеров, поэтому С будет использоваться до тех пор, пока существуют микроконтроллеры и операционные системы на базе UNIX.

Сложность обучения C

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

Про Си не так много литературы или обучающих курсов. В основном, это книга Дениса и Ритчи, а также некоторые справочники и документация по ANSI C.

Плюсы/минусы C

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

  • язык практически вечен. Если я усну, а затем проснусь через сто лет и меня спросят, что сейчас пишут на С, то я отвечу: ядро Linux, системные службы и драйвера";
  • производительность. Здесь всё, конечно, зависит от программиста. У плохи программистов даже на С всё будет тормозить;
  • относительная простота языка. Структура языка несложная, но вот при написании кода программист никак не застрахован от ошибок, которые просто нельзя сделать на более высокоуровневых языках. Зато код получается более коротким и простым для понимания.

Минусы:

  • высокий порог вхождения. Относительно мало литературы ( читать стоит книгу Кернигана и Ритчи);
  • не используется в современной веб-разработке (создание сайтов, сервисов и.т.д);
  • малая популярность среди молодых программистов. Сейчас Си не распиарен и нигде не рекламируется , поэтому имеет репутацию “мертвого” языка. Что, конечно, неправда, ведь он живее всех живых.

Сопутствующие технологии

gcc (до внедрения поддержки других языков назывался GNU C Compiler) - компилятор для С, первая версия которого была написана Ричардом Столлманом и Леонардом Тауэром. Сейчас поддерживает и другие языки - Java, С++, Go и другие. Часто при создании операционных систем на Linux корректность сборки ядра проверяют именно при помощи gcc, как стандарта.

pcc (portable C compiler) - компилятор для С, разработанный Стивеном Джонсоном, который также работал в Bell Labs. Прямой конкурент gcc.

make - утилита, которая компилирует написанный код в объектные файлы, а затем компонует в исполняемые файлы или библиотеки

Проект GNU - некоммерческий проект, целью которого является разработка свободного ПО. Был основан в 1983 году Ричардом Столлманом. В рамках этого проекта Столлманом и другими программистами были написаны на С(и не только) знаменитые программы и утилиты для UNIX и *nix систем, такие как Emacs, gzip (программа для сжатия файлов),GNU Bison, загрузчик операционной системы Grub, командная оболочка bash, архиватор tar

Turbo C - компилятор и среда разработки для С от компании Borland. Позднее был создан компилятор для С++.

Clang - попытка создать современны gcc без устаревшего кода для старых платформ.Создается совместными усилиями таких крупных корпораций как Google, Apple и.т.д