В стандартной библиотеке C нет хеш-таблицы, потому что либо:
- никто не представил предложение рабочей группе; или
- рабочая группа сочла это ненужным.
Так работает ISO. Предложения выдвигаются и принимаются или отклоняются.
Вы должны быть осторожны с тем, что добавляете в стандартную библиотеку, поскольку у вас есть две конфликтующие группы. Как пользователь , вы можете захотеть, чтобы каждая структура данных под солнцем была добавлена в стандарт, чтобы сделать язык более полезным.
Но, как разработчик языка (кроме того, это, вероятно, люди, которые, как правило, составляют большинство различных рабочих групп, так что их мнение, вероятно, окажет большее влияние), вы не на самом деле не нужно создавать вещи, которые могут использоваться не всеми. Все, что было там, когда появился C89, было связано с тем, что основная цель состояла в том, чтобы кодифицировать существующую практику, а не вводить новые практики. С тех пор все итерации стандартов были немного более свободными в том, что они могут сделать, но обратная совместимость по-прежнему является важной проблемой.
Я тоже имею конфликты. Я бы хотел, чтобы все функции библиотек Java, C ++ или Python были в моем распоряжении в C. Конечно, это усложнит изучение всего для новичков и, как сказал один из комментаторов, возможно, сделает это любым Обезьяна кода может выкачать полезный код, уменьшив мою ценность в процессе: -)
И у меня в значительной степени есть все структуры данных, которые мне когда-либо понадобятся, из моей долгой и (в основном) прославленной карьеры. Вы не ограничены стандартной библиотекой для такого рода вещей. Существует множество сторонних инструментов, которые вы можете использовать для выполнения этой работы, и (как и я) вы также можете использовать свои собственные.
Если вы хотите знать, почему определенные решения принимались на каждой итерации, ISO (и первоначально ANSI, до того как ISO вступил во владение) обычно публикуют обоснованные документы. C89 от ANSI можно найти здесь . Он содержит в себе эту маленькую красавицу:
Это обоснование фокусируется главным образом на дополнениях, пояснениях и изменениях, внесенных в язык, как описано в базовых документах. Это не является обоснованием для языка Си в целом: Комитету было поручено кодифицировать существующий язык, а не разрабатывать новый. В этом Обосновании не делается никаких попыток защитить ранее существовавший синтаксис языка, такой как синтаксис объявлений или привязка операторов.
Мне особенно нравится признание, что они не несут ответственности за любой нечестивый беспорядок, который мог предшествовать их попыткам стандартизации.
Но, возможно, реальный ответ на ваш вопрос заключается в этом, одном из руководящих принципов:
Сохранение духа C. Комитет считал главной целью сохранение традиционного духа C. Есть много аспектов духа C, но суть - это чувство сообщества, лежащее в основе принципы, на которых основан язык C. Некоторые из аспектов духа C могут быть обобщены в следующих фразах:
- Доверьтесь программисту.
- Не мешайте программисту делать то, что нужно сделать.
- Держите язык маленьким и простым.
- Предоставьте только один способ выполнить операцию.
- Сделайте это быстро, даже если это не гарантированно будет портативным.
Эта третья, вероятно, является основной причиной, по которой библиотека не была расширена в массовом масштабе с первоначальными усилиями по стандартизации, - и тем фактом, что такое расширение из комитета, вероятно, привело бы к тому, что ANSI C был бы помечен как C2038, а не как C89 .