CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++: compile time regular expression

godrik
godrik
Niveau 30
06 avril 2019 à 06:58:38

Je viens de voir ce talk de cppcon: https://www.youtube.com/watch?v=3WGsN_Hp9QY
Quelle idee de fou! Je suis fan!

Vous en connaissez d'autres des comme ca?

blackapplex
blackapplex
Niveau 10
06 avril 2019 à 11:10:37

C'est pour faire des regex qui s'exécutent plus rapidement?
J'ai du mal à voir l'idée de fou (j'ai probablement pas vu/compris un truc) :hap:

godrik
godrik
Niveau 30
06 avril 2019 à 17:45:03

Oui c'est pour faire des regex rapide,
Typiquement quand tu fais des regex, ce que tu fais, c'est que tu passe la regex a un compilateur de regex qui va produire un automate a etat fini sous la forme d'un graphe d'etat annote. Et probablement tu fais de la normalization et ce genre de chose sur l'automate.
Quand tu parses la regex, tu passe la chaine que tu testes dans l'automate caractere par caractere. Et tu suis la position dans le graphe, tu regarde les transitions et cie.
Ce que cette lib la fait est de dire: je connais la regex a la compilation. Donc j'ai pas besoin de generer un graphe. Je peux directement ecrire le code qui va parser la regex. Du coup j'ai pas besoin de creer un graphe en memoire, de traverser les voisins pour chercher un match, ... Je peux directement pondre le code qui teste cette regex la en particulier. Et comme je la passe au compilateur il peut faire tout un tas d'optimization pour reduire la pression registre, il n'a jamais besion de faire un appel de fonction, il n'y a pas de graphe a charger donc il n'y a pas d'access memoire autre que la chaine a tester, ...

En C++ "ancien" tu aurais besoin de decrire la regex avec un imbroglio de template imbitable. Mais comme c'est du C++ moderne, tu peux utiliser les fonctionnalite de literal pour juste ecrire la regex dans une chaine de caractere.
Et tu te retrouve avec: une semantique utilisateur qui ressemble a ce que tu verai en perl ou en python. Et avec le moteur d'expression reguliere le plus rapide du monde parcecque le compilateur optimise directement cette regex en particulier.

blackapplex
blackapplex
Niveau 10
07 avril 2019 à 20:37:15

Oh ok, et vu qu'on connait probablement les regexp à la compilation dans 99% des cas, ça permet de faire que les programmes qui se basent sur des regex soient ultra rapides et pratiques à coder :noel:

(et pendant ce temps là, moi je fais des appels systèmes en python pour lancer des grep :noel: )

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment