www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - D demangler for C++

reply Witold Baryluk <witold.baryluk gmail.com> writes:
https://github.com/baryluk/d-demangle-cpp

D programming language (dlang) symbol name demangler for C++

```cpp
std::cout << 
demangle_d::demangle("_D3std5stdio__T8writeflnTaTiZQoFNfxAaiZv") 
<< std::endl;
// Will print: void std.stdio.writefln!(char, int)(const char[], 
int)  safe
```

Goals

* Easy of integration into any C++ codebase
* Flexible
* Code simplicity following the spec closely in shape

Status: Alpha.



The principal motivation was to have a clean-room, from scratch 
implementation, that can be easily used in various contexts. The 
code base is simple, and can be easily ported to other languages, 
and environment (i.e. kernel space).

Once this is polished down, I will be pushing this demangler to 
be integrated into few 3rd party code bases, for example Valgrind 
/ massif, heapcheak, pprof, tcmalloc, Linux perf, etc.
Nov 27 2022
next sibling parent Hipreme <msnmancini hotmail.com> writes:
On Sunday, 27 November 2022 at 23:12:35 UTC, Witold Baryluk wrote:
 https://github.com/baryluk/d-demangle-cpp

 D programming language (dlang) symbol name demangler for C++

 [...]
Seems like a nice idea integrating to those 3rd party code :) Better debuggability for D code is always nice
Nov 27 2022
prev sibling parent reply max haughton <maxhaton gmail.com> writes:
On Sunday, 27 November 2022 at 23:12:35 UTC, Witold Baryluk wrote:
 https://github.com/baryluk/d-demangle-cpp

 D programming language (dlang) symbol name demangler for C++

 [...]
Wouldn't some of those tools already have one via libiberty? https://github.com/gcc-mirror/gcc/blob/master/libiberty/d-demangle.c
Nov 28 2022
parent reply Witold Baryluk <witold.baryluk gmail.com> writes:
On Monday, 28 November 2022 at 12:48:15 UTC, max haughton wrote:
 On Sunday, 27 November 2022 at 23:12:35 UTC, Witold Baryluk 
 wrote:
 https://github.com/baryluk/d-demangle-cpp

 D programming language (dlang) symbol name demangler for C++

 [...]
Wouldn't some of those tools already have one via libiberty? https://github.com/gcc-mirror/gcc/blob/master/libiberty/d-demangle.c
`libiberty` has way more things than just D demangler. And some projects might not be comfortable with its licensing. And libiberty uses autoconf / automake, which is just gross for most people. The idea is to have something simpler, portable (zero conf), just for this task, so it is as easy as possible to integrate and have flexible licensing. Many of the tools do not use libiberty, but just call `abi::__cxa_demangle` for example. Take a look for for a heaptrack tool: https://github.com/KDE/heaptrack/blob/master/src/interpret/heaptrack_interpret.cpp#L40-L56 You are free to use `libiberty` if you want. My demangler is just another option.
Nov 28 2022
next sibling parent max haughton <maxhaton gmail.com> writes:
On Monday, 28 November 2022 at 16:16:43 UTC, Witold Baryluk wrote:
 On Monday, 28 November 2022 at 12:48:15 UTC, max haughton wrote:
 [...]
`libiberty` has way more things than just D demangler. And some projects might not be comfortable with its licensing. And libiberty uses autoconf / automake, which is just gross for most people. The idea is to have something simpler, portable (zero conf), just for this task, so it is as easy as possible to integrate and have flexible licensing. Many of the tools do not use libiberty, but just call `abi::__cxa_demangle` for example. Take a look for for a heaptrack tool: https://github.com/KDE/heaptrack/blob/master/src/interpret/heaptrack_interpret.cpp#L40-L56 You are free to use `libiberty` if you want. My demangler is just another option.
This demangler I think is already available under a different licence inside LLVM (I think). My point was mainly to make sure you knew it existed.
Nov 28 2022
prev sibling parent reply Iain Buclaw <ibuclaw gdcproject.org> writes:
On Monday, 28 November 2022 at 16:16:43 UTC, Witold Baryluk wrote:
 On Monday, 28 November 2022 at 12:48:15 UTC, max haughton wrote:
 Wouldn't some of those tools already have one via libiberty?

 https://github.com/gcc-mirror/gcc/blob/master/libiberty/d-demangle.c
`libiberty` has way more things than just D demangler. And some projects might not be comfortable with its licensing. And libiberty uses autoconf / automake, which is just gross for most people. The idea is to have something simpler, portable (zero conf), just for this task, so it is as easy as possible to integrate and have flexible licensing. Many of the tools do not use libiberty, but just call `abi::__cxa_demangle` for example. Take a look for for a heaptrack tool: https://github.com/KDE/heaptrack/blob/master/src/interpret/heaptrack_interpret.cpp#L40-L56 You are free to use `libiberty` if you want. My demangler is just another option.
As the author, you're free to re-license that file as whatever so long as you email me for permission. A clean-room implementation would likely be better though - libibert/d-demangle.c comes with backwards compatibility baggage that anyone implementing a tool/library today would not be interested in.
Nov 30 2022
parent thebluepandabear <therealbluepandabear protonmail.com> writes:
Nice work. What is the process for learning how to make a project 
such a de-mangler if you don't mind me asking? :)
Dec 19 2022