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