mangling
compiler がシンボル名 (関数名, クラス名など) を内部的に別の名前へ変換すること
gpt-5.icon
Name Mangling(名前修飾)
C++ などで関数オーバーロードや名前空間を実現するための仕組みです。
なぜ必要?
例えば C++ では、同じ関数名でも引数が違えば別物として扱えます:
code:cpp
void foo(int);
void foo(double);
しかし、リンカが扱うシンボル名は基本的に「文字列1つ」なので、
foo(int)
foo(double)
を区別できません。
そこでコンパイラは、引数型や名前空間などの情報を埋め込んだ内部名に変換します。
例(イメージ):
code:text
_Z3fooi // foo(int)
_Z3food // foo(double)
これが name mangling です。
Demangling
JSの文脈では、build時に変数名を短縮や難読化の意味合いで使われることが多い
https://github.com/terser/terser#mangle-options