Все знают, насколько замечателен C-язык и насколько он всасывает задачи обработки текста. Учитывая эти факты. Regex определенно должен быть частью ISO C. Но это не так. Я не понимаю, почему? Есть ли люди, которые думают, что это не важно?Почему не является частью регулярных выражений в ISO C99
ответ
Регулярные выражения не принадлежат собственно языку C, нежели звуковая библиотека, графическая библиотека или библиотека шифрования. Это уменьшит общий характер языка и сильно подавит его использование в качестве небольшого и эффективного внедренного языка.
Философия C заключалась в том, чтобы иметь очень малый и эффективный языковой набор ключевых слов со стандартизованными библиотеками для следующего уровня функциональности. Поскольку такие вещи, как регулярное выражение, графика, звук, шифрование и т. Д., Не имеют единой платформы или стандарта, они не вписываются в стандартную библиотеку C.
Они подходят как библиотеки пользователей, которыми они являются в настоящее время.
Regex определяется как часть стандарта IEEE Std 1003.1: 2001 (POSIX)
Вот Handly список которых заголовки, в которых стандарт:
Но это не стандартная библиотека. Это просто POSIX. Как насчет систем без POSIX? – claws
Хорошая точка, регулярное выражение - такая полезная функция, но незначительные отклонения между реализациями регулярных выражений не так полезны. Многие системы без POSIX имеют значительную совместимость с стандартами POSIX во многих библиотеках, даже мой калькулятор Casio имеет некоторые функции POSIX, которые я думаю (через реализацию Hitachi C). – tovare
И это просто POSIX regexen. Они отличаются от PCRE или даже регулярных выражений Perl. Даже не начинайте со всех разных вкусов на других языках. :) –
Поскольку это функция библиотеки, которая потребует стандартизации на одном из языков регулярных выражений. Стандартные органы являются управляемыми коммитом, а не простой задачей.
В этом документе объясняется рационализация стандарта: http://www.open-std.org/jtc1/sc22/wg14/www/docs/C99RationaleV5.10.pdf, который может объяснить, почему.
Другая причина, поясняемая в документе. заключается в том, чтобы держать язык простым.
Имеется достаточно нескольких доступных загрузок, просто используйте их.
Точка C должна быть небольшой, но мощной. Поскольку регулярные выражения, как правило, представляют собой большую и сложную тему, она принадлежит библиотеке. Это очень плохо, хотя комитет C не «спонсирует» некоторые хорошо написанные, стандартные библиотеки C, алгоритмы/структуры данных. Их много. Я обычно придерживаюсь GNU «спонсируемых» библиотек, когда я могу, поскольку они доступны для большинства платформ, даже если они не всегда являются самыми легкими или наиболее эффективными в использовании. У них хороший баланс.
Поскольку регулярные выражения не являются существенными для языка программирования. Handy? Да, очень важно, когда вы в них нуждаетесь. Essential? Ни за что.
Веб-разработчики, естественно, будут рассматривать регулярные выражения как неотъемлемую особенность языка, поскольку они должны проверять все данные этой формы HTML. Разработчики, чей опыт всегда связан с одним из нескольких крупных серверов реляционных баз данных, будут учитывать необходимость поддержки SQL. Те, кто работает в научной области, потребуют поддержки «больших чисел» или тензоров. Разработчики графического интерфейса считают, что встроенный инструментарий GUI необходим. Некоторые люди имеют дело с XML весь день и считают поддержку XML необходимой ... и т. Д. Вы получаете идею. Этот список «основных предметов» может стать довольно большим, и такие языки, как Java, безусловно, взяли подход «кухонный раковина» к их массивным стандартным библиотекам. Я ценю, что C не является языком кухонной раковины в этом смысле.
Будьте осторожны, чтобы не предполагать, что ваша любимая функция языка является важной особенностью для всех остальных.
Можно спросить, почему сложные номера находятся в стандартном C, а затем ... – caf
@caf - Я думаю, что низкие висячие фрукты? То есть намного проще реализовать тогда регулярное выражение и помогает многим людям во встроенной и сигнальной обработке ... независимо от того, является ли это ошибочным или нет, я не буду высказывать свое мнение по поводу: P – detly
Вы упомянули встроенные системы. В встроенных системах доступна вся стандартная библиотека C? Я имею в виду, что существует множество функций (служб ОС), которые не имеют смысла во встроенных системах. Подобно обработке файлов, печати и т. Д. Они полностью зависят от базовой ОС и встроенной системы. – claws
Хороший ответ. Если идти дальше, можно спросить, почему файл ввода-вывода находится в стандартной библиотеке - ведь это тоже одна из многих возможных подсистемы ввода-вывода файлов, правильно? Я предполагаю, что это связано с тем, что C-наследие является основным языком системного программирования для UNIX, где файловая система играет очень важную роль практически для всего, кроме управления памятью (например, сохранения данных, драйверов устройств, IPC и т. Д.), , – stakx
Кроме того, мы могли бы немного сократить библиотеку, удалив эти громоздкие функции ввода/вывода консоли. –
Я не уверен, что этот ответ действительно летит. В конце концов, стандарт C предоставляет возможность «автономной» реализации, для которой многие более сложные функции являются необязательными. По сути, библиотека регулярных выражений на самом деле не является более специфичной для платформы или домена, чем 'printf()' - я бы назвал ее случайной историей больше всего на свете. – caf