> Yes, Python exposes the “ast” module for direct introspection of Python code 
> https://docs.python.org/3/library/ast.html.

  This looks good. We write the object hierarchy completely in Python with 
"sample" implementations in Python. From the resulting AST, we automatically 
generate the C++ class hierarchy, Fortran 2008 class monstrosities, some kind 
of reasonable mapping to Julia, a mapping to C, we can also have checkers on 
the AST to ensure we are following all our style rules. In addition, 
presumably, this would make semi-automatic refactoring of the Python code 
straightforward.  I don't think that "Python famously optimizes almost nothing" 
is important in our case. In other words the Python AST becomes our SIDL.

  I would say C++ is immediately out of the running as the base implementation 
language since there cannot be this clean automation because of the clang 
crappy AST, which I have heard from others also.

  Note: our basic building blocks must cleanly support derivative-enabled 
libraries everywhere, including the API mapping to other languages. So we need 
to keep this in mind.


> On Jul 31, 2022, at 12:31 PM, Jacob Faibussowitsch <jacob....@gmail.com> 
> wrote:
> 
> Responding to 2 things here:
> 
>> Jacob, would you consider VTK to be "Modern C++"? It was designed in the 90s 
>> and I think C++11 isn't widely used (architecturally) since it was first 
>> allowed a few years ago.
> 
> 
> I don’t know, I have personally never interacted or read their codebase. 
> Certainly any library that is pre-C++11 will have old C++ cruft. To give a 
> counter-example, I would consider Kokkos or Thrust to be relatively modern 
> C++ libraries.
> 
>> Does clang work with a high enough level of abstraction in its 
>> representation of C++ to map directly to Python classes, for example.
> 
> Sure, we can walk the Clang AST. But then we are in the business of writing a 
> domain-specific language, and are firmly tied to a compiler. From my time 
> writing the clang linter I am personally very comfortable with libclang but I 
> can tell you that it:
> 
> A. Takes a while to get up to speed. AST closely align with the source but 
> are not overly “friendly". As an example, try walking the AST backwards (to 
> for example find wherever a variable is written to). You’ll find this is a 
> monumental undertaking.
> B. Many small idiosyncrasies to learn that are somewhat sparsely documented. 
> There are also no real “examples” to copy/learn from.
> 
>> Does Python have any useful high-level representation that could be used so 
>> that we write in Python and generate from its representation?
> 
> Yes, Python exposes the “ast” module for direct introspection of Python code 
> https://docs.python.org/3/library/ast.html. You can then use this to generate 
> arbitrary code. Team green uses this in their WARP library 
> (https://github.com/NVIDIA/warp) to generate CUDA kernels from python src. 
> But doing so has enormous pitfalls, mostly to do with optimization. Python 
> famously optimizes almost nothing because you can never be sure that an 
> expression doesn’t have a side-effect.
> 
> Best regards,
> 
> Jacob Faibussowitsch
> (Jacob Fai - booss - oh - vitch)
> 
>> On Jul 31, 2022, at 12:09, Barry Smith <bsm...@petsc.dev> wrote:
>> 
>> 
>>> My issue with C++ is not the language itself, but the lack of discipline of 
>>> C++ developers. There are disastrous stories we all know well. But there 
>>> are successful ones, like VTK/ParaView.
>> 
>>  I fear that it would be difficult to learn and maintain discipline in PETSc 
>> C++ developments. We are largely self-taught, want functionality quickly, 
>> and the google approach to learning C++ and implementing PETSc will be a 
>> disaster. We would need to have a starting mechanism that prevents the 
>> monkeys with machine guns.
>> 
>>  To do multiple language mappings properly, I think we need to start with a 
>> language with a powerful, high-level useful AST (or some similar 
>> representation) that automated tools can scarf through to generate language 
>> bindings and verify the code is properly written from day one. Rather than 
>> picking the language based on its syntax, flexibility etc, we should pick it 
>> based on this property. Does clang work with a high enough level of 
>> abstraction in its representation of C++ to map directly to Python classes, 
>> for example. Does Python have any useful high-level representation that 
>> could be used so that we write in Python and generate from its 
>> representation? Rust? Zig? Carbon? Fortran 2035?
>> 
>> 
>> 
>>> On Jul 31, 2022, at 10:26 AM, Lisandro Dalcin <dalc...@gmail.com> wrote:
>>> 
>>> 
>>> 
>>> On Sun, 31 Jul 2022 at 17:07, Matthew Knepley <knep...@gmail.com> wrote:
>>> On Sun, Jul 31, 2022 at 9:06 AM Lisandro Dalcin <dalc...@gmail.com> wrote:
>>> On Sun, 31 Jul 2022 at 16:41, Jacob Faibussowitsch <jacob....@gmail.com> 
>>> wrote:
>>> 
>>>> Please don't take my words as advocacy for C++
>>> 
>>> I’m going to pretend like I didn’t read this :)
>>> 
>>> Whatever the final decision is, PETSc should keep providing a plain C API. 
>>> C is lingua franca, C++ is not. Many other programming languages have 
>>> runtime FFIs mostly based on the C ABI guarantees (Java, Python, MATLAB, 
>>> Rust, Julia, etc). C++ may be great for development, but I do not consider 
>>> it great for crossing language boundaries. 
>>> 
>>> Maybe the right approach for petsc4py is to first get nice and modern  C++ 
>>> bindings implemented by wrapping the C interface. And then map these C++ 
>>> bindings to Python.
>>> 
>>> My crystal ball says that such a C++ binding would eventually be thrown 
>>> away just as in the case of MPI.
>>> 
>>> MPI C++ failed because it provided little added value. But if a PETSc C++ 
>>> API would become the base of bindings for other OO languages, then there is 
>>> value in maintaining these C++ bindings.
>>> Furthermore, these C++ bindings could serve as the foundation for a 
>>> reimplementation of PETSc in C++, if that ever happens. And that can be 
>>> done gradually.
>>> 
>>> PS: Modern C++ is a great language to implement stuff. People using C++ is 
>>> another story, it is like giving a machine gun to monkeys. Well, at this 
>>> point, I could say exactly the same about Python. 
>>> My issue with C++ is not the language itself, but the lack of discipline of 
>>> C++ developers. There are disastrous stories we all know well. But there 
>>> are successful ones, like VTK/ParaView.
>>> 
>>> 
>>> -- 
>>> Lisandro Dalcin
>>> ============
>>> Senior Research Scientist
>>> Extreme Computing Research Center (ECRC)
>>> King Abdullah University of Science and Technology (KAUST)
>>> http://ecrc.kaust.edu.sa/
>> 
> 

Reply via email to