Ir al contenido principal

Entradas

¿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...
Entradas recientes

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:...

TeaVM: convertir código Java a WebAssembly

TeaVM es un compilador ahead-of-time que transforma bytecode de Java en JavaScript o WebAssembly, permitiendo ejecutar aplicaciones Java directamente en el navegador sin necesidad de reescribirlas en JavaScript. Es útil para quienes quieren aprovechar su código Java (o incluso Kotlin y Scala) en entornos web modernos. Es similar a lo que se hacía con GWT (Google Web Toolkit). Convertir tu código Java a código Javascript. En este blog ya hemos hablado de WebAssembly: WebAssembly con Rust. WebAssembly con Python. WebAssembly con C/C++ Creando un proyecto Java (y TeaVM) 1. Creamos nuestro proyecto Java con Maven: $ mvn - DarchetypeCatalog = local - DarchetypeGroupId = org . teavm - DarchetypeArtifactId = teavm - maven - webapp - DarchetypeVersion = 0.13.1 archetype:generate $ cd demo - teavm 2. Una vez ubicados en el directorio creado modificaremos el programa principal `` MainClass.java ``. package com.inforhomex.web ; impor...

WebAssembly con Rust

  WebAssembly es un lenguaje de bajo nivel, similar a ensamblador, diseñado para ser rápido de cargar y ejecutar en navegadores modernos. Su objetivo es permitir que aplicaciones escritas en distintos lenguajes se ejecuten en la web con velocidad casi nativa . Los formatos que soporta son: .wasm : un formato binario ejecutable.  .wat : un formato formato de texto legible. Se complementa con JavaScript; permite invocar funciones WASM desde JS y viceversa. Como hemos visto en este blog: Si quieres usar WebAssembly con C/C++ tendrás que usar Emscripten .  Si quieres usar WebAssembly con Python puedes usar Pyodide . También puedes optar por usar un lenguaje como Grain cuya compilación es directa a WASM . ¿Cuál es el objetivo de WebAssembly? El objetivo de WebAssembly es compilar código escrito en lenguajes como Rust, C o C++ (entre otros) y transformarlo en un módulo .wasm que puede ejecutarse en navegadores o en entornos como Node.js con rendimi...