Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

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

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

Давным-давно, когда люди впервые полетели на Луну, в 1969-м году, появилась операционная система UNIX, разработанная в Bell Labs. Тогда встретились два сотрудника этой фирмы, Кен Томпсон и Денис Ритчи, подумали и решили создать для UNIX новый язык программирования. А назвали его C. В смысле, английской буквой «Си». Потому что раньше был B («Би»).

«Си» появился в начале 70-х, а в 1978-м вышла книга Ритчи и Кернигана с названием, которое наверняка очень порадовало Капитана Очевидность: «Язык программирования Си».

У «Си» есть стандартная библиотека, известная как libc. Это — набор заголовочных файлов и библиотек, выполняющих роль подпрограмм и необходимых для общих операций.

В 1983-м был разработан единый стандарт для «Си», который называется «ANSI Си». (До этого все программировали по вышеуказанной книжке.) После 1989-го появилась «Стандартная библиотека ANSI Си». Позже в неё продолжили добавлять разные полезные заголовочные файлы (три штуки в 1995-м, ещё шесть штук в 1999-м). Подробнее об этом вы можете узнать на форуме Си

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

В чём же секрет такого успеха? Почему «Си» (и его идеологию) так любят использовать и для создания системного ПО, и для прикладных программ?

Прежде чем какая-либо функция будет выполнена, она непременно должна быть объявлена предварительно. То есть, попросту говоря, объявление функции в тексте кода располагается выше самой функции. Что это даёт? Компилятору не доведётся возвращаться, он может обрабатывать всё последовательно — в один проход.

Точкой входа в программу служит функция main(), после которой в фигурных скобках размещается её определение. В определении располагаются другие функции, выполняемые одна за другой. Непосредственно перед закрывающей фигурной скобкой можно указать функцию return со значением 0, останавливающую выполнение main(). Просто и лаконично, без чего-либо лишнего. Потому-то и любят использовать «Си» для обучения программированию.

У языка — относительно низкий уровень абстракции. Конечно, не ассемблер, но всё же близко к нему. Меньше мороки с разработкой компиляторов, что полезно в плане создания оных для разных платформ.

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

Есть и недостатки. Например, отсутствие проверки индексов массивов (так называемой проверки границ). Если в массиве всего лишь пять элементов, то программа, написанная на «Си», вполне способна обратиться к шестому элементу — к несуществующему. В результате — переполнение буфера и проблемы с безопасностью.

С указателями тоже возможно безобразие, вызывающее утечку памяти. Вот забывает программа освободить динамически назначаемые области — и всё тут, хоть волком вой. В тех областях может застрять какой угодно мусор. Потом, образно говоря, он ещё и высыпется на голову непредсказуемым образом в произвольный момент времени. Нескучная жизнь гарантирована.

Ну а в марте 2011-го выяснилось, что благодаря особенностям работы функции strcpy(), когда точно не предопределена длина строки, можно атаковать операционную систему Linux методом подключения USB-устройств со специально перепрограммированными контроллерами. Воткнул в порт — произошло переполнение буфера — и получай повышенные привилегии. Правда, разработчики популярных дистрибутивов вроде бы бросились затыкать эту дыру, но частота обнаружения проблем стала просто ужасающей.

Несмотря ни на что, историческую роль языка «Си» трудно недооценить. Ведь благодаря ему возникла не только «мода» на характерный синтаксис, но и целая идеология программирования. Всё, что можно сделать простым, легковесным и быстрым, должно быть сделано именно таким. Если для работы чего-либо достаточно выстроить выполнение функций в линеечку, последовательно, без дёрганья и метания, то так и следует делать. Иначе получится Bloatware, раздутое и распухшее, неоправданно тяжёлое и неповоротливое.

К сожалению, такая идеология всё чаще забывается, особенно нынешними разработчиками UNIX-подобных операционных систем.

Автор: vanilinkin, специально для xBB.uz, 31.03.2011


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2012-11-28 16:48:22

Метки материала: c, язык программирования, язык программирования c, программирование, разработка по, информационные технологии

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.