Ir al contenido principal

Entradas

Rust y la programación concurrente

  Rust tiene la filosofía de " concurrencia sin miedo "; lo cual te permitirá escribir código libre de errores sutiles y fácil de refactorizar. Rust ofrece una variedad de herramientas para modelar problemas de la manera que sea más apropiada para su situación y requisitos. Entre ellas tenemos: Creación de hilos(threads) para ejecutar múltiples fragmentos de código simultáneamente.  Concurrencia mediante paso de mensajes , donde los canales envían mensajes entre hilos.  Concurrencia de estado compartido , donde múltiples hilos tienen acceso a un mismo dato.  Los traits ` Sync ` y ` Send ` , que extienden las garantías de concurrencia de Rust a tipos definidos por el usuario, así como a tipos proporcionados por la biblioteca estándar. Rust garantiza que solo un hilo puede modificar datos a la vez, o que múltiples hilos pueden leerlos sin riesgo. Si intentas compartir datos de forma insegura, el compilador no te dejará compilar. Cada hilo de Rust cor...
Entradas recientes

Hablemos de ... Goroutines

Una de las peculiaridades del lenguaje Go son las goroutines , la cual es una forma de crear hilos de ejecución livianos y gestionables por el sistema operativo (un concepto similar a los hilos en Java). Una goroutine se considera una unidad ligera de ejecución en Go . Se lanzan con la palabra go y las gestiona el runtime de Go ( scheduler ). Son mucho más ligeras que los hilos del sistema operativo. Digamos que es una función o método que se ejecuta simultáneamente con otras goroutines en el mismo espacio de direcciones. Características principales: Es una función que se ejecuta concurrentemente con otras dentro del mismo programa.  Ocupan muy poca memoria (unos pocos KB frente a MB de un hilo).  No dependen del sistema operativo, sino del runtime de Go , que las programa sobre un conjunto de hilos del sistema. Se lanzan en microsegundos, mucho más rápido que crear un hilo. Las goroutines son abstracciones de concurrencia más eficientes que los hilos, aunq...

¿Existen los punteros en Python?

  En Python no existe el concepto de puntero de manera explícita. Es decir, no puedes manipular directamente direcciones de memoria ni hacer aritmética de punteros . Sin embargo, Python sí maneja referencias a objetos , y en la práctica funcionan de manera similar a punteros seguros. Esto te permite compartir y modificar estructuras sin necesidad de copiar. En Python el concepto de punteros funcionaría de la siguiente manera: Todas las variables en Python son referencias a objetos en memoria.  Cuando asignas una variable a otra, ambas apuntan al mismo objeto.  No puedes acceder a la dirección de memoria directamente (como con & en Go o * en C), pero puedes usar la función id() para obtener un identificador único del objeto (que suele estar relacionado con su dirección interna). Simulemos punteros en Python: x = [ 1 , 2 , 3 ] y = x # y referencia al mismo objeto que x y.append( 4 ) print (x) # [1, 2, 3, 4] -> s...

Punteros en Rust, ¿Qué son y para qué sirven?

En Rust existe el concepto de punteros, pero se maneja de manera distinta a lenguajes como C o Go , porque Rust pone mucho énfasis en la seguridad de memoria y en evitar errores comunes como dangling pointers o data races . Recordando el post anterior tenemos que una variable se compone de:   Un tipo de dato.   Un nombre.   Un valor.   Una dirección de memoria. Las dos primeras características las define el programador, el valor depende del flujo del programa. La memoria la designa el sistema. Y es aquí donde entran los punteros , que son variables que almacenan la dirección de memoria de otra variable . En Rust , el concepto puede ser un poco diferente a lenguajes como C y Go  como lo vamos a ver. Tipos de punteros en Rust En Rust,  veremos los punteros como en referencias , Box , Rc/Arc , raw pointers  y su uso está regulado por el sistema de propiedad para garantizar seguridad y eficiencia. ¿Para qué sirven...

Punteros en Go, ¿Por qué tendría que usarlos?

Los que ya llevan cierto tiempo en la programación sabrán que uno de los conceptos más difíciles de aprender y usar son los famosos punteros: variables que almacenan la dirección de memoria de otra variable . Y es que una variable (en lenguajes de tipado estático como C) se compone de: Un tipo de dato.  Un nombre.  Un valor.  Una dirección de memoria. Las dos primeras características las define el programador, el valor depende del flujo del programa. La memoria la designa el sistema. En el lenguaje de programación C tenemos que: // Definimos una variable de tipo entero con un valor int numeroInt = 33 ; // Definimos un puntero que almacena la dirección de la variable numeroInt int * punteroInt = & numeroInt; Esto nos permite trabajar con datos de manera más eficiente y flexible, especialmente cuando quieres modificar valores dentro de funciones o estructuras sin copiar todo el contenido. Pero, ¿Qué tiene que ver con Go? La respuesta es: tien...

Creando proyectos Go con Go-Blueprint

Go-Blueprint ,llanamente, es una herramienta que nos permite crear proyectos con Go . Desde la línea de comandos podremos armar un proyecto Go , además de agregarle funcionalidades. Como el hecho de integrar, por ejemplo, el framework Fiber , Gin, Gorilla/mux, configuración Docker , conexión a PostgeSQL a nuestro proyecto, entre otras cosas más. La forma de instalarlo es la siguiente: $ go install github . com / melkeydev / go - blueprint @latest O si lo preferimos usamos Npm: $ npm install - g @melkeydev/ go - blueprint Está última solo para quienes ya están trabajando en proyectos JS/Node. Verificamos la instalación. En Linux: $ wich go - blueprint En Windows: $ where go - blueprint O simplemente: $ go - blueprint version ¿Para qué sirve Go-Blueprint? Generación rápida de proyectos Go: crea la estructura base de un proyecto en segundos. -  Integración con frameworks: soporta Gin, Fiber, Echo, Chi y otros.  Automatización de ...

AssemblyScript: de Typescript a WebAssembly

  AssemblyScript es un lenguaje que permite escribir código en TypeScript/JavaScript y compilarlo a WebAssembly . Su principal ventaja es la familiaridad para desarrolladores web, mientras que sus desventajas incluyen menor rendimiento comparado con Rust o C++ y un ecosistema aún limitado. Es ideal para proyectos que requieren optimización moderada sin salir del mundo JavaScript. Basado en TypeScript que compila a WebAssembly . Diseñado para que desarrolladores web puedan aprovechar Wasm sin aprender C, C++ o Rust.  Usa un subconjunto de TypeScript , lo que facilita la transición para quienes ya trabajan con JavaScript. Ventajas de AssemblyScript: Familiaridad: Los desarrolladores web que conocen TypeScript pueden empezar rápidamente.  Integración sencilla: Se comunica bien con JavaScript, ideal para proyectos web híbridos.  Curva de aprendizaje baja: No requiere aprender un lenguaje nuevo como Rust.  Rapidez relativa:...