Unknown attributes should be a warning (not an error)

When it comes to performance, @inline(__always) and @_specialize should not be needed anymore. @inlinable should cover any performance‐related uses of either of them. And if it doesn’t, that fact should be reported as a bug.

If @inline(__always) is being used for security reasons—which it isn’t reliable for in the first place—then you really do not want it to go ignored and open a security hole.

If @_exported is being used, demoting it from error to warning won’t solve anything, since with the re‐export missing, you’ll hit a sudden wall of undefined symbol errors.

Their use cases are not too narrow. As noted above, @inline(__always), @_specialize and their relatives already led to the fully supported @inlinable. And the problem space of @_exported is undergoing active development to transform it into a more robust model that can be declared stable:


They are doing so intentionally. Those attributes are not in any official documentation. If a developer even knows about them, they either discovered them as experimental features buried in the compiler’s source code, or received them as a suggestion from someone else who had. When these attributes pop up in conversation around here, it is always with a disclaimer that they are not finished yet and are a use‐at‐your‐own‐risk sort of thing. And for the most part that is true of the rest of the web as well.

2 Likes