name mangling
Megjelenés
Főnév
name mangling (tsz. name manglings)
- (informatika) Name mangling – magyarul: névtorzítás vagy névmanipuláció – egy olyan folyamat, amely során a fordító (compiler) a forráskódbeli neveket módosítja, hogy azok egyértelműek legyenek a fordított (gépi) kódban. Ez különösen fontos a többféle azonos nevű elem (pl. függvények, osztályok, névterek) kezelésénél, amikor a célplatform nem támogatja közvetlenül a név túlterhelést.
🧠 1. Miért van rá szükség?
Fő ok:
A C++ például lehetővé teszi a függvény túlterhelést (ugyanaz a név, más paraméterlista), de az alacsony szintű linker csak egyedi nevekkel tud dolgozni.
💡 Name mangling segítségével a fordító új, egyedi azonosítókat hoz létre, amelyek tükrözik a paraméterek típusait, névtereket, osztályokat, stb.
🔧 2. Hogyan működik?
A fordító minden entitás nevét átalakítja:
- Az új név tartalmazza:
- az eredeti nevet
- a paramétertípusokat
- a névtereket / osztályokat
- esetleg a visszatérési típust
Példa (GCC stílusú mangling):
void foo(int x);
void foo(double x);
→ A fordító belsőleg:
_foo_int → _Z3fooi _foo_double → _Z3food
Za mangling előtag3foo→ név hossza + névi→int,d→double
📦 3. Hol használatos?
- C++, Rust, Swift, D, stb.
- Nem használja a klasszikus C, ahol nincsen név túlterhelés
🛠️ 4. Demangle: név visszafejtése
Unixon használható például a c++filt parancs:
$ echo "_Z3fooi" | c++filt
foo(int)
🧩 5. Problémák
- 🔥 ABI inkompatibilitás: két különböző fordító eltérő mangling-szabályokat használhat → a binárisok nem kompatibilisek
- 🧪 Debugging nehezebb: a mangled nevek nehezen olvashatók
- 🔒 Name mangling nem egységes: GCC ≠ MSVC ≠ Clang
📌 6. Névtorzítás elkerülése
Ha C++-ból C-függvényt akarunk hívni (vagy fordítva), akkor a C linkage használható:
extern "C" void foo();
Ez megmondja a fordítónak, hogy ne manglingelje a foo nevet → így C-kompatibilis lesz.
🧾 7. Összefoglalás
A name mangling:
- Egy automatikus folyamat, amely a fordító által generált egyedi szimbólumneveket hoz létre
- Különösen fontos olyan nyelvekben, ahol van:
- függvény túlterhelés
- névterek
- osztály alapú szervezés
- Hasznos, de okozhat kompatibilitási és debugolási problémákat
- name mangling - Szótár.net (en-hu)
- name mangling - Sztaki (en-hu)
- name mangling - Merriam–Webster
- name mangling - Cambridge
- name mangling - WordNet
- name mangling - Яндекс (en-ru)
- name mangling - Google (en-hu)
- name mangling - Wikidata
- name mangling - Wikipédia (angol)