En su charla, Jason Turner propuso romper la ABI de C++ para que el lenguaje siguiera avanzando. También mencionó que, si es necesario por razones de compatibilidad, los cambios de ABI de C++ se pueden aislar al envolver una biblioteca de C++ en una biblioteca de C.
Una captura de pantalla relevante a las 27:30:
Aquí "BinaryLibrary" y "Old C++ stdlib" usan una ABI antigua, y "NewExecutable" usa una ABI actualizada hipotética.
Según tengo entendido, esto funciona ya que la antigua ABI de C++ de "BinaryLibrary" se convierte en un binario separado con una interfaz más estable.
Pero, ¿qué hace que C sea una buena alternativa? ¿No puede cambiar su ABI también?
¿Puede cambiar el C ABI? Bueno, no fácilmente. Ha habido cambios ocasionales en algunas plataformas, pero se construyen tantos sistemas y lenguajes utilizando C ABI como una interfaz pública que tiene que ser bastante estable. Muchos lenguajes tienen un C FFI que les permite llamar a funciones C, y cambiar el C ABI los rompería. Y el C ABI es una forma común de interactuar con el sistema operativo, por ejemplo, para abrir archivos o enviar mensajes, por lo que es utilizado por muchas implementaciones de lenguaje (por ejemplo, intérpretes y bibliotecas estándar).
Tenga en cuenta que C ABI no forma parte del estándar C. Cada plataforma o sistema puede definir su propia C ABI . Entonces, si bien tiende a ser estable con el tiempo en una plataforma determinada, no es consistente en todas las plataformas.