Hare es un lenguaje de programación de sistemas diseñado para ser simple, estable y robusto. Utiliza un sistema de tipos estáticos, administración manual de memoria y un tiempo de ejecución mínimo.
Es ideal para escribir sistemas operativos, herramientas de sistema, compiladores, software de redes y otras tareas de bajo nivel y alto rendimiento.
Comparación con otros lenguajes
- Rust: Aunque ambos son lenguajes de sistemas, Hare es mucho más simple que Rust. Rust ofrece un sistema de tipos avanzado (con genéricos, traits y borrow checker), mientras que Hare evita esa complejidad a propósito. Hare es más cercano a C en espíritu, mientras que Rust busca mayor seguridad a costa de una curva de aprendizaje más pronunciada.
- Go: Go también simplifica el desarrollo de sistemas, pero incluye un recolector de basura y un enfoque más alto nivel que Hare. Hare es más crudo y manual, como C, mientras que Go está diseñado para productividad en aplicaciones modernas.
- Zig: Hare y Zig comparten similitudes como alternativas modernas a C, con énfasis en simplicidad y rendimiento. Sin embargo, Zig incluye características como un sistema de construcción integrado y metaprogramación, mientras que Hare se mantiene más minimalista.
Ejemplo 1. El clásico "Hola, mundo":
main.ha
use fmt; export fn main() void = { const greetings = [ "Hello, world!", "¡Hola Mundo!", "Γειά σου Κόσμε!", "Привіт, світе!", "こんにちは世界!", ]; for (let greeting .. greetings) { fmt::println(greeting)!; }; };
Ejecutar:
1 | $ hare run main.ha |
Compilar y ejecutar:
1 2 | $ hare build -o holamundo main.ha $ ./holamundo |
Ejemplo 2. Crear un programa que solicite el nombre del usuario y mostrarlo en pantalla.
input.ha
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | use bufio; use fmt; use os; use strings; export fn main() void = { const user = askname(); greet(user); }; // Solicitar el nombre al usuario. fn askname() str = { fmt::println("Hello! Please enter your name:")!; const name = bufio::read_line(os::stdin)! as []u8; return strings::fromutf8(name)!; }; // Mostrar saludo. fn greet(user: str) void = { fmt::printfln("Hola, {}!", user)!; }; |
Hare aunque a primera vista se parezca a lenguajes como Go, es más similar a C en términos de diseño, filosofía y propósito, pero con algunas influencias modernas y diferencias clave que lo distinguen
Hare tiene estás similitudes con C:
- Bajo nivel y control manual: Como C, Hare está diseñado para dar al programador control total sobre la memoria (sin recolector de basura) y un acceso cercano al hardware.
- Simplicidad: Ambos lenguajes evitan características complejas como la programación orientada a objetos avanzada o genéricos, priorizando un diseño minimalista.
- Tipado estático explícito: Aunque Hare tiene algunas mejoras (como enums y uniones etiquetadas), su enfoque en tipos explícitos recuerda al estilo de C.
- Uso previsto: Hare, al igual que C, está orientado a sistemas embebidos, herramientas de bajo nivel y software donde el rendimiento y la portabilidad son críticos
Diferencias con C
- Seguridad mejorada: Hare introduce características como uniones etiquetadas y enums, que ofrecen más seguridad y expresividad que las soluciones manuales de C (como #define o union sin etiquetas).
- Sintaxis moderna: La sintaxis de Hare es un poco más limpia y menos propensa a errores que la de C (por ejemplo, no requiere punto y coma al final de las líneas en muchos casos).
- Manejo de errores: Hare fomenta un enfoque más estructurado para manejar errores (usando tipos como uniones), mientras que C suele dejar esto completamente al programador.
Instalación y listado de versión en Linux (Debian/Ubuntu):
1 2 | $ sudo snap install hare --edge $ hare version |
Actualmente no hay planes para poder instalar el lenguaje en SO Windows y Mac OS, solo Linux y derivados.
Enlaces:
https://harelang.org/https://www.reddit.com/r/ProgrammingLanguages/comments/ws8xhr/hare_thoughts_experiences/?rdt=53903
Comentarios
Publicar un comentario