all 6 comments

sorted by: hot top controversial new old
[–] 1 point 11 months ago (5 children)

It would be cool if there was an option to tell compiler how to name the object in the end. A strength of C mangling (or rather lack of it) is that you can take the object file and know beforehand the names. With mangling that will always depend on the version of the compiler. In practice, while mangled names are kind of stable, mangled C++ names are not really reliable in the real world

If we could tell the compiler "in the end name/alias this function as prefix_or_name_of_cargo_my_super_duper_function", we could then easily call it in an assembler/pure C/etc
It could even be a separate wrapper. only for exposing stable function names in the object files

  • source
  • hideshow 5 child comments
  • [–] 2 points 11 months ago (1 child)
  • [–] 2 points 11 months ago (2 children)
    #[unsafe(export_name = "my_super_duper_function")]
    pub fn foo() {}
    

    I would recommend reading up some materials on FFI in Rust if you're interested. Calling functions in Rust from C and in C from Rust (or even languages other than C) is both extremely common and a primary usecase of the language.

  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 11 months ago (1 child)

    Wouldn't that make the body of the function unsafe too?

    I would recommend reading up some materials on FFI in Rust

    Yeah, I'm slowly getting to that

  • source
  • parent
  • hideshow 1 child comment
  • [–] 3 points 11 months ago

    No, the attribute is unsafe. An unsafe function is marked unsafe fn.

    Also, unsafe by itself just means there are invariants that must me manually upheld to avoid unsound behavior. If those invariants are upheld, then it doesn't matter if it's unsafe.

  • source
  • parent