fbpx

¿Es el fin de C++? Google busca imponer un sucesor

Lenguajes de programación más sencillos de aprender y muy eficientes le vienen quitando el trono al rey desde hace años, pero existiendo tanto código legado, casi prehistórico, ¿cómo realizar migraciones a esos lenguajes modernos?

Google dice que no es necesario cambiar de lenguaje o seguir usando un lenguaje dificil de aprender para la generación TikTok, así que ha presentado Carbón, una evolución de C++ a los tiempos modernos.

El propósito de este nuevo lenguaje es el de mejorar la manera en la que se programa, usando los paradigmas actuales, con estructuras de control más modernas, pero que sea 100% retrocompatible con módulos ya existentes de C++, lo cual, como programadores, agradecemos mucho, ya que nos permitirá hacer una refactorización modular de los sistemas de antaño a este nuevo lenguaje, exportando nuevos módulos a código legado e importando módulos existentes en el nuevo desarrollo. Además, busca que la transición sea tan natural como lo han hecho:

  • JavaScript → TypeScript
  • Java → Kotlin
  • C++ → Carbono
woman with text projected on her face
Photo by cottonbro on Pexels.com

¿Otro lenguaje más? Y ahora qué…

Siempre que sale un nuevo lenguaje, esperamos que tenga adecuaciones que faciliten lo que hacemos, así pasa con TypeScript al crear un JS de tipado que realmente sirve. O con Python, eliminando miles de lineas que ahora se sienten innecesarias de Java o C++. Pero, ¿Qué es lo que promete Carbon?

Rápido y funciona con C++

  • Coincidencia de rendimiento de C++ mediante LLVM, con acceso de bajo nivel a bits y direcciones
  • Interoperar con su código C++ existente, desde la herencia hasta las plantillas
  • Compilaciones rápidas y escalables que funcionan con sus sistemas de compilación C++ existentes

Moderno y en evolución

  • Sólidos fundamentos de lenguaje que son fáciles de aprender, especialmente si ha usado C++
  • Actualizaciones sencillas basadas en herramientas entre versiones de Carbon
  • Fundamentos más seguros y un camino incremental hacia un subconjunto seguro para la memoria

Acogedora comunidad de código abierto

  • Objetivos y prioridades claros con una gobernanza sólida
  • Comunidad que trabaja para ser acogedora, inclusiva y amigable
  • Enfoque con baterías incluidas: compilador, bibliotecas, documentos, herramientas, administrador de paquetes y más

Ahora, un poema:

Si eres una persona con una vida normal, te agradecemos haber leído la nota y los puntos fuertes de éste nuevo lenguaje… pero si estás malito, o eres desarrollador, te dejamos un ejemplo con las diferencias en el lenguaje.

El cásico C++

Sé que eres programador, pero aquí claramente se muestra un programa que instancia dos veces una estructura de un cículo, con un radio r flotante, que es guardado en un vector y que imprime su área en pantalla. (Si, si no eres programador, de veras eso dice).

// C++:
#include <math.h>
#include <iostream>
#include <span>
#include <vector>

struct Circle {
  float r;
};

void PrintTotalArea(std::span<Circle> circles) {
  float area = 0;
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
  std::cout << "Total area: " << area << "\n";
}

auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Implicitly constructors `span` from `vector`.
  PrintTotalArea(circles);
  return 0;
}

Ahora el mismo algoritmo en Carbon

Hay cambios que parecen una tontería, pero algunos que en realidad si se ven interesantes, veamos:

// Carbon:
package Geometry api;
import Math;

class Circle {
  var r: f32;
}

fn PrintTotalArea(circles: Slice(Circle)) {
  var area: f32 = 0;
  for (c: Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}

fn Main() -> i32 {
  // A dynamically sized array, like `std::vector`.
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  // Implicitly constructs `Slice` from `Array`.
  PrintTotalArea(circles);
  return 0;
}

Yo tengo una opinión muy específica con respecto a los cambios que se tienen, pero tomando en cuenta que está en un estado experimental, yo si me esperaré a que se publiquen más bibliotecas específicas y las mejoras que seguro como programador de C++ también esperas.

Sé que tendrás mucho que comentar de éste lenguaje y me encantaría saber tu opinión. Sigue estudiando y ¡¡FELIZ CODEO!!