En está ocasión haremos una breve comparativa entre dos lenguajes de programación: C y Odin.
C, un lenguaje de programación estructurado y "multi propósito" que se niega a morir versus Odin, un nuevo lenguaje de programación que toma lo mejor de lenguajes como C, C++ o Java para resolver los grandes problemas que se dejaron pendientes (como el manejo de memoria, entre otros).
Por ejemplo, Odin fue diseñado para evitar las complejidades y los problemas potenciales de las macros (como depuración difícil o errores de precedencia).
En su lugar, confía en un sistema de tipos fuerte y en la capacidad del compilador para optimizar funciones inline, ofreciendo un enfoque más limpio y seguro.
Veamos un ejemplo de macro (sustituciones textuales realizadas por el preprocesador antes de la compilación) en C.
main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include<stdio.h> // Definimos la MACRO para determinar si un número es mayor a 100 #define ESMAYORA100(num) (num > 100? 1 : 0) int main(){ int num = 101; puts("Programando en C."); // Invocamos la MACRO como si fuese una función if(ESMAYORA100(num)){ printf("%d es mayor a 100\n",num); } return 0; } |
En Odin al no existir el concepto de MACRO, dependeremos de la creación de una función.
main.odin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package main import "core:fmt" // Definimos la función esmayora100 :: proc(num: int) -> bool{ return num > 100 } main :: proc(){ fmt.println("Programando en Odin.") num:int = 101; // Invocamos la función if esmayora100(num) { fmt.printf("%d es mayor a 100\n", num) } } |
Ambos programas hacen lo mismo: determinar si un número entero es mayor a 100.
Mientras que en C no empleamos algún tipo de dato booleano (en su lugar empleamos 1 como true, 0 como false), en Odin si empleamos el tipo bool.
Haciendo una comparativa de tiempo de ejecución tenemos:
Lenguaje | Resultado de ejecución | Tiempo |
---|---|---|
C | Programando en C.
101 es mayor a 100 |
Start Time: 12:52:34.02
End Time: 12:52:34.05 |
Odin | Programando en Odin.
101 es mayor a 100 |
Start Time: 12:53:49.64
End Time: 12:53:49.67 |
Tanto el programa hecho en C como el de Odin tienen un tiempo de ejecución de apenas 3 milisegundos.
Otra diferencia es que en lenguajes como C deberás crear archivos encabezados para "combinar" el código de un programa con otro programa para crear una interoperabilidad.
Mientras que en Odin basta que pertenezcan al mismo ``package``.
Para demostrarlo, crearemos un programa que determine el IMC de una persona en C que tendrá:
- Un archivo encabezado: imc.h
- Un archivo donde implementaremos el encabezado: imc.c
- Un programa main que será el ejecutable: main.c
imc.h
1 2 3 4 5 6 7 8 | #ifndef _IMC #define _IMC #include<stdio.h> // Encabezado de la función double getImc(double, double); #endif |
imc.c
1 2 3 4 5 | #include "imc.h" double getImc(double peso, double talla){ return peso/(talla*talla); } |
main.c
1 2 3 4 5 6 7 8 9 10 11 | #include "imc.c" int main(int argc, char const *argv[]){ puts("\t [Obtener IMC de una persona]\n"); double peso, talla; peso = 78.0; talla = 1.72; printf("Peso: %.1f y talla: %.1f\n", peso, talla); printf("Tu IMC es de: %.2f\n", getImc(peso, talla)); return 0; } |
Compilamos y creamos el ejecutable:
1 | $ gcc main.c -o imc_generador.exe |
Ejecutamos:
1 | $ imc_generador.exe |
Salida:
1 2 3 4 | [Obtener IMC de una persona] Peso: 78.0 y talla: 1.7 Tu IMC es de: 26.37 |
¿Cómo será en Odin? Crearemos una carpeta llamada: imc_project. Dentro de esta tendremos dos programas:
- Uno donde definiremos una función para calcular el IMC: imc.odin
- El otro que empleará la función: main.odin
imc.odin
1 2 3 4 5 | package main get_imc :: proc(peso: f32, talla: f32) -> f32 { return peso / (talla * talla) } |
main.odin
1 2 3 4 5 6 7 8 9 10 11 12 13 | package main import "core:fmt" // Importamos el código del programa imc.odin import "../imc_project" main :: proc(){ peso: f32 = 78.0 talla: f32 = 1.72 fmt.println("\t [ Obtener IMC de una persona ]\n") fmt.printfln("Peso: %.1f y talla: %.1f\n", peso, talla) fmt.printfln("Tu IMC es de: %.2f\n", get_imc(peso, talla)) } |
Es importante que ambos tengan el mismo ``package``, es decir deberá ser ``main``
Ejecutaremos el proyecto de la siguiente forma:
1 | $ odin run imc_project |
Donde ``imc_project`` es el directorio donde se esncuentran los dos programas *.odin.
Salida:
1 2 3 4 5 | [ Obtener IMC de una persona ] Peso: 78.0 y talla: 1.7 Tu IMC es de: 26.37 |
Esta es solo una pequeña comparativa entre estos dos lenguajes. Continuaremos con esta serie de entregas sobre Odin.
Enlaces:
https://graphitemaster.github.io/odin_review/https://hasenjudy.wordpress.com/2022/08/25/odin-praise/
Comentarios
Publicar un comentario