Carbon, un nuevo lenguaje de programación de Google, pretende ser el sucesor de C++

El 19 de julio de 2022, durante la conferencia CPP North C++ en Toronto, el ingeniero de Google Chandler Carruth presentó a Carbon, como sucesor experimental de C++.

A lo largo de los años, Google ha creado unos cuantos lenguajes de programación, algunos de los cuales se han hecho más populares y destacados que otros. Por ejemplo, Golang (o simplemente Go) se creó con el propósito de mejorar el desarrollo de servidores y sistemas distribuidos y desde entonces ha sido adoptado por el público. Por su parte, el lenguaje de programación Dart, originalmente pensado como una especie de alternativa a JavaScript, no alcanzó la popularidad principal hasta el lanzamiento de Flutter.

Carbon pretende ser lo que TypeScript es para JavaScript y Kotlin para Java. No es un sustituto, sino un lenguaje sucesor diseñado en torno a la interoperabilidad con C++. Su objetivo es la adopción y migración a gran escala de las bases de código y los desarrolladores existentes.

Carbon tiene muchos de los mismos objetivos que Rust, como ayudar a los desarrolladores a crear “software de rendimiento crítico”, también pretende ser totalmente interoperable con el código C++ existente. Además, el objetivo es hacer que la migración de C++ a Carbon sea lo más fácil posible, si se desea.

Pero, ¿por qué construir Carbon? C++ está luchando por mejorar y satisfacer las necesidades de los desarrolladores. Esto se debe en gran medida a la acumulación de décadas de deuda técnica. Mejorar C++ es extremadamente difícil, debido a la deuda técnica y a los retos de su proceso de evolución. La mejor manera de abordar estos problemas es evitar heredar directamente el legado de C o C++.

Objetivos del lenguaje de programación Carbon

— Software de rendimiento crítico

— Evolución del software y del lenguaje

— Código fácil de leer, entender y escribir

— Mecanismos para probar y garantizar la seguridad

— Desarrollo rápido y escalable

— Sistemas operativos, arquitecturas de hardware y entornos del futuro.

Además, Google tiene objetivos explícitos no relacionados con Carbon, entre ellos

— ABIs estables para todo el lenguaje y la biblioteca

— Una perfecta compatibilidad hacia atrás y hacia delante

El proyecto Carbon es actualmente experimental. La curva de aprendizaje de Carbon debería ser suave si ya es un desarrollador de C++. Se basa en un conjunto coherente de construcciones del lenguaje que son fácilmente legibles y comprensibles.

Algunas de las características clave de Carbon son la interoperabilidad con C++, los genéricos modernos y la seguridad de la memoria.

Interoperabilidad con C++

El objetivo de Carbon es ofrecer una curva de aprendizaje suave a los desarrolladores de C++, con un conjunto estándar y coherente de construcciones del lenguaje. Además de la interoperabilidad entre Carbon y C++, Google también admitirá herramientas de migración que convertirán automáticamente el código C++ existente en código Carbon.

El sistema de genéricos proporciona muchas ventajas a las plantillas de C++:

  • Comprobaciones de tipo para las definiciones genéricas. Esto evita el coste en tiempo de compilación de volver a comprobar las definiciones en cada instanciación. Al comprobar las definiciones genéricas, los errores pueden detectarse sin tener que instanciarlas, lo que da a los desarrolladores una mayor sensación de confianza en su código.
  • Borra automáticamente los tipos y los despacha dinámicamente sin requerir una implementación separada. Como resultado, se puede reducir el tamaño del binario y construir contenedores heterogéneos.
  • Interfaces fuertes y comprobadas. Éstas reducen las dependencias accidentales de los detalles de implementación y crean un contrato más explícito.

Seguridad de la memoria

Carbon trata de abordar la seguridad de la memoria, un problema clave que afecta a C++, mediante:

  • Mejora en el rastreo de los estados no inicializados, aumentando la aplicación de la inicialización y endureciendo contra los errores de inicialización.
  • Diseño de APIs y modismos fundamentales para soportar comprobaciones de límites dinámicos en construcciones de depuración y endurecidas.
  • Tener un modo de compilación de depuración por defecto que sea más completo que los modos de compilación existentes de C++.

Aspectos destacados del lenguaje Carbon en el escenario.

  • Palabras clave de introducción y una gramática sencilla
  • Los parámetros de entrada de las funciones son valores de sólo lectura
  • Los punteros proporcionan acceso indirecto y mutación
  • Uso de expresiones para nombrar tipos
  • El paquete es el espacio de nombres raíz
  • Importar APIs a través de su nombre de paquete
  • El parámetro explícito del objeto declara un método
  • Herencia única; las clases son finales por defecto
  • Potentes genéricos de definición comprobada
  • Los tipos implementan explícitamente las interfaces

Aunque Carbon se inició en el seno de Google, el equipo entiende y ha compartido en línea que, para que tenga algún éxito en el futuro, Carbon necesita ser “un proyecto independiente e impulsado por la comunidad”, y no sólo por los propios usos de Google. En el mismo comentario, Carruth subraya además que Carbon no es más que un experimento, aunque algunas empresas ya han mostrado su interés.

Puede explorar Carbon ahora mismo consultando el código base y utilizando el explorador de Carbon:

# Instala bazelisk con Homebrew.
$ brew install bazelisk

# Instalar Clang/LLVM con Homebrew.
# Muchas versiones de Clang/LLVM no están construidas con opciones en las que # confiamos.
$ brew install llvm
$ export PATH=”$(brew — prefix llvm)/bin:${PATH}”

# Descargar el Código Fuente de Carbon.
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang

# Construir y ejecutar el explorador.
$ bazel run //explorer — ./explorer/testdata/print/format_only.carbon

Ejemplo:

Según la hoja de ruta de Carbon, Google hará público el experimento con el lanzamiento de una versión básica de trabajo (0.1) a finales de 2022. A continuación, tiene previsto lanzar una versión 0.2 en 2023 y una versión 1.0 completa en 2024–2025.

Fuentes:

— 9to5google.com , Kyle Bradshaw

— makeuseof.com. David Ekete.

— c-sharpcorner.com. Ajay Kumar

— onepagecode

twitter.com/Inticaya

--

--