On Fri, Oct 05 2018, Jeff King wrote: > On Fri, Oct 05, 2018 at 09:12:09PM +0200, Ævar Arnfjörð Bjarmason wrote: > >> > I'm not wild about declaring functions inside macros, just because it >> > makes tools like ctags like useful (but I have certainly been guilty of >> > it myself). I'd also worry that taking "code" as a macro parameter might >> > not scale (what happens if the code has a comma in it?) >> >> There's always the option of generating the C code as part of some build >> step and carrying around a big C file with various type-safe functions >> that only differ in the types they operate on. It can even be committed >> to source control. >> >> That sucks in some ways for sure, but is a lot friendlier for grepping, >> ctags etc. > > Yeah, in a lot of ways the C preprocessor is not great for larger-scale > code generation. I was hoping we could get away without having the > bodies of these functions as part of the generated bit, though. > > I think what René showed later in the thread is not too bad in that > respect. > >> I've just barely resisted the urge to include that thread where we were >> discussing making the code C++-compiler compatible in the References >> header :) > > Yes. The main thing I would want out of using C++ is type-safe, > efficient data structures. IIRC, early versions of C++ were implemented > via code generation, and we're basically walking down that same road. > > I'm not sure where the right cutoff is, though. It's nice to pick up > the solution somebody else produced, but requiring a C++ compiler to > build Git is a pretty big step[...] No comment on whether git should use C++... > that I imagine will create a lot of new problems. (We're just now > allowing C99 -- I don't even want to think about what kind of compiler > issues we'll run into on antique systems trying to use C++). ...But just on this point: I was under the impression that this problem was way easier with C++. I.e. reason we're just now using C99 for portable C projects is because Microsoft for years refused to put any effort into updating their compiler to support newer C versions, while keeping up-to-date with C++, and that this has only recently started changing: https://en.wikipedia.org/wiki/C99#Implementations Maybe there was some other popular vendor of C/C++ compilers that had the inverse of that story, but I'm not aware of any.