title: Extensible registry of types
body: <p>I have a program that can read multiple audio formats. A shared module could provide a trait, <code>AudioFileReader</code>, that has common methods for reading audio data as well as a registry for associating readers to file extensions.</p>
  
  <p>Rather than have all the possible audio format readers built into the module, it would be useful for this module to be extensible, so that clients of the module can provide <code>AudioFileReader</code>s for new formats (either when linked into an executable or via a plug-in system).</p>
  
  <p>What would be a conventional Rust way to build a system like this? Is there a way to avoid needing a global static registry while without losing extensibility?</p>