august 0.5.0

august 0.5.0

19. mars ble C++-biblioteket utgitt Juli, som implementerer innebygd domenespesifikt språk for å uttrykke parsere som utvidet grammatikk av syntaktiske uttrykk, og distribuert under MIT-lisensen.

Bibliotekets funksjoner:

  • Naturlig syntaks som minner om eksterne parsergeneratorspråk, med støtte for attributter og semantiske handlinger.
  • Evne til å arbeide med kontekstsensitive grammatikker med symboltabeller, betingelser og syntaktiske predikater.
  • De genererte parserne kompileres til bytekode og kjøres i en virtuell parsingmaskin.
  • Tydelig separasjon av syntaktiske og leksikalske regler med muligheten til å konfigurere implisitt hopping av mellomrom.
  • Støtte for direkte og indirekte venstrerekursjon, med prioritetsnivåer for å avgrense underuttrykk med blandet venstre- og høyrerekursjon.
  • Full støtte for UTF-8-tekstparsing, inkludert nivå 1 og delvis overholdelse av nivå 2 i den tekniske standarden UTS #18 Unicode regulære uttrykk.
  • Feilhåndtering og gjenoppretting ved bruk av merkede feil, gjenopprettingsregler og feilbehandlere.
  • Automatisk sporing av linje- og kolonnenummer, tilpassbar fanebredde og justering.
  • Bare overskriftsbibliotek som bare bruker standardbiblioteket og funksjonene til C++17-standarden. Fremtidig kompatibel med C++20 og C++23 standarder.
  • Relativt liten bibliotekstørrelse, med mål om å holde det totale antallet linjer i alle overskriftsfiler til mindre enn 6000 linjer med kortfattet kode.

Liste over endringer:

  • Det er implementert direktiver for samlinger og objektattributter. Nytt tariffdirektiv [e] syntetiserer en sekvens eller assosiativ beholder av type C som består av elementer satt sammen fra arvede eller syntetiserte attributter i uttrykk e. På samme måte er det nye syntetiseringsdirektiver [e], synthesize_shared [e] og synthesize_unique [e] for å syntetisere objekter, henholdsvis vanlige pekere og unike pekere, konstruert fra attributtene til komponentene i uttrykket e.
  • Synthesize_collect-direktivet er implementert, som kombinerer innsamlings- og syntetiseringsdirektivene for å forbedre kodelesbarheten og redusere antall maler når du bygger komplekse datastrukturer fra analyserte elementer. Dette er spesielt nyttig for å lage nestede samlinger, for eksempel arrays av objekter eller assosiative beholdere med komplekse verdityper.
  • Lagt til template class lug::recursive_wrapper for å håndtere sykliske avhengigheter i abstrakte syntakstrær, spesielt de som bruker std::variant.
  • Implementerte støtte for Unicode 16.0.0-standarden og lagt til støtte for byggeverktøy i CMakeLists.txt.
  • Kartleggingen mellom rekkevidde og ASCII-tegn har blitt optimalisert, noe som resulterer i betydelige ytelsesforbedringer for vanlige tekstbehandlingsoperasjoner. Lagt til spesialiserte snarveier for kun å behandle ASCII-tegn, som er betydelig raskere enn Unicode-behandlingskode.
  • Implementerte test-opkoder for å optimalisere feil og gjenta op-koder for å optimalisere hopping av mellomrom. Disse optimaliseringene vil være fullt aktivert i neste utgivelse etter planlagte transformasjon av uttrykkstre.
  • Forbedret håndtering av inngangskilder med forbedret buffering og feilrapportering for std::istream, og forbedret støtte for interaktiv modus som korrekt håndterer linje-for-linje-inndata for terminalsesjoner eller for linjeorienterte grammatikker.
  • Flyttet std::istream-støtte til en egen overskriftsfil . Dette reduserer kompileringstiden og minimerer overskriftsavhengigheter for prosjekter som ikke krever strømming I/O-funksjonalitet.
  • Omarbeidet parserfikseringslogikk ved å legge instruksjoner i lug::basic_parser for bedre å matche stackrammearkitekturendringene introdusert i versjon 0.4.0, som forbedret kodeorganisering og ytelse.
  • Rettet problem i parser eksempel BASIC, når egendefinerte funksjoner (f.eks. FNA(X)) ble fullført under evaluering. Dette ble forårsaket av endringer i versjon 0.4.0 som tilbakestilte lug::environment under nestede parseoperasjoner. En ny funksjon, lug::environment::should_reset_on_parse, er lagt til for å gi finkornet kontroll over denne oppførselen, slik at miljøet kan vedvare under nestede analyser når det er nødvendig.
  • En omfattende infrastruktur for testing av eksempelprogrammer er lagt til.
  • Inkluderingskataloghierarkiet har blitt gjenoppbygd.
  • For å gi bredere kompatibilitet har GitHub CI lagt til støtte for ytterligere kompilatorer (GCC 9/10/11/12, Clang 14/15/16/17).
  • Clang og MSVC statiske analysatorer er lagt til GitHub CI.
  • Lagt til Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) og Memory Sanitizer (MSan) til GitHub CI.
  • Lagt klangryddig integrasjon til GitHub CI.
  • GitHub CI har fjernet bruken av Ubuntu 20.04.

Kilde: linux.org.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster