История языка программирования Python
- 1 year ago
- 0
- 0
Год | Стандарт Си |
---|---|
1972 | Рождение языка |
1978 | K&R C |
1989 | ANSI C (C89) |
1990 | ISO C (совпадает с C89) |
1999 | C99 |
2011 | C11 |
2017 | C17 (исправленный C11) |
2018 | C18 (совпадает с C17) |
Язык программирования Си разрабатывался в период с 1969 по 1973 годы в лабораториях Bell Labs . Согласно Ритчи , самый активный период творчества пришёлся на 1972 год . Язык назвали «Си» (C — третья буква английского алфавита ), потому что многие его особенности берут начало от старого языка « Би » (B — вторая буква английского алфавита). Существует несколько различных версий происхождения названия языка Би. Кен Томпсон указывает на язык программирования BCPL , однако существует ещё и язык , также созданный им. Ритчи предполагает, что название языка могло быть производным от имени жены Томпсона Бонни .
К 1973 году язык Си стал достаточно силён, и большая часть ядра UNIX , первоначально написанная на ассемблере PDP-11 /20, была переписана на Си. Это было одно из самых первых ядер операционных систем, написанное на языке, отличном от ассемблера; более ранними были лишь системы Multics (написана на ПЛ/1 ) и TRIPOS (написана на BCPL).
Существует несколько легенд, касающихся причин разработки Си и его отношения к операционной системе UNIX , включая следующие:
По одной легенде разработка Си стала результатом того, что его будущие авторы любили компьютерную игру, подобную популярной игре Asteroids (Астероиды) [ источник не указан 282 дня ] . Они уже давно играли в неё на главном сервере компании, который был недостаточно мощным и должен был обслуживать около ста пользователей. Томпсон и Ритчи посчитали, что им не хватает контроля над космическим кораблём для того, чтобы избегать столкновений с некоторыми камнями. Поэтому они решили перенести игру на свободный PDP-7 , стоящий в офисе. Однако этот компьютер не имел операционной системы , что заставило их её написать. В конце концов, они решили перенести эту операционную систему ещё и на офисный PDP-11 , что было очень тяжело, потому что её код был целиком написан на ассемблере . Было вынесено предложение использовать какой-нибудь высокоуровневый портируемый язык, чтобы можно было легко переносить ОС с одного компьютера на другой. Язык Би, который они хотели сначала задействовать для этого, оказался лишён функциональности, способной использовать новые возможности PDP-11. Поэтому они и остановились на разработке языка Си.
Существует и другая легенда. Первый компьютер, для которого была первоначально написана UNIX, предназначался для создания системы автоматического заполнения документов. Первая версия UNIX была написана на ассемблере. Позднее для того, чтобы переписать эту операционную систему, был разработан язык Си [ источник не указан 282 дня ] .
В 1978 году Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги «Язык программирования Си». Эта книга, известная среди программистов как «K&R», служила многие годы неформальной спецификацией языка. Версию языка Си, описанную в ней, часто называют «K&R C». Вторая редакция этой книги посвящена более позднему стандарту ANSI C , описанному ниже.
K&R ввёл следующие особенности языка:
struct
);
long int
);
unsigned int
);
+=
и подобные ему (старые операторы
=+
вводили анализатор лексики
компилятора
Си в заблуждение, например, при сравнении выражений
i =+ 10
и
i = +10
).
K&R C часто считают самой главной частью языка, которую должен поддерживать компилятор Си. Многие годы даже после выхода ANSI C он считался минимальным уровнем, которого следовало придерживаться программистам, желающим добиться от своих программ максимальной переносимости, потому что не все компиляторы тогда поддерживали ANSI C, а хороший код на K&R C был верен и для ANSI C.
После публикации K&R C в язык было добавлено несколько возможностей, поддерживаемых компиляторами AT&T и некоторых других производителей:
void
), и указатели, не имеющие типа (с типом
void*
);
const
);
enum
);
float
).
В конце 1970-х годов Си начал вытеснять Бейсик с позиции ведущего языка для программирования микрокомпьютеров . В 1980-х годах он был адаптирован для использования в IBM PC , что привело к резкому росту его популярности. В то же время Бьёрн Страуструп и другие в лабораториях Bell Labs начали работу по добавлению в Си возможностей объектно-ориентированного программирования . Язык, который они в итоге сделали, C++ , оказал большое влияние на разработку ПО, но так и не смог сравняться по популярности с Си, особенно в UNIX-подобных системах.
В 1983 году Американский национальный институт стандартов (ANSI) сформировал комитет для разработки стандартной спецификации Си. По окончании этого долгого и сложного процесса в 1989 году он был наконец утверждён как «Язык программирования Си» ANSI X3.159-1989 . Эту версию языка принято называть ANSI C или C89. В 1990 году стандарт ANSI C был принят с небольшими изменениями Международной организацией по стандартизации (ISO) как ISO/IEC 9899:1990 .
Одной из целей этого стандарта была разработка надмножества K&R C, включающего многие особенности языка, созданные позднее. Однако комитет по стандартизации также включил в него и несколько новых возможностей, таких, как прототипы функций (заимствованные из C++) и более сложный препроцессор .
ANSI C сейчас поддерживают почти все существующие компиляторы. Почти весь код Си, написанный в последнее время, соответствует ANSI C. Любая программа, написанная только на стандартном Си, гарантированно будет правильно выполняться на любой платформе, имеющей соответствующую реализацию Си. Однако большинство программ написаны так, что они будут компилироваться и исполняться только на определённой платформе, потому что:
После стандартизации в ANSI спецификация языка Си оставалась относительно неизменной в течение долгого времени, в то время как C++ продолжал развиваться (в 1995 году в стандарт Си была внесена Первая нормативная поправка, но её почти никто не признавал). Однако в конце 1990-х годов стандарт подвергся пересмотру, что привело к публикации ISO 9899:1999 в 1999 году . Этот стандарт обычно называют «C99». В марте 2000 года он был принят и адаптирован ANSI.
Некоторые новые особенности C99:
inline
);
long long int
(для облегчения перехода от 32- к 64-битным числам), явный
булевый тип
данных
_Bool
и тип
complex
для представления комплексных чисел;
restrict
);
struct { int x, y, z; } point = { .y=10, .z=20, .x=30 };
//
, заимствованных из C++ (многие компиляторы Си поддерживали их и ранее в качестве дополнения);
snprintf
;
stdint.h
.
8 декабря 2011 опубликован новый стандарт для языка Си (ISO/IEC 9899:2011) . Основные изменения:
gets
(в пользу безопасной
gets_s
);
quick_exit
;
_Noreturn
;
Черновой вариант стандарта был представлен как C17 (ISO/IEC 9899:2017) в 2017 году . В июне 2018 года стандарт был опубликован как C18 (ISO/IEC 9899:2018) . Новый стандарт устраняет дефекты, замеченные в предыдущей версии, без добавления новых возможностей. Названия C17 и C18 обычно упоминаются как синонимы .