jumprope-rs VS regex

Compare jumprope-rs vs regex and see what are their differences.

regex

An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs. (by rust-lang)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
jumprope-rs regex
8 91
129 3,355
- 1.4%
4.0 8.9
12 months ago 13 days ago
Rust Rust
GNU General Public License v3.0 or later Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

jumprope-rs

Posts with mentions or reviews of jumprope-rs. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-10-09.
  • Text Showdown: Gap Buffers vs. Ropes
    3 projects | news.ycombinator.com | 9 Oct 2023
    Thanks for all the work in bootstrapping this part of the ecosystem! I opened an issue[1] on the memory issue for jumprope. It seems to really come down to the large size of skiplist nodes relative to the text.

    I did some testing with JumpRopeBuf, but ultimately did not include it because I was comparing things from an "interactive editor" perspective where edits are applied immediately instead of a collaborative/CRDT use case where edits are async. But it did perform very well as you said! I feel like JumpRopeBuf feels similar to a piece table, where edits are stored separately and then joined reading.

    [1] https://github.com/josephg/jumprope-rs/issues/5

  • How to Survive Your Project's First 100k Lines
    4 projects | news.ycombinator.com | 4 May 2023
    Every piece of a large program should be tested like this. And if you can, test your whole program like this too. (Doable for most libraries, databases, compilers, etc. This is much harder for graphics engines or UI code.)

    I've been doing this for years and I can't remember a single time I set something like this up and didn't find bugs. I'm constantly humbled by how effective fuzzy bois are.

    This sounds complex, but code like this will usually be much smaller and easier to maintain than a thorough unit testing suite.

    Here's an example from a rope (complex string) library I maintain. The library lets you insert or delete characters in a string at arbitrary locations. The randomizer loop is here[1]. I make Rope and a String, then in a loop make random changes and then call check() to make sure the contents match. And I check and all the expected internal invariants in the rope data structure hold:

    [1] https://github.com/josephg/jumprope-rs/blob/ae2a3f3c2bc7fc1f...

    When I first ran this test, it found a handful of bugs in my code. I also ran this same code on a few rust rope libraries in cargo, and about half of them fail this test.

  • Announcing crop, the fastest UTF-8 text rope for Rust
    9 projects | /r/rust | 26 Feb 2023
    Jumprope author here. Thanks for the quick test! I just updated the benchmarks in jumprope/rope_benches to include Crop, and it looks to me like jumprope is about 2x faster than crop:
  • Google's OSS-Fuzz expands fuzz-reward program to $30000
    3 projects | news.ycombinator.com | 2 Feb 2023
    I’d go further and say that writing most software without fuzz testing is insane. Fuzz testing is one of those things they should teach in school. They’re a super useful technique - up there with TDD and it’s a tragedy they aren’t more wildly used.

    Fuzzers are so good because they find so many bugs relative to programmer effort (lines of code). They’re some of the most efficient testing you can do. If I had to choose between a full test suite and a fuzzer, I’d choose the fuzzer.

    I use fuzzers whenever I have a self contained “machine” in my code which should have well defined behaviour. For example, a b-tree. I write little custom fuzzers each time. The fuzzing code randomly mutates the data structure and keeps a list of the expected btree content. Then periodically I verify that the list and the btree agree on what should be contained inside the list. In the project I’m working on at the moment, I have about 6 different fuzzers sprinkled throughout my testing code. (Btree fuzzer, rope fuzzer, file serialisation fuzzer, a few crdt fuzzers, and so on).

    Writing fuzzers is quite devastating for the ego. Usually the first time I point a fuzzer at my code, even when my code has a lot of tests, the fuzzer throws an assertion failure instantly. “Iteration 2 … the state doesn’t match what was expected”.

    Getting a fuzzer running all night without finding any bugs is a balm for the soul.

    The code looks like this, if anyone is curious. Here’s a fuzzer for a rope (fancy string) implementation: https://github.com/josephg/jumprope-rs/blob/master/tests/tes...

  • The case against an alternative to C
    9 projects | news.ycombinator.com | 8 Aug 2022
    Yep. A few years ago I implemented a skip list based rope library in C[1], and after learning rust I eventually ported it over[2].

    The rust implementation was much less code than the C version. It generated a bigger assembly but it ran 20% faster or so. (I don't know why it ran faster than the C version - this was before the noalias analysis was turned on in the compiler).

    Its now about 3x faster than C, thanks to some use of clever layered data structures. I could implement those optimizations in C, but I find rust easier to work with.

    C has advantages, but performance is a bad reason to choose C over rust. In my experience, the runtime bounds checks it adds are remarkably cheap from a performance perspective. And its more than offset by the extra optimizations the rust compiler can do thanks to the extra knowledge the compiler has about your program. If my experience is anything to go by, naively porting C programs to rust would result in faster code a lot of the time.

    And I find it easier to optimize rust code compared to C code, thanks to generics and the (excellent) crates ecosystem. If I was optimizing for runtime speed, I'd pick rust over C every time.

    [1] https://github.com/josephg/librope

    [2] https://github.com/josephg/jumprope-rs

  • Linked lists and Rust
    1 project | /r/rust | 7 Oct 2021
    Linked lists are also the basis for skip lists - which are awesome. One of the only data structures I know of which needs a random number generator to work correctly. I have a rope implementation that I tidied up over the last few days which uses a skip list. Its several times faster than the next fastest library I know of (ropey). They're both O(log n), but for some reason jumprope (with skip lists) still ended up several times faster than ropey's b-trees.

regex

Posts with mentions or reviews of regex. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-01-24.
  • Zed is now open source
    26 projects | news.ycombinator.com | 24 Jan 2024
    The homepage has a benchmark that compares Zed's "insertion latency" to other editors, and this is the description:

    > Open input.rs at the end of line 21 in rust-lang/regex. Type z 10 times, measure how long it takes for each z to display since hitting the z key.

    Could someone clarify what that means? My interpretation of that was to go to https://github.com/rust-lang/regex/blob/master/regex-cli/arg... and start typing 'z' at the end of line 21, but that doesn't seem to make any sense. I guess that repo got refactored and those instructions are out of date?

  • CryptoFlow: Building a secure and scalable system with Axum and SvelteKit - Part 3
    3 projects | dev.to | 8 Jan 2024
    We also used the avenue to sluggify the question title. We used regex to fish out and replace all occurrences of punctuation and symbol characters with an empty string and using the itertools crate, we joined the words back together into a single string, where each word is separated by a hyphen ("-").
  • Command Line Rust is a great book
    4 projects | /r/rust | 8 Dec 2023
    Command-Line Rust taught me how to use crates like clap, assert_cmd, and regex. I felt lost before because I didn't know about Rust's ecosystem--which is arguably as important as the language itself. Also, looking up and comparing libraries is a tiring task! blessed.rs is nice but Command-Line Rust really saved me from analysis paralysis.
  • Common Rust Lifetime Misconceptions
    4 projects | news.ycombinator.com | 4 Dec 2023
    burntsushi actually regrets making regex replace return a Cow: https://github.com/rust-lang/regex/issues/676#issuecomment-6.... I’m glad it does, and wish it took an impl Into> there, for the reasons discussed in the issue, but burntsushi has a lot more experience of the practical outcomes of this. Just something more to think about.
  • Advent of Code 2023 is nigh
    19 projects | news.ycombinator.com | 1 Dec 2023
    I'm not familiar with the AoC problem. You might be able to. But RegexSet doesn't give you match offsets.

    You can drop down to regex-automata, which does let you do multi-regex search and it will tell you which patterns match[1]. The docs have an example of a simple lexer[2]. But... that will only give you non-overlapping matches.

    You can drop down to an even lower level of abstraction and get multi-pattern overlapping matches[3], but it's awkward. The comment there explains that I had initially tried to provide a higher level API for it, but was unsure of what the semantics should be. Getting the starting position in particular is a bit of a wrinkle.

    [1]: https://docs.rs/regex-automata/latest/regex_automata/meta/in...

    [2]: https://docs.rs/regex-automata/latest/regex_automata/meta/st...

    [3]: https://github.com/rust-lang/regex/blob/837fd85e79fac2a4ea64...

  • Text Showdown: Gap Buffers vs. Ropes
    3 projects | news.ycombinator.com | 9 Oct 2023
    It’s not quite that simple, but folks are working on it.

    https://github.com/rust-lang/regex/issues/425#issuecomment-1...

    https://github.com/helix-editor/helix/pull/211#issuecomment-...

  • Please ask questions (rust-lang/regex)
    1 project | /r/hypeurls | 30 Aug 2023
    1 project | news.ycombinator.com | 28 Aug 2023
  • ScripterC - Rust-lang set
    2 projects | /r/scripterc | 13 Aug 2023
    Dependencies used: - regex - unicode_reader - rust decimal - tokio
  • Regex Engine Internals as a Library
    5 projects | news.ycombinator.com | 5 Jul 2023
    https://www.cs.princeton.edu/courses/archive/fall19/cos226/l... and https://kean.blog/post/lets-build-regex are excellent introductions to implementing a (very) simplified regex engine: construct a nondetermistic finite state automaton for the regex, then perform a graph search on the resulting digraph; if the vertex corresponding to your end state is reachable, you have a match.

    I think this exercise is valuable for anyone writing regexes to not only understand that there's less magic than one might think, but also to visualize a bunch of balls bouncing along an NFA - that bug you inevitably hit in production due to catastrophic backtracking now takes on a physical meaning!

    Separately re: the OP, https://github.com/rust-lang/regex/issues/822 (and specifically BurntSushi's comment at the very end of the issue) adds really useful context to the paragraph in the OP about niche APIs: https://blog.burntsushi.net/regex-internals/#problem-request... - searching with multiple regexes simultaneously against a text is both incredibly complex and incredibly useful, and I can't wait to see what the community comes up with for this pattern!

What are some alternatives?

When comparing jumprope-rs and regex you can also consider the following projects:

crop - 🌾 A pretty fast text rope

re2 - modern regular expression syntax everywhere with a painless upgrade path [Moved to: https://github.com/SonOfLilit/kleenexp]

librope - UTF-8 rope library for C

node-re2 - node.js bindings for RE2: fast, safe alternative to backtracking regular expression engines.

Odin - Odin Programming Language

zig - General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

EmeraldC - The Ultimate C Preprocessor

ngrams - (Read-only) Generate n-grams

WebKit - Home of the WebKit project, the browser engine used by Safari, Mail, App Store and many other applications on macOS, iOS and Linux.

regex-benchmark - It's just a simple regex benchmark of different programming languages.

buffet - All-inclusive Buffer for C

whatlang-rs - Natural language detection library for Rust. Try demo online: https://whatlang.org/