Made with KolourPaint and screenshots from Kate (with the GitHub theme).

  • pivot_root@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    13 hours ago

    std::string doesn’t have a template type for the allocator. You are stuck using the verbose basic_string type if you need a special allocator.

    But, of course, nobody sane would write that by hand every time. They would use a typedef, like how std::string is just a typedef for std::basic_string<char, std::char_traits<char>, std::allocator<char>>. Regardless, the C++ standard library is insanely verbose when you start dropping down into template types and using features at an intermediate level. SFINAE in older versions of C++ was mindfuck on the best of days, for example.

    Don’t get me wrong, though. I’m not saying Rust is much better. Its saving grace is its type inference in let expressions. Without it, chaining functional operations on iterators would be an unfathomable hellscape of Collect<Skip<Map<vec::Iter<Item = &'a str>>>>

    • calcopiritus@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      4 hours ago

      As long as you call .collect() on it at the end, don’t need to write the entire type as it is a method with a generic parameter, and returns that generic.

      The intermediate iterators though, those are hell. Especially if you pass it to a lambda and for some reason rust can’t infer the type.

      I once came across a parsing library that did the parsing with basically just the type system. It was absolute hell to debug and build. Types of parsers would be hundreds of characters long. It would take tens of minutes to build a simple parser.

      I don’t know much much time it would take to build a complex parser, since it was unable to. it reached the max type generic depth of the rust compiler, and would just refuse to compile.

      I believe it was called Chomsky or Chumsky or something like that. Discovering nom was a blessing.

    • Ajen@sh.itjust.works
      link
      fedilink
      arrow-up
      4
      ·
      13 hours ago

      Yeah, I missed the custom allocator at first. I thought I deleted my comment fast enough, but I guess you were faster. :)