|
|
Subscribe / Log in / New account

Nftables reaches 1.0

Nftables reaches 1.0

Posted Aug 28, 2021 20:25 UTC (Sat) by pbonzini (subscriber, #60935)
In reply to: Nftables reaches 1.0 by hailfinger
Parent article: Nftables reaches 1.0

> gcc error messages from the era before llvm,

Ahah, that's actually a coincidence. GCC error messages for C were bad mostly due to the usage of yacc for the parser. When the parser was rewritten as recursive decent in 2004 by Joseph Myers that laid the foundation for improving error recovery. They then finally improved when GCC developers including myself got fed up of a few particularly egregious cases[1][2].

But competition with llvm wasn't particularly involved. In fact for C++ (which used recursive descent since before clang was started) error message quality has always been comparable to clang.

More recently (and long after I had stopped working on GCC), David Malcolm did a huge amount of work on caret diagnostics, where GCC's front ends were indeed lagging behind. But that's a different story.

[1] https://gcc.gnu.org/legacy-ml/gcc-patches/2010-10/msg0261...

[2] https://gcc.gnu.org/legacy-ml/gcc-patches/2010-11/msg0180...


to post comments

Nftables reaches 1.0

Posted Aug 28, 2021 21:24 UTC (Sat) by Paf (subscriber, #91811) [Link] (1 responses)

My experience with C++ errors around 2010-2011 (with whatever was in Ubuntu at the time) was there was a lot of multi-page spew when using even fairly simple templates?

Nftables reaches 1.0

Posted Aug 30, 2021 13:22 UTC (Mon) by pbonzini (subscriber, #60935) [Link]

I have never done serious C++, but I think the issue there was that the error messages were overly precise and expanded the same template typenames over and over. At some point a couple tweaks were made, teaching the compiler about default template arguments and typedefs.

In C, the problem was abysmal error recovery, causing dozens of cascaded errors for a single missing semicolon or fat-fingered type name (such as "intt" or "unsgined char"). With a recursive descent parser it's relatively easy and maintainable to add heuristics that look ahead and insert missing tokens or fix things up as necessary. For example if you see two consecutive unknown identifiers, it's likely that the first is a misspelled type and the second is a variable name. With some luck, that will remove a lot of errors involving that variable, because the compiler now knows about it and treats it as declared.


Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds