Ir al contenido principal

Hare: un lenguaje de programación de sistemas

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:

  1. 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. 
  2. Simplicidad: Ambos lenguajes evitan características complejas como la programación orientada a objetos avanzada o genéricos, priorizando un diseño minimalista. 
  3. 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. 
  4. 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

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...