mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-07-12 13:34:45 +03:00
209 lines
11 KiB
Markdown
209 lines
11 KiB
Markdown
# Hyperscan Change Log
|
|
|
|
This is a list of notable changes to Hyperscan, in reverse chronological order.
|
|
|
|
## [4.5.2] 2017-07-26
|
|
- Bugfix for issue #57: Treat characters between `\Q.\E` as codepoints in
|
|
UTF8 mode.
|
|
- Bugfix for issue #60: Use a portable flag for mktemp for fat runtime builds.
|
|
- Bugfix for fat runtime builds on AVX-512 capable machines with Hyperscan's
|
|
AVX-512 support disabled.
|
|
|
|
## [4.5.1] 2017-06-16
|
|
- Bugfix for issue #56: workaround for gcc-4.8 C++11 defect.
|
|
- Bugfix for literal matching table generation, reversing a regression in
|
|
performance for some literal matching cases.
|
|
- Bugfixes for hsbench, related to multicore benchmarking, portability fixes
|
|
for FreeBSD, and clarifying output results.
|
|
- CMake: removed a duplicate else branch that causes very recent (v3.9) builds
|
|
of CMake to fail.
|
|
|
|
## [4.5.0] 2017-06-09
|
|
- New API feature: approximate matching using the "edit distance" extended
|
|
parameter. This allows the user to request all matches that are a given edit
|
|
distance from an exact match for a pattern.
|
|
- Initial support for Intel(R) Advanced Vector Extensions 512 (Intel(R)
|
|
AVX-512), disabled by default. To enable it, pass `-DBUILD_AVX512=1` to
|
|
`cmake`.
|
|
- Major compile time improvements in many subsystems, reducing compile time
|
|
significantly for many large pattern sets.
|
|
- Internal reworking of literal matchers to operate on literals of at
|
|
most eight characters, with subsequent confirmation done in the Rose
|
|
interpreter. This reduces complexity and bytecode size and improves
|
|
performance for many pattern sets.
|
|
- Improve performance of the FDR literal matcher front end.
|
|
- Improve bucket assignment and other heuristics governing the FDR literal
|
|
matcher.
|
|
- Improve optimisation passes that take advantage of extended parameter
|
|
constraints (`min_offset`, etc).
|
|
- Introduce further lookaround specialisations to improve scanning performance.
|
|
- Optimise Rose interpreter construction to reduce the length of programs
|
|
generated in some situations.
|
|
- Remove the old "Rose" pattern decomposition analysis pass in favour of the
|
|
new "Violet" pass introduced in Hyperscan 4.3.0.
|
|
- In streaming mode, allow exhaustion (where the stream can no longer produce
|
|
matchers) to be detected in more situations, improving scanning performance.
|
|
- Improve parsing of control verbs (such as `(*UTF8)`) that can only occur at
|
|
the beginning of the pattern. Combinations of supported verbs in any order
|
|
are now permitted.
|
|
- Update version of PCRE used by testing tools as a syntax and semantic
|
|
reference to PCRE 8.40.
|
|
- Tuning support for Intel(R) microarchitecture code names Skylake, Skylake
|
|
Server, Goldmont.
|
|
- CMake: when building a native build with a version of GCC that doesn't
|
|
recognise the host compiler, tune for the microarch selected by
|
|
`-march=native`.
|
|
- CMake: don't fail if SQLite (which is only required to build the `hsbench`
|
|
tool) is not present.
|
|
- CMake: detect libc++ directly and use that to inform the Boost version
|
|
requirement.
|
|
- Bugfix for issue #51: make the fat runtime build wrapper less fragile.
|
|
- Bugfix for issues #46, #52: use `sqlite3_errmsg()` to allow SQLite 3.6.x to
|
|
be used. Thanks to @EaseTheWorld for the PR.
|
|
|
|
## [4.4.1] 2017-02-28
|
|
- Bugfixes to fix issues where stale data was being referenced in scratch
|
|
memory. In particular this may have resulted in `hs_close_stream()`
|
|
referencing data from other previously scanned streams. This may result in
|
|
incorrect matches being been reported.
|
|
|
|
## [4.4.0] 2017-01-20
|
|
- Introduce the "fat runtime" build. This will build several variants of the
|
|
Hyperscan scanning engine specialised for different processor feature sets,
|
|
and use the appropriate one for the host at runtime. This uses the "ifunc"
|
|
indirect function attribute provided by GCC and is currently available on
|
|
Linux only, where it is the default for release builds.
|
|
- New API function: add the `hs_valid_platform()` function. This function tests
|
|
whether the host provides the SSSE3 instruction set required by Hyperscan.
|
|
- Introduce a new standard benchmarking tool, "hsbench". This provides an easy
|
|
way to measure Hyperscan's performance for a particular set of patterns and
|
|
corpus of data to be scanned.
|
|
- Introduce a 64-bit GPR LimEx NFA model, which uses 64-bit GPRs on 64-bit
|
|
hosts and SSE registers on 32-bit hosts.
|
|
- Introduce a new DFA model ("McSheng") which is a hybrid of the existing
|
|
McClellan and Sheng models. This improves scanning performance for some
|
|
cases.
|
|
- Introduce lookaround specialisations to improve scanning performance.
|
|
- Improve the handling of long literals by moving confirmation to the Rose
|
|
interpreter and simplifying the hash table used to track them in streaming
|
|
mode.
|
|
- Improve compile time optimisation for removing redundant paths from
|
|
expression graphs.
|
|
- Build: improve support for building with MSVC toolchain.
|
|
- Reduce the size of small write DFAs used for small scans in block mode.
|
|
- Introduce a custom graph type (`ue2_graph`) used in place of the Boost Graph
|
|
Library's `adjacency_list` type. Improves compile time performance and type
|
|
safety.
|
|
- Improve scanning performance of the McClellan DFA.
|
|
- Bugfix for a very unusual SOM case where the incorrect start offset was
|
|
reported for a match.
|
|
- Bugfix for issue #37, removing execute permissions from some source files.
|
|
- Bugfix for issue #41, handle Windows line endings in pattern files.
|
|
|
|
## [4.3.2] 2016-11-15
|
|
- Bugfix for issue #39. This small change is a workaround for an issue in
|
|
Boost 1.62. The fix has been submitted to Boost for inclusion in a future
|
|
release.
|
|
|
|
## [4.3.1] 2016-08-29
|
|
- Bugfix for issue #30. In recent versions of Clang, a write to a variable was
|
|
being elided, resulting in corrupted stream state after calling
|
|
`hs_reset_stream()`.
|
|
|
|
## [4.3.0] 2016-08-24
|
|
- Introduce a new analysis pass ("Violet") used for decomposition of patterns
|
|
into literals and smaller engines.
|
|
- Introduce a new container engine ("Tamarama") for infix and suffix engines
|
|
that can be proven to run exclusively of one another. This reduces stream
|
|
state for pattern sets with many such engines.
|
|
- Introduce a new shuffle-based DFA engine ("Sheng"). This improves scanning
|
|
performance for pattern sets where small engines are generated.
|
|
- Improve the analysis used to extract extra mask information from short
|
|
literals.
|
|
- Reduced compile time spent in equivalence class analysis.
|
|
- Build: frame pointers are now only omitted for 32-bit release builds.
|
|
- Build: Workaround for C++ issues reported on FreeBSD/libc++ platforms.
|
|
(github issue #27)
|
|
- Simplify the LimEx NFA with a unified "variable shift" model, which reduces
|
|
the number of different NFA code paths to one per model size.
|
|
- Allow some anchored prefixes that may squash the literal to which they are
|
|
attached to run eagerly. This improves scanning performance for some
|
|
patterns.
|
|
- Simplify and improve EOD ("end of data") matching, using the interpreter for
|
|
all operations.
|
|
- Elide unnecessary instructions in the Rose interpreter at compile time.
|
|
- Reduce the number of inlined instantiations of the Rose interpreter in order
|
|
to reduce instruction cache pressure.
|
|
- Small improvements to literal matcher acceleration.
|
|
- Parser: ignore `\E` metacharacters that are not preceded by `\Q`. This
|
|
conforms to PCRE's behaviour, rather than returning a compile error.
|
|
- Check for misaligned memory when allocating an error structure in Hyperscan's
|
|
compile path and return an appropriate error if detected.
|
|
|
|
## [4.2.0] 2016-05-31
|
|
- Introduce an interpreter for many complex actions to replace the use of
|
|
internal reports within the core of Hyperscan (the "Rose" engine). This
|
|
improves scanning performance and reduces database size for many pattern
|
|
sets.
|
|
- Many enhancements to the acceleration framework used by NFA and DFA engines,
|
|
including more flexible multibyte implementations and more AVX2 support. This
|
|
improves scanning performance for many pattern sets.
|
|
- Improved prefiltering support for complex patterns containing very large
|
|
bounded repeats (`R{M,N}` with large `N`).
|
|
- Improve scanning performance of pattern sets with a very large number of
|
|
EOD-anchored patterns.
|
|
- Improve scanning performance of large pattern sets that use the
|
|
`HS_FLAG_SINGLEMATCH` flag.
|
|
- Improve scanning performance of pattern sets that contain a single literal by
|
|
improving the "Noodle" literal matcher.
|
|
- Small reductions in total stream state for many pattern sets.
|
|
- Improve runtime detection of AVX2 support.
|
|
- Disable -Werror for release builds, in order to behave better for packagers
|
|
and users with different compiler combinations than those that we test.
|
|
- Improve support for building on Windows with MSVC 2015 (github issue #14).
|
|
Support for Hyperscan on Windows is still experimental.
|
|
- Small updates to fix warnings identified by Coverity.
|
|
- Remove Python codegen for the "FDR" and "Teddy" literal matchers. These are
|
|
now implemented directly in C code.
|
|
- Remove the specialist "Sidecar" engine in favour of using our more general
|
|
repeat engines.
|
|
- New API function: add the `hs_expression_ext_info()` function. This is a
|
|
variant of `hs_expression_info()` that can accept patterns with extended
|
|
parameters.
|
|
- New API error value: add the `HS_SCRATCH_IN_USE` error, which is returned
|
|
when Hyperscan detects that a scratch region is already in use on entry to an
|
|
API function.
|
|
|
|
## [4.1.0] 2015-12-18
|
|
- Update version of PCRE used by testing tools as a syntax and semantic
|
|
reference to PCRE 8.38.
|
|
- Small updates to fix warnings identified by Coverity.
|
|
- Clean up and unify exception handling behaviour across GPR and SIMD NFA
|
|
models.
|
|
- Fix bug in handling of bounded repeat triggers with large gaps between them
|
|
for sparse repeat model.
|
|
- Correctly reject POSIX collating elements (`[.ch.]`, `[=ch=]`) in the parser.
|
|
These are not supported by Hyperscan.
|
|
- Add support for quoted sequences (`\Q...\E`) inside character classes.
|
|
- Simplify FDR literal matcher runtime by removing some static specialization.
|
|
- Fix handling of the POSIX `[:graph:]`, `[:print:]` and `[:punct:]` character
|
|
classes to match the behaviour of PCRE 8.38 in both standard operation and
|
|
with the UCP flag set. (Note: some bugs were fixed in this area in PCRE
|
|
8.38.) Previously Hyperscan's behaviour was the same as versions of PCRE
|
|
before 8.34.
|
|
- Improve performance when compiling pattern sets that include a large number
|
|
of similar bounded repeat constructs. (github issue #9)
|
|
|
|
## [4.0.1] 2015-10-30
|
|
- Minor cleanups to test code.
|
|
- CMake and other build system improvements.
|
|
- API update: allow `hs_reset_stream()` and `hs_reset_and_copy_stream()` to be
|
|
supplied with a NULL scratch pointer if no matches are required. This is in
|
|
line with the behaviour of `hs_close_stream()`.
|
|
- Disallow bounded repeats with a very large minimum repeat but no maximum,
|
|
i.e. {N,} for very large N.
|
|
- Reduce compile memory usage in literal set explansion for some large cases.
|
|
|
|
## [4.0.0] 2015-10-20
|
|
- Original release of Hyperscan as open-source software.
|