various ways, and no standardization has occurred. The AIX and HP-UX Fortran compilers convert all identifiers to lower case , while the Cray and Unicos Fortran compilers converted identifiers to all upper case . The GNU g77 compiler converts identifiers to lower case plus an underscore , except that identifiers already containing an underscore have two underscores appended , following a convention established by f2c. Many other compilers, including SGI's IRIX compilers, GNU Fortran, and Intel's Fortran compiler (except on Microsoft Windows), convert all identifiers to lower case plus an underscore ( and , respectively). On Microsoft Windows, the Intel Fortran compiler defaults to uppercase without an underscore. Identifiers in Fortran 90 modules must be further mangled, because the same procedure name may occur in different modules. Since the Fortran 2003 Standard requires that module procedure names not conflict with other external symbols, compilers tend to use the module name and the procedure name, with a distinct marker in between. For example: module m contains integer function five() five = 5 end function five end module m In this module, the name of the function will be mangled as (e.g., GNU Fortran), (e.g., Intel's ifort), (e.g., Oracle's sun95), etc. Since Fortran does not allow overloading the name of a procedure, but uses generic interface blocks and generic type-bound procedures instead, the mangled names do not need to incorporate clues about the arguments. The Fortran 2003 BIND option overrides any name mangling done by the compiler, as shown above. Rust Function names are mangled by default in Rust. However, this can be disabled by the function attribute. This attribute can be used to export functions to C, C++, or Objective-C. Additionally, along with the function attribute or the crate attribute, it allows the user to define a C-style entry point for the program. Rust has used many versions of symbol mangling schemes that can be selected at compile time with an option. The following manglers are defined: A C++ style mangling based on the Itanium IA-64 C++ ABI. Symbols begin with , and filename hashes are used for disambiguation. Used since Rust 1.9. An improved version of the legacy scheme, with changes for Rust. Symbols begin with . Polymorphism can be encoded. Functions don't have return types encoded (Rust does not have overloading). Unicode names use modified punycode. Compression (backreference) use byte-based addressing. Used since Rust 1.37. Examples are provided in