Bindings for Fortran 20xx, Python 3, Julia? If the bindings are not, more or 
less, automatically generated, that would be problematic.

> On Jul 26, 2022, at 10:20 AM, Jed Brown <j...@jedbrown.org> wrote:
> 
> I have to put in a good word for Rust. There are many parallels in capability 
> with modern C++, but the compiler enforces many good practices (and 
> guarantees safety), compiler error and warning messages are really useful, 
> and the tooling is phenomenal on multiple fronts, from packaging to 
> refactoring to documentation and testing. We have a prototype 
> https://github.com/petsc/petsc-rs <https://github.com/petsc/petsc-rs> that 
> we'd love to get feedback on.
> 
> On Tue, Jul 26, 2022, at 8:07 AM, Jacob Faibussowitsch wrote:
>> >  And for programmers today who program by googling, googling does not 
>> > distinguish between good modern C++ solutions and crappy 15 year old 
>> > solutions that still work but should not be used today.
>> 
>> Sure, all jokes aside the difference between old and modern C++ is broadly 
>> speaking:
>> 
>> 1. If you find yourself specifying the type, you are using old C++ -> always 
>> prefer auto, and duck typing
>> 2. If you find yourself managing memory directly, you are using old C++ -> 
>> always prefer smart pointers
>> 3. If you find yourself calling begin/end, acquire/release, do/undo function 
>> pairs you are using C -> prefer to wrap everything in RAII types.
>> 
>> The ability to forgo types and write generic algorithms that only require 
>> *functionality* (and being able to assert this at compile-time) rather than 
>> a specific type name. Having an explicit memory ownership model that is 
>> enforced by construction via smart pointers. Making it impossible not to 
>> clean up after yourself via RAII.
>> 
>> All “modern” C++ does is make the above more ergonomic and easier to do.
>> 
>> Best regards,
>> 
>> Jacob Faibussowitsch
>> (Jacob Fai - booss - oh - vitch)
>> 
>> > On Jul 26, 2022, at 09:55, Barry Smith <bsm...@petsc.dev 
>> > <mailto:bsm...@petsc.dev>> wrote:
>> > 
>> > 
>> > 
>> >> On Jul 26, 2022, at 9:43 AM, Jacob Faibussowitsch <jacob....@gmail.com 
>> >> <mailto: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++ :)
>> > 
>> > As joke, this is good, but reality is that C++ has 30 years of accumulated 
>> > junk, and I don't know of any automated way to prevent the use of that 
>> > junk from being used in PETSc, there is no C++ compiler flag 
>> > --std-no-old-junk. And for programmers today who program by googling, 
>> > googling does not distinguish between good modern C++ solutions and crappy 
>> > 15 year old solutions that still work but should not be used today.
>> > 
>> >> 
>> >>> 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.
>> >> 
>> >> Admittedly PetscCall() and friends would need to stay (unless we mandate 
>> >> C++23 https://en.cppreference.com/w/cpp/utility/basic_stacktrace 
>> >> <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.
>> > 
>> > PetscCall is because C does not have exceptions. Presumably, a modern C++ 
>> > PETSc would use exceptions for all error handling so would not need 
>> > PetscCall and friends at all? The stack on error would be handled in a 
>> > modern C++ way. 
>> >> 
>> >> Best regards,
>> >> 
>> >> Jacob Faibussowitsch
>> >> (Jacob Fai - booss - oh - vitch)
>> >> 
>> >>> On Jul 26, 2022, at 09:26, Barry Smith <bsm...@petsc.dev 
>> >>> <mailto: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 
>> >>>> <mailto: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 
>> >>>>> <mailto:knep...@gmail.com>> wrote:
>> >>>>> 
>> >>>>> On Mon, Jul 25, 2022 at 4:34 PM Barry Smith <bsm...@petsc.dev 
>> >>>>> <mailto: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/ 
>> >>>>> <https://www.cse.buffalo.edu/~knepley/>
>> >>>> 
>> >>> 
>> >> 
>> > 

Reply via email to