4 puntos por GN⁺ 2024-05-01 | 1 comentarios | Compartir por WhatsApp

Introducción al lenguaje de programación Borgo

  • Se busca un lenguaje para escribir aplicaciones que sea más expresivo que Go, pero menos complejo que Rust
    • Go es simple e intuitivo, pero a veces se desearía que ofreciera más seguridad de tipos
    • Rust es bueno para trabajar (al menos en el caso de código de un solo hilo), pero es demasiado amplio y complejo, y a veces doloroso
  • Borgo es un nuevo lenguaje que transpila a Go y es totalmente compatible con los paquetes existentes de Go
  • La sintaxis de Borgo es similar a la de Rust, con punto y coma opcional

Funciones principales

  • Tipos de datos algebraicos y pattern matching
  • Uso de Option en lugar de nil
  • Uso de Result en lugar de múltiples valores de retorno
  • Manejo de errores con el operador ?

Ejecutarlo localmente

  • Borgo está escrito en Rust, por lo que se necesita cargo
  • Para compilar todos los archivos .brg de la carpeta actual:
    • $ cargo run -- build
  • El compilador genera archivos .go, que luego pueden ejecutarse normalmente

Opinión de GN⁺

  • Rust es un lenguaje potente, pero su curva de aprendizaje es pronunciada y la barrera de entrada suele ser alta; Borgo parece un intento interesante de aprovechar las ventajas de Rust dentro del ecosistema de Go. Sin embargo, como todavía está en una etapa temprana, es de esperarse que su ecosistema aún sea limitado
  • Mejorar el manejo de nil y de errores con Option y Result, y simplificar el manejo de errores con el operador ?, parece resolver varios puntos que con frecuencia incomodan a los desarrolladores de Go
  • Poder usar tal cual las bibliotecas existentes de Go es una gran ventaja. Pero, al adoptar sintaxis inspirada en Rust, puede tomar tiempo para que los desarrolladores de Go se adapten
  • Al tratarse de un enfoque basado en transpilar, es posible que salga en desventaja frente al código Go nativo en aspectos como depuración o rendimiento en tiempo de ejecución. Aún da la impresión de ser temprano para aplicarlo a código de producción de gran escala
  • Así como Kotlin ha ido ganando participación dentro del ecosistema JVM, para que Borgo se convierta en una solución dentro de Go, parece que necesitará mejoras continuas en varios frentes como calidad del código, productividad de desarrollo y curva de aprendizaje. Si sigue evolucionando, podría convertirse en una alternativa atractiva en el mundo de Go

1 comentarios

 
GN⁺ 2024-05-01
Opiniones en Hacker News

Resumen:

  • Reacciones positivas al lenguaje Borgo, que compensa las carencias de Go
    • Se agregan funciones que se echaban de menos en Go, como enum y tipos Optional
    • Incluye la mayoría de las funciones que los desarrolladores de Go querían ver
  • Algunas decisiones de diseño de Borgo se sienten más cercanas a Rust que a las características propias de Go
    • Definición de métodos usando impl, sintaxis de canales y goroutines, y la función integrada zeroValue()
    • Aun así, parece que muchos preferirían desarrollar con Borgo antes que con Go
  • Presentación de otros proyectos que intentaron algo similar
    • Hubo intentos de crear lenguajes que transpilan a Go, como braid, have y oden
  • Parece haber adoptado ventajas de Rust, como el sistema de tipos y el manejo de errores, excepto una de sus fortalezas clave: el Borrow Checker
  • También aparece la opinión de que sería ideal tener un lenguaje con las ventajas tanto del tipado dinámico como del estático
    • En las primeras etapas del desarrollo, sería útil contar con las ventajas del tipado dinámico al estilo Python y luego poder pasar gradualmente al tipado estático
  • Da la impresión de combinar las ventajas del runtime y el ecosistema de herramientas de Go con la seguridad de tipos de enum de Rust
  • También se valora positivamente que, en lugar del enfoque de Go de distinguir la visibilidad de los campos de un struct por mayúsculas y minúsculas, haya adoptado las palabras clave pub y private
  • Parece haber encontrado un punto medio, similar al lenguaje Gleam, entre seguridad de tipos y complejidad, pero con la ventaja de rendimiento de compilar a Go en lugar de Erlang o JS
    • Aunque queda la duda de si los mensajes de error de compilación serán tan amigables como los de Rust o Gleam