> engage in incremental development.

Incremental development that goes the other way though (unless I have 
misunderstood) i.e. you have base C-code that is called from C++. If you need 
C++ from C, then you need macros to generate the stubs for each instantiated 
template, but if you need C from C++ then you can simply overload (no need for 
macros).

Best regards,

Jacob Faibussowitsch
(Jacob Fai - booss - oh - vitch)

> On Jul 26, 2022, at 09:51, Matthew Knepley <knep...@gmail.com> wrote:
> 
> On Tue, Jul 26, 2022 at 8:44 AM Jacob Faibussowitsch <jacob....@gmail.com> 
> wrote:
> > even more importantly we would need a huge amount of education as to what 
> > to use and what not to use otherwise our hacking habits will fill the 
> > source code with bad code.
> 
> As long as you never type “new” and “delete” then you are using modern C++ :)
> 
> > Based on Jacob's contributions even "modern" C++ requires lots of macros.
> 
> Not really. Most of the macros are in service of making C++-ish code work 
> from C, and are used as a convenience. If I didn’t have to make the C++ 
> callable from C, then we could remove many of the macros.
> 
> But the start of this thread made clear that this is _exactly_ what we want 
> to do, engage in incremental development.
> 
>    Matt
>  
> Admittedly PetscCall() and friends would need to stay (unless we mandate 
> C++23 https://en.cppreference.com/w/cpp/utility/basic_stacktrace) but now 
> that they are uniform it would also not be difficult to factor them out again.
> 
> Best regards,
> 
> Jacob Faibussowitsch
> (Jacob Fai - booss - oh - vitch)
> 
> > On Jul 26, 2022, at 09:26, Barry Smith <bsm...@petsc.dev> wrote:
> > 
> > 
> >   With C++ we would need good security guards on the MR who prevent use of 
> > the "bad old C++" paradigms and only allow use of proper modern techniques; 
> > even more importantly we would need a huge amount of education as to what 
> > to use and what not to use otherwise our hacking habits will fill the 
> > source code with bad code.
> > 
> >  Based on Jacob's contributions even "modern" C++ requires lots of macros. 
> > Macros are horrible because it makes using automatic transformations on the 
> > source code (that utilize the language structure and are not just regular 
> > expression based) almost impossible. We've been doing some refactoring 
> > recently (mostly Jacob with PetscCall and now I am adding more variants of 
> > PetscCall) and we have to do them in a semi-automatic way with regex and 
> > manual fixes which is painfully slow and prone to error; plus results in 
> > the code not being updated everywhere so outdated parts remain hidden away 
> > for future developers to trip over.  I would really like to use a language 
> > without macros, not one where macros are central and unavoidable.
> > 
> > 
> > 
> >> On Jul 26, 2022, at 9:07 AM, Jacob Faibussowitsch <jacob....@gmail.com> 
> >> wrote:
> >> 
> >> IMO C++ is the pragmatic choice here. 
> >> 
> >> - Anyone with a C compiler is virtually guaranteed to have a C++ compiler 
> >> these days, so no extra toolchain burden on users.
> >> - Our configure and build system already has all the infrastructure in 
> >> place for C++ builds.
> >> - We already do half-C-half-C++ in the codebase, so users would actually 
> >> never notice.
> >> - Modern C++ truly isn’t the unwieldy beast that C++03 was. Algorithms, 
> >> the container library, and all the additional type safety no longer 
> >> requires the insane template verbosity that it once did.
> >> - C++ has by far the widest user-base and adoption among all choices 
> >> given, and given the heavy buy-in from corporate America we are guaranteed 
> >> that C++ will see continued support for years (if not decades) to come.
> >> 
> >> Best regards,
> >> 
> >> Jacob Faibussowitsch
> >> (Jacob Fai - booss - oh - vitch)
> >> 
> >>> On Jul 26, 2022, at 08:30, Matthew Knepley <knep...@gmail.com> wrote:
> >>> 
> >>> On Mon, Jul 25, 2022 at 4:34 PM Barry Smith <bsm...@petsc.dev> wrote:
> >>> 
> >>>  A  major problem with writing a completely new version of a large code 
> >>> base is that one has to start with nothing and slowly build up to 
> >>> everything, which can take years. Years in which you need to continue to 
> >>> maintain the old version, people want to continue to add functionality to 
> >>> the old version, and people want to continue to use the old version 
> >>> because the new version doesn't have "the functionality the user needs" 
> >>> ready yet.
> >>> 
> >>> Is there an approach where we can have a new PETSc API/language/paradigm 
> >>> but start with a very thin layer on the current API so it just works from 
> >>> day one?
> >>>     • to this would seem to require if PETSc future is not in C, there 
> >>> has to be a very, very easy way and low error-prone way to wrap PETSc 
> >>> current to be called from the new language. For example, how petsc4py 
> >>> wraps seems too manual and too error-prone. C++ can easily and low-error 
> >>> prone call C, any other viable candidates?
> >>> This looked like the most promising thing about Zig. We could develop the 
> >>> new modules alongside the existing C, and throw them away
> >>> if we decide it is not worth it.
> >>> 
> >>>  Matt
> >>> 
> >>> -- 
> >>> What most experimenters take for granted before they begin their 
> >>> experiments is infinitely more interesting than any results to which 
> >>> their experiments lead.
> >>> -- Norbert Wiener
> >>> 
> >>> https://www.cse.buffalo.edu/~knepley/
> >> 
> > 
> 
> 
> 
> -- 
> What most experimenters take for granted before they begin their experiments 
> is infinitely more interesting than any results to which their experiments 
> lead.
> -- Norbert Wiener
> 
> https://www.cse.buffalo.edu/~knepley/

Reply via email to