Date: Tue, 23 Jan 2024 08:55:40 -0600 From: "Robert R. Russell" <robert@rrbrussell.com> To: David Chisnall <theraven@FreeBSD.org>, freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Message-ID: <20240123085540.42f8b70c@venus.private.rrbrussell.com> In-Reply-To: <D846A8E3-1FE3-4A82-B9C3-5FA3BE7406A0@FreeBSD.org> References: <CAOtMX2hAUiWdGPtpaCJLPZB%2Bj2yzNw5DSjUmkwTi%2B%2BmyemehCA@mail.gmail.com> <1673801705774097@mail.yandex.ru> <CANCZdfpqWgvV_RCvVO_pvTrmajQFspW%2BQ9TM_Ok3JrXZAfeAfA@mail.gmail.com> <ef4ad207-5899-42b6-8728-bc46f1417e9e@antonovs.family> <202401210751.40L7pWEF011188@critter.freebsd.dk> <20240121102421.GE14773@memo2.memo.frmug.org> <2f38cbcd-61a9-42b7-b7e6-ebd261fe66da@FreeBSD.org> <20240122164543.066e3cec@venus.private.rrbrussell.com> <D846A8E3-1FE3-4A82-B9C3-5FA3BE7406A0@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 23 Jan 2024 09:41:01 +0000 David Chisnall <theraven@FreeBSD.org> wrote: > On 22 Jan 2024, at 22:45, Robert R. Russell <robert@rrbrussell.com> > wrote: > >=20 > > Having had the luxury or curse of not being stuck with only one > > programming language I have learned usable pieces of several. C++ is > > not on that list even though I have the most formal education in it. > > My best way of answering why is this. Would you write or use a C++ > > codebase maintained by the average developer with just Vi? Up to > > C++03 I can say yes, after that the answer is no. =20 >=20 > I have no idea what this means. There=E2=80=99s absolutely nothing in ne= wer > C++ that makes it harder to write with a text editor. There is a lot > that makes it easier to write correctly. > > For reference LLVM is about 4MLoC (and about 5M lines of comments, > something that FreeBSD could definitely learn from) and is written in > modern C++. I don=E2=80=99t think I=E2=80=99ve ever used an editor other= than vim to > work on it. I don=E2=80=99t use nvi, because it=E2=80=99s not the =E2=80= =9880s anymore. >=20 > I use ALE with vim, which integrates with clangd via LSP and provides > autocompletion and error reporting for anything that can generate a > compile_commands.json. That=E2=80=99s not specific to C++. I wouldn=E2= =80=99t want > to write C without syntax highlighting, autocompletion, or live error > checking either. It=E2=80=99s possible to do so for C or C++, but you=E2= =80=99ll be > less productive. > > > A consequence of Microsoft's "Welcome back to C++" item that may > > have gotten missed is what resources are they spending to enforce > > compliance with a certain C++ standard? =20 >=20 > I have no idea what this means. =E2=80=98Compliance with a certain C++ > standard=E2=80=99 is a thing that your compiler tells you when you try to > compile. =20 >=20 > > Particularly, to enforce the restrictions on anti-patterns? =20 >=20 > That varies from project to project. I generally use clang-tidy and > clang-format in pre-merge hooks in CI for the projects that I worked > on at MS and that I work on personally. And, of course, code review. > Automated tooling is no substitute for code review. =20 > > > Cargo needs approximately a dozen lines in a > > configuration file to restrict its upstream sources. That includes > > whitespace and formatting. =20 >=20 >=20 > Here is the script that runs formatting and static analysis across a > codebase that I maintain: >=20 > https://github.com/microsoft/cheriot-rtos/blob/main/scripts/run_clang_tid= y_format.sh >=20 > Almost all of the complexity is in *not* running it on files that we > have imported from elsewhere or where, for compliance with external > standards, we don=E2=80=99t want to enforce our naming rules, and for fin= ding > the relevant toolchain files. The actual checker bit is right at the > end. >=20 > Most projects run this kind of check through their build system, but > we wanted to run it on headers in isolation as well as on full > compilation units. =20 >=20 > David >=20 The specific anti-patterns is was thinking of in both instances is called Meta Template Programming. Back in C++03 I just used the template system as a form of generics. In that role it works well and with the new smart pointers definitely improves some of the older problems C++ had. However, C++ definitely has a complexity cult and a ricer cult in its community. The overlap between the two appears to be fairly large which worries me. I have less reservations about C++ than I did earlier, though I think the build system may require major surgery to support it well.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20240123085540.42f8b70c>