Sí, ya se puede crear y ejecutar código Mojo desde Windows, pero con un matiz importante:

💡 Mojo no corre de forma nativa en Windows todavía

Lo que sí puedes hacer es usar Pixi, que crea un entorno aislado donde Mojo funciona perfectamente desde Windows, sin necesidad de WSL ni Linux.

En otras palabras:
👉 Sí puedes programar en Mojo en Windows hoy mismo, siempre que uses Pixi.


🧰 Cómo usar Mojo en Windows con Pixi

1) Instalar Pixi (si no lo tienes)

Desde PowerShell:

iwr -useb https://pixi.sh/install.ps1 | iex

2) Crear un entorno con Mojo

En una carpeta de proyecto:

pixi init
pixi add mojo

3) Ejecutar código Mojo

Puedes correr un archivo:

pixi run mojo archivo.mojo

O entrar al REPL:

pixi run mojo

🧪 ¿Y VS Code?

Sí, puedes editar y ejecutar desde VS Code:

  • Abres la carpeta del proyecto
  • Activas el entorno Pixi:pixi shell
  • Ejecutas Mojo desde la terminal integrada




🚀 Tutorial: Instalar Mojo con Pixi en WSL

🚀 Tutorial: Instalar Mojo con Pixi en WSL

1️⃣ Preparar el entorno en Windows

  • Activa WSL (Windows Subsystem for Linux) si no lo tienes:
  • Reinicia tu PC y abre una terminal en Ubuntu (WSL).

2️⃣ Instalar Pixi

Pixi es el gestor oficial recomendado para Mojo.

curl -fsSL https://pixi.sh/install.sh | bash

  • Verifica la instalación:

pixi –version

3️⃣ Crear un proyecto con Mojo

  • Crea un directorio para tu proyecto:
  • Inicializa Pixi:
  • Añade Mojo como dependencia:

pixi add mojo

Esto generará un pixi.toml y un pixi.lock, garantizando reproducibilidad.

4️⃣ Ejecutar Mojo

Dentro del entorno Pixi:

pixi run mojo helloworld.mojo

Ejemplo de archivo helloworld.mojo:

fn main(): print(«¡Hola desde Mojo con Pixi!»)

5️⃣ Integrar UV y Pip

Pixi puede usar UV para resolver dependencias de PyPI:

  • Instala UV dentro del entorno:
  • Instala paquetes de PyPI con UV:

uv pip install numpy

Si prefieres usar pip directamente:

pixi run pip install requests

👉 La diferencia es que UV es mucho más rápido y reproducible que pip.

6️⃣ Usar Conda (opcional)

Si ya trabajas con Conda:

conda create -n mojo-env python=3.11 conda activate mojo-env pip install mojo

Pero recuerda: Pixi es más ligero y reproducible para Mojo.




🧩 Conceptos básicos de POO en Mojo

Mojo combina la sintaxis de Python con optimizaciones de bajo nivel. La POO en Mojo sigue principios similares a Python, pero con algunas diferencias importantes:

  • Clases: Se definen con class.
  • Métodos: Se definen dentro de la clase, usando def.
  • Constructores: Se usan con __init__.
  • Atributos: Se declaran en el constructor o directamente en la clase.
  • Tipado: Mojo favorece el tipado estático para rendimiento, aunque admite dinámico.

📌 Ejemplo sencillo: Clase Calculadora

class Calculadora:

  • var resultado: Int
    def __init__(self):
        self.resultado = 0

    def sumar(self, a: Int, b: Int) -> Int:
       self.resultado = a + b
       return self.resultado

    def restar(self, a: Int, b: Int) -> Int:
       self.resultado = a - b
       return self.resultado

    def mostrar(self) -> None:
       print("Resultado actual:", self.resultado)

Uso:

let calc = Calculadora()
print(calc.sumar(5, 3)) # 8
print(calc.restar(10, 4)) # 6
calc.mostrar() # Resultado actual: 6

🚀 Diferencias clave con Python

  • Mojo exige tipos explícitos (Int, Float, etc.) para mayor rendimiento.
  • Usa var y let para declarar variables:

    • var → mutable.
    • let → inmutable.

  • La POO se siente muy similar a Python, pero con un enfoque más cercano a C++ en cuanto a eficiencia.



Cómo instalar WSL correctamente

Cómo instalar WSL correctamente

  • Desde la línea de comandos (PowerShell o CMD):

    1. Abre PowerShell como administrador.
    2. Ejecuta:

  • wsl –install

Desde la Microsoft Store:

  • Busca Windows Subsystem for Linux en la tienda de Microsoft y pulsa Instalar.
  • También puedes instalar distribuciones específicas como Ubuntu, Debian, Kali, etc.

Requisitos previos:

  • Windows 10 versión 2004 (compilación 19041) o superior, o cualquier versión de Windows 11.
  • Tener habilitada la característica de Virtual Machine Platform.

⚠️ Riesgos y aclaraciones importantes

  • No descargues “wsl.exe” de sitios externos: cualquier archivo que se ofrezca fuera de Microsoft es sospechoso y puede ser malware.
  • El comando wsl.exe ya está incluido en Windows una vez que habilitas la característica. No necesitas un instalador aparte.
  • Versiones antiguas de Windows 10 requieren pasos adicionales como habilitar manualmente características desde Panel de control → Activar o desactivar

📚 Recursos oficiales

Respuesta rápida: No existe un archivo independiente llamado wsl.exe para descargar. El Subsistema de Windows para Linux (WSL) ya viene integrado en Windows 10 (versión 2004 o superior) y Windows 11. Se instala directamente desde la línea de comandos o la Microsoft Store, no como un ejecutable suelto.

🔑 Cómo instalar WSL correctamente

  • Desde la línea de comandos (PowerShell o CMD):

    1. Abre PowerShell como administrador.
    2. Ejecuta:
    3. Esto descargará e instalará automáticamente el paquete de WSL junto con una distribución de Linux (por defecto, Ubuntu).

  • Desde la Microsoft Store:

    • Busca Windows Subsystem for Linux en la tienda de Microsoft y pulsa Instalar.
    • También puedes instalar distribuciones específicas como Ubuntu, Debian, Kali, etc.

  • Requisitos previos:

  • Windows 10 versión 2004 (compilación 19041) o superior, o cualquier versión de Windows 11.
  • Tener habilitada la característica de Virtual Machine Platform.

⚠️ Riesgos y aclaraciones importantes

  • No descargues “wsl.exe” de sitios externos: cualquier archivo que se ofrezca fuera de Microsoft es sospechoso y puede ser malware.
  • El comando wsl.exe ya está incluido en Windows una vez que habilitas la característica. No necesitas un instalador aparte.
  • Versiones antiguas de Windows 10 requieren pasos adicionales como habilitar manualmente características desde Panel de control → Activar o desactivar características de Windows.

📚 Recursos oficiales

👉




Explicación del código de la calculadora en Mojo

Te acompaño sección por sección, comentando cada línea con intención didáctica y práctica. Donde tiene sentido, agrupo varias líneas que forman una unidad lógica.

Función pedir_numero

  • fn pedir_numero(mensaje: String) raises -> Int:

    • while True:

      • try:

        • var valor: Int = Int(input(mensaje))
        • return valor

      • except:

        • print(«\n\t⚠️ Entrada no válida. Por favor introduce un número.»)

  • Definición: fn pedir_numero(mensaje: String) raises -> Int: declara una función que recibe un texto (mensaje) y devuelve un entero. raises indica que la función puede lanzar excepciones.
  • Bucle: while True: crea un ciclo infinito hasta que obtengas una entrada válida y hagas return.
  • Intento: try: abre un bloque para capturar errores en la conversión.
  • Salida: return valor devuelve el entero cuando la conversión ha sido correcta.
  • Error: except: captura cualquier excepción del bloque try.
  • Aviso: print("\n\t⚠️ ...") informa al usuario que debe introducir un número.

Función del menú

  • fn menu()raises ->None:# menu

    • print (» Calculadora creada en Mojo \n»)
    • print («»»

      • Introduce tipo de operacion:
      • S -> Sumar
      • rz -> Raiz Cuadrada
      • R -> Restar
      • M -> Multiplicar
      • d -> Division
      • X -> Salir _________________________________________________________ """)

  • Título: print (" Calculadora creada en Mojo \n") muestra un encabezado con salto de línea.
  • Opciones: print(""" ... """) imprime un bloque multilínea con el listado de operaciones y una separación visual.

  • Función limpiar_pantalla

  • fn limpiar_pantalla() raises -> None:
  • print(«\n» * 50)

Función sumar

  • fn sumar()raises ->None:# Funcion sumar

    • var numero1: Int = pedir_numero(«\n Introduce el primer número -> «)
    • var numero2: Int = pedir_numero(«\n Introduce el segundo número -> «)
    • var resultado: Int=numero1+numero2
    • print(«\n\t\tLa suma de {} y {} es = {}».format(numero1, numero2, resultado))

Definición: función que no devuelve valor.

  • Entrada 1: pide el primer entero con el prompt indicado.
  • Entrada 2: pide el segundo entero.
  • Cálculo: es la suma de ambos enteros.
  • Salida: imprime el resultado usando en el string para insertar los valores.



🧮 Cómo crear una calculadora en Mojo paso a paso

Mojo es un lenguaje emergente que combina la simplicidad de Python con la potencia de lenguajes de bajo nivel. Para aprenderlo, nada mejor que construir un proyecto práctico: una calculadora interactiva. En este artículo te muestro cómo diseñar una calculadora básica que suma, resta, multiplica, divide y calcula raíces cuadradas.

✨ Estructura general del programa

El código se organiza en funciones que encapsulan cada operación matemática y en un bucle principal que gestiona el menú. Esto permite que el programa sea modular y fácil de mantener.

🔹 Función pedir_numero

fn pedir_numero(mensaje: String) raises -> Int: while True: try: var valor: Int = Int(input(mensaje)) return valor except: print(«\n\t⚠️ Entrada no válida. Por favor introduce un número.») 

  • Objetivo: pedir un número al usuario y validar que sea correcto.
  • Detalles: usa un bucle while True para repetir la petición hasta que el usuario introduzca un valor válido.
  • Ventaja: evita que el programa se rompa por entradas erróneas.

🔹 Menú principal

fn menu() raises -> None:

print (» Calculadora creada en Mojo \n»)

print («»» Introduce tipo de operacion: S -> Sumar rz -> Raiz Cuadrada R -> Restar M -> Multiplicar d -> Division X -> Salir _____________________________________________ «»»)

  • Muestra las opciones disponibles.
  • El usuario selecciona la operación escribiendo una letra.
  • Incluye un toque visual con separadores y alineación.

🔹 Operaciones básicas

Cada operación está en su propia función:

  • Sumar:

fn sumar() raises -> None: var numero1: Int = pedir_numero(«\n Introduce el primer número -> «) var numero2: Int = pedir_numero(«\n Introduce el segundo número -> «) var resultado: Int = numero1 + numero2 print(«\n\t\tLa suma de {} y {} es = {}».format(numero1, numero2, resultado)) 

  • Restar y Multiplicar siguen la misma lógica, cambiando el operador.
  • División añade validación para evitar dividir entre cero:

fn division() raises -> None: var numero1: Float64 = pedir_numero(«\n Introduce el primer número -> «) var numero2: Float64 = pedir_numero(«\n Introduce el segundo número -> «) if numero2 == 0: print(«❌ Error: No se puede dividir entre cero») numero2 = pedir_numero(«\n Introduce un número distinto de cero -> «) if numero2 == 0: print(«😏 Pero si insistes, el resultado es ‘∞’ (infinito simbólico)») var resultado: Float64 = numero1 / numero2 print(«\n\t\tLa división de {} y {} es = {}».format(numero1, numero2, resultado)) 

🔹 Raíz cuadrada

import math

fn raiz_cuadrada(numero: Float64) -> Float64:

return math.sqrt(numero)

  • Usa la librería estándar math.
  • Se valida que el número no sea negativo antes de calcular.

🔹 Función principal main

fn main() raises -> None:

while True: menu() var tecla = input(«\n introduce tipo de operacion -> «).lower() if tecla == «s»: sumar() elif tecla == «r»: restar() elif tecla == «m»: multiplicar() elif tecla == «d»: division() elif tecla == «rz»: var numero: Float64 = pedir_numero(«\n Introduce el número -> «) if numero < 0: print(«❌ Error: No se puede con valores inferiores a cero») else: var resultado = raiz_cuadrada(numero) print(«\n La raíz cuadrada de «, numero, » es «, resultado) elif tecla == «x»: print(«Saliendo…») break else: print(«\n\n No válido») 

  • Controla el flujo del programa.
  • Llama a la función correspondiente según la tecla introducida.
  • Permite salir con la opción X.

🎯 Conclusión

Este proyecto muestra cómo estructurar un programa en Mojo usando funciones, validaciones y un menú interactivo. Es un ejemplo perfecto para aprender los fundamentos del lenguaje y practicar la lógica de programación.

👉 Próximos pasos: añadir más operaciones (potencias, logaritmos, porcentajes) o incluso una interfaz gráfica para hacer la calculadora más atractiva.




Guía: Mojo + VS Code en Windows/WSL

1. Instalar Mojo

  • Abre tu terminal en WSL (Ubuntu).
  • Ejecuta:

curl -s https://get.modular.com | sh

Luego añade Mojo al PATH:

Asi:

  • export PATH=»$HOME/.modular/bin:$PATH»

2. Instalar VS Code y extensión de Mojo

  • Abre VS Code en Windows.
  • Instala la extensión oficial de Mojo desde el Marketplace.
  • Configura la extensión para que apunte al intérprete en WSL.

3. Crear tu primer archivo Mojo

  • En VS Code, crea un archivo hola.mojo.
  • Escribe:

fn main():
print(«¡Hola desde Mojo en VS Code!»)

  • Guarda y ejecuta desde la terminal integrada:

mojo run hola.mojo

4. Depuración y flujo de trabajo

  • Usa la terminal integrada para correr tus programas.
  • Configura tareas en VS Code para automatizar la ejecución.
  • Puedes abrir directamente tu carpeta de proyectos en WSL desde VS Code.



Operadores en Mojo

🔑 Principales operadores en Mojo

1. Operadores aritméticos

  • + → suma
  • - → resta
  • * → multiplicación
  • / → división (retorna flotante)
  • // → división entera
  • % → módulo
  • ** → potencia

Ejemplo:

  • let a = 10
  • let b = 3
  • print(a + b) # 13
  • print(a // b) # 3
  • print(a ** b) # 1000

2. Operadores de comparación

  • == → igualdad
  • != → desigualdad
  • <, <=, >, >= → comparaciones numéricas

Ejemplo:

  • print(5 == 5) # True
  • print(7 != 3) # True
  • print(4 < 2) # False

3. Operadores lógicos

  • and → conjunción
  • or → disyunción
  • not → negación

Ejemplo:

  • let x = True
  • let y = False
  • print(x and y) # False
  • print(x or y) # True
  • print(not x) # False

4. Operadores de asignación

  • = → asignación simple
  • +=, -=, *=, /=, //=, %= → asignación con operación

Ejemplo:

  • var n = 5
  • n += 2 # n = 7
  • n *= 3 # n = 21

5. Operadores especiales

  • is → identidad de objetos
  • in → pertenencia en colecciones
  • not in → ausencia en colecciones

Ejemplo:

  • let lista = [1, 2, 3]
  • print(2 in lista) # True
  • print(4 not in lista) # True

📌 Nota importante

Mojo está en desarrollo y su sintaxis evoluciona rápidamente. Aunque hoy comparte casi todos los operadores con Python, algunos detalles pueden cambiar en futuras versiones.




🧳 Python vs Mojo: ¿Quién viaja más ligero?

Introducción

En el mundo de la programación, cada lenguaje tiene su personalidad. Algunos son flexibles y amigables, otros potentes pero exigentes. Hoy te presento una comparativa entre Python, el viajero ligero, y Mojo, el atleta de alto rendimiento con maletas pesadas. ¿Cuál se adapta mejor a tu proyecto?

🐍 Python: El turista con mochila
Python es como ese viajero que lleva solo lo esencial:

  • Una mochila con su código
  • Puede entrar en casi cualquier sistema operativo sin pedir permisos
  • No necesita visados ni instalaciones complicadas
    Ventajas:
  • ✅ Portabilidad: puedes ejecutar tu script en Windows, Linux, Mac sin complicaciones
  • ✅ Sintaxis sencilla y legible
  • ✅ Comunidad enorme y recursos didácticos por doquier

Ejemplo:

  • def suma(a,b)

    • return a+b

  • resultado = suma (3, 5)
  • print(«La suma es: «.resultado)

🔥 Mojo: El viajero con equipaje técnico

Mojo, en cambio, es como un atleta que viaja con maletas llenas de herramientas especializadas.

  • Necesita que el país (el PC) tenga Linux o WSL
  • Requiere instalar su propio runtime y compilador
  • No se conforma con una mochila: quiere rendimiento extremo

Ventajas:

  • ⚡ Velocidad cercana a C++
  • 🧠 Tipado estático para optimización
  • 🛠️ Ideal para computación intensiva y sistemas

Ejemplo:

  • fn suma(a: Int, b: Int) -> Int:

    • return a+b

  • fn main():

    • let resultado = suma(3, 5)
    • print («La suma es: «,resultado

🎨 Infografía comparativa

Aquí tienes una ilustración que resume esta idea con humor:

  • Python: sonriente, con mochila ligera, entra sin problemas
  • Mojo: serio, con maletas grandes, necesita infraestructura especial



Variables en Mojo

Introducción divertida

  • En Mojo las variables son como cajas mutables donde guardamos valores.
  • Una caja con tapa que se puede abrir y cambiar el contenido.
  • Contrástalo con alias (constantes), que serían cajas selladas con cinta: no se pueden modificar.

2. Ejemplos básicos con código

  • var contador: Int = 0
  • contador += 1 # ✅ se puede modificar
  • alias PI: Float64 = 3.14159
  • # PI = 3.2 # ❌ Error: alias no se puede cambiar
  • ________________________
  • Tip visual: un contador con un marcador que sube, y un círculo con el símbolo π sellado.

3. Inferencia de tipos

  • var nombre = «Javier» # tipo inferido: String
  • var edad = 30 # tipo inferido: Int

  • Mojo como un “detective” que adivina el tipo de la variable por el valor.

4. Sección interactiva

  • Minijuego: “¿Mutable o constante?”
    Fragmentos de código si compila o da error.
  • Ejemplo:

  • alias saludo = «Hola»
  • saludo = «Adiós»
  • → ¿Funciona o falla?

5. Comparativa visual

Haz una tabla ilustrada:

Palabra clave Mutalidad Ejemplo imagen
var ✅ mutable var x = 10 Caja abierta
alias ❌ constante alias y = 20 Caja cerrada