8 puntos por GN⁺ 2024-03-07 | 1 comentarios | Compartir por WhatsApp
  • Dada es un experimento conceptual (thought experiment) que busca crear un lenguaje como Rust, pero que se sienta como Java o JavaScript y sea menos complejo que C++
  • No está pensado para usarse en kernels ni en dispositivos embebidos pequeños; ¿cómo se vería un lenguaje que requiere un runtime mínimo?
  • Dada es un lenguaje basado en propiedad (ownership) y tiene varias similitudes con Rust:
    • Al igual que Rust, Dada no requiere recolector de basura.
    • Al igual que Rust, Dada garantiza seguridad de memoria y ausencia de data races.
    • Al igual que Rust, las estructuras de datos de Dada se asignan en el stack y usan un diseño de memoria plano.
  • Pero Dada también tiene muchas diferencias:
    • Como TypeScript, Dada es un lenguaje gradualmente tipado:
      • Se puede usar Dada en el intérprete sin anotaciones de tipo para entender cómo funciona el lenguaje.
      • Una vez que te familiarizas, puedes agregar anotaciones de tipo y usar un compilador con un rendimiento similar al de Rust.
    • Dada apunta principalmente a WebAssembly:
      • Se pueden compilar targets nativos con Dada, pero el sistema FFI está basado en los tipos de interfaz de WebAssembly.
    • Dada es orientado a objetos, pero no de forma pura:
      • Dada combina buenas capacidades de OO con funciones como pattern matching, inspirándose en lenguajes como Scala.
  • Dada tiene algunas limitaciones en comparación con Rust:
    • Dada requiere un runtime obligatorio y no apunta a sistemas bare metal ni a kernels.
    • Dada no soporta ensamblador en línea ni código inseguro arbitrario.

¿Cuál es el estado actual de Dada?

  • Actualmente, Dada no existe realmente; hay algunos prototipos experimentales:
    • Una semántica operacional experimental implementada en PLT Redex puede encontrarse en dada-lang/dada-model.
    • Un intérprete escrito en Rust puede encontrarse en el repositorio dada-lang/dada, y se puede probar un build basado en WebAssembly en el playground de Dada.

Opinión de GN⁺

  • Dada refleja las tendencias de los lenguajes de programación modernos: mantiene funciones clave de Rust, como la seguridad de memoria y la prevención de data races, mientras busca ser un lenguaje más amigable para desarrolladores mediante el tipado gradual y un enfoque orientado a objetos.
  • Apuntar a WebAssembly como target principal muestra el potencial de Dada para el desarrollo de aplicaciones web, en línea con las tendencias modernas que priorizan la compatibilidad con navegadores y la independencia de plataforma.
  • Si Dada realmente se desarrolla y llega a usarse ampliamente, podría ofrecer a los desarrolladores de Rust un mayor nivel de abstracción y comodidad, y facilitar a los desarrolladores de Java o JavaScript la transición hacia un lenguaje de programación de sistemas.
  • Sin embargo, como Dada todavía está en una etapa temprana y su rendimiento y estabilidad en entornos reales de producción no han sido validados, empresas y desarrolladores deberán actuar con cautela antes de adoptarlo.
  • Otros lenguajes con objetivos similares a los de Dada incluyen Kotlin y Swift, que ya son ampliamente usados y pueden ser buenas alternativas para los desarrolladores.

1 comentarios

 
GN⁺ 2024-03-07
Opiniones de Hacker News
  • Aprecio por la idea de un "lenguaje de experimento mental"

    • Crear un lenguaje real implica una carga grande, y es divertido pensar cómo se vería un lenguaje ideal.
    • Hay muchas ideas sobre un "Rust de alto nivel" y, en lo personal, se prefiere un runtime dinámico y tipos simples, aunque otras personas tienen necesidades distintas.
    • Funciones adicionales como un sistema de tipos gradual encajan en algunos lenguajes, pero se prefiere la garantía de una base de código completamente tipada de forma estática desde el principio.
  • Dudas sobre el ejemplo de "Hello, Dada!"

    • Como usuario de Python, surge la duda de por qué habría que preocuparse por await cuando el objetivo es imprimir en la consola.
    • Parece que la complejidad y la carga cognitiva ya empiezan desde ahí.
  • Deseo por un lenguaje opuesto

    • Se quiere un lenguaje con el sistema de tipos expresivo y la sintaxis de Rust, pero introduciendo un recolector de basura y un runtime.
    • No se quiere pagar el costo de rendimiento, y se prefiere un lenguaje como Go con el sistema de tipos de Rust.
  • Opinión en contra de async/await

    • Se piensa que, en lenguajes de alto nivel, los hilos verdes de Go encajan mejor.
    • El tipado gradual es interesante, pero no es indispensable. El tipado estático no resulta una carga y puede dificultar razonar sobre el rendimiento.
    • Se considera que la inferencia de tipos sería mejor que el tipado gradual.
  • Comentario sobre la sensación de Java y JavaScript

    • Se señala que Java y JavaScript transmiten sensaciones muy distintas.
  • La ausencia de GC hace que Rust sea una experiencia agradable en sistemas embebidos

    • Permite conectarse fácilmente con otros programas, y el arranque rápido del programa es una de las principales ventajas de Rust.
    • Un Rust con recolección de basura podría significar renunciar a esa ventaja.
  • Sentimientos encontrados sobre la experiencia de usar Rust

    • Gustan los patrones de seguridad de memoria, pero la sintaxis se siente más difícil que la de C++.
    • Se siente que el código es difícil de leer mentalmente.
    • Con menos magia de decoradores y menos sintaxis basada en símbolos, sería más fácil de entender para principiantes.
  • Interés en la afirmación de que agregar anotaciones de tipo puede lograr un rendimiento similar al de Rust

    • Sería un lenguaje que se escribe con la facilidad de JavaScript y que, cuando se justifica el trabajo extra, puede ser tan rápido como Rust.
  • Confusión sobre el método print_point del tutorial

    • Hace falta una explicación más detallada del significado de async y await.
    • Se pregunta si async/await cumple un papel similar al de valores evaluados de forma perezosa, y si distintas combinaciones provocarían errores de tipo.
  • Molestia por tener que buscar ejemplos de sintaxis de nuevos lenguajes de programación

    • Se pide que, al crear un nuevo lenguaje de programación, se incluya de inmediato un ejemplo de sintaxis de "Hello World" en la landing page.