2010-07-15 3 views

Répondre

14

Les expressions rationnelles n'appartiennent pas plus au langage C qu'une bibliothèque de sons, une bibliothèque graphique ou une bibliothèque de chiffrement. Cela réduirait la nature générale de la langue et inhiberait grandement son utilisation en tant que langage incorporé petit et efficace.

La philosophie de C était d'avoir un jeu de mots de langage très petit et efficace avec des bibliothèques standardisées pour la couche de fonctionnalité suivante. Étant donné que des éléments tels que regex, graphiques, sons, cryptage, etc. n'ont pas de plate-forme ou de norme unique, ils ne correspondent pas à la bibliothèque C standard.

Ils s'adaptent mieux en tant que bibliothèques utilisateur, ce qu'ils sont actuellement.

+2

Bonne réponse. Si l'on allait encore plus loin, on pourrait se demander pourquoi les E/S de fichiers sont dans la bibliothèque standard - après tout, c'est aussi un sous-système d'E/S de fichiers, n'est-ce pas? Je suppose que cela est dû à l'héritage de C comme principal langage de programmation système pour UNIX, où le système de fichiers joue un rôle très important pour tout sauf la gestion de la mémoire (persistance des données, pilotes de périphériques, IPC, etc.) . – stakx

+0

En outre, nous pourrions réduire encore plus la bibliothèque en supprimant ces fonctions d'entrée/sortie de console encombrantes. –

+3

Je ne suis pas sûr que cette réponse vole vraiment. Après tout, le standard C offre l'option d'une implémentation "autonome", pour laquelle beaucoup de fonctions plus compliquées sont optionnelles. Au fond, une bibliothèque d'expressions rationnelles n'est pas vraiment plus spécifique à une plate-forme ou à un domaine que 'printf()' - j'aurais tendance à l'appeler un accident de l'histoire plus que toute autre chose. – caf

7

Regex est définie dans le cadre de la norme IEEE 1003.1: 2001 (Posix)

Voici une liste handly dont les en-têtes sont dans lesquels la norme:

http://www.schweikhardt.net/identifiers.html

+0

Mais ce n'est pas la bibliothèque standard. C'est juste POSIX. Qu'en est-il des systèmes non POSIX? – claws

+0

Bon point, regex est une fonction si utile, mais les différences mineures entre les implémentations de regex ne sont pas aussi utiles. Beaucoup de systèmes non POSIX ont une compatibilité significative avec les normes POSIX dans de nombreuses bibliothèques, même si mon calculateur Casio a des fonctionnalités POSIX (je pense que c'est le cas avec l'implémentation Hitachi C). – tovare

+0

Et ce ne sont que POSIX regexen. Ils sont différents de PCRE, ou même des expressions régulières Perl. Ne commencez même pas avec toutes les différentes saveurs disponibles dans d'autres langues. :) –

4

Parce qu'il est une caractéristique de bibliothèque nécessiterait de standardiser sur l'un des langages regex. Les organismes standard sont pilotés par le comité, ce qui n'est pas une tâche facile.

Ce document explique la rationalisation de la norme: http://www.open-std.org/jtc1/sc22/wg14/www/docs/C99RationaleV5.10.pdf qui pourrait expliquer pourquoi.
Une autre raison expliquée dans le doc. est de garder la langue simple.

Il y a pas mal de téléchargements disponibles, il suffit d'en utiliser un.

1

Le point de C doit être petit mais puissant. Comme les expressions régulières sont généralement un sujet vaste et complexe, elles appartiennent à une bibliothèque. Il est cependant dommage que le comité C ne «parraine» pas certaines bibliothèques d'algorithmes et de structures de données C standard bien écrites. Il y en a une pléthore. J'ai tendance à m'en tenir aux librairies sponsorisées par GNU dès que je peux car elles sont disponibles pour la plupart des plateformes, même si elles ne sont pas forcément les plus faciles à utiliser. Ils font un bel équilibre.

3

Parce que les expressions régulières ne sont pas essentielles à un langage de programmation. Pratique? Oui, très bien, quand vous en avez besoin. Essentiel? En aucune façon.

Les développeurs Web considéreront naturellement les expressions régulières comme une caractéristique essentielle d'un langage, car elles doivent valider toutes ces données de formulaire HTML. Les développeurs dont l'expérience est toujours basée sur l'un des rares serveurs de base de données relationnels de grande taille considèrent le support SQL comme essentiel. Ceux qui travaillent dans le domaine scientifique auront besoin de soutien pour les «grands nombres» ou tenseurs. Les développeurs de GUI pensent qu'une boîte à outils GUI intégrée est essentielle. Certaines personnes traitent avec XML toute la journée et considèrent que le support XML est essentiel .... etc vous avez l'idée. Cette liste d '«éléments essentiels» peut devenir très importante, et des langages comme Java ont certainement adopté l'approche «évier de cuisine» de leurs énormes bibliothèques standard. Je comprends que C n'est pas un langage de cuisine en ce sens.

Faites attention de ne pas supposer que votre fonctionnalité de langue préférée est une fonctionnalité essentielle pour tout le monde.

+2

On pourrait se demander pourquoi les nombres complexes sont maintenant dans la norme C ... – caf

+0

@caf - Je pense à des fruits à portée de main? C'est beaucoup plus facile à implémenter puis regex, et aide beaucoup de gens dans le traitement embarqué et le signal ... si cela est erroné ou non, je n'offrirai pas une opinion sur: P – detly

+0

Vous avez mentionné les systèmes embarqués. Dans les systèmes embarqués, toute la bibliothèque standard C est disponible? Je veux dire qu'il y a beaucoup de fonctions (services du système d'exploitation) qui n'ont pas de sens dans les systèmes embarqués. Comme la manipulation de fichiers, l'impression, etc. Ils dépendent complètement du système d'exploitation sous-jacent et du système embarqué. – claws

Questions connexes