Post

Entorno de Desarrollo

Para la programación competitiva en C++

Entorno de Desarrollo

Tabla de Contenidos:

No tenemos guías específicas de Linux porque varía según la distribución, pero usualmente tendrás menos problemas en sistemas operativos basados en Linux. Ante cualquier duda, puedes contactar a Ariel Parra.

Conectar Git con GitHub

Recomendamos guardar todos tus proyectos y códigos en GitHub como portafolio de evidencias.

  1. Primero crearemos una cuenta de GitHub https://github.com/signup
  2. Después creamos un repositorio (proyecto) en https://github.com/new
  3. Luego descargamos git desde la página oficial https://git-scm.com/downloads o con el gestor de paquetes de cada sistema operativo
    • En Windows en powershell logo Powershell con el comando:
      1
      
       winget update ; winget install -e --id Git.Git
      
    • En MacOs con el gestor de paquetes homebrew logo homebrew:
      1
      
       brew update && brew install git
      
    • En Android con la terminal termux y el comando:
      1
      
       pkg update && pkg install git
      
    • En iOS/iPadOS con la terminal ish logo ish y los comandos:
      1
      2
      3
      
       apk update 
       apk add git openssh
       ssh-keygen -A
      
  4. Si se esta en Windows, revisa qué este actualizado, si no esta en la ultima versión, comprobamos que esta instalado el cliente de OpenSSH.
  5. En una terminal creamos nuestro usuario local de git (es opcional que los datos sean iguales a los de GitHub) con los comandos:
    1
    
    git config --global user.name "Usuario"
    
    1
    
    git config --global user.email "correo@ejemplo.com" 
    
  6. comprobamos nuestros datos con el comando:
    1
    
     git config --list
    
  7. En la misma terminal creamos una llave pública de ssh:
    1
    
    ssh-keygen -t ed25519 -C "correo@ejemplo.com"
    
  8. Copiamos los datos del archivo generado en Windows en la ruta: C:\Users\%USERNAME%\.ssh\id_ed25519.pub (para Windows tiene el icono de Microsoft Publisher Microsoft publisher logo y se puede abrir con el bloc de notas), para los demás sistemas operativos suele estar en ~/.ssh/id_ed25519.pub, y lo conectamos con nuestra cuenta de GitHub a través de https://github.com/settings/ssh/new, dándole un nombre (puede ser el modelo de tu dispositivo) y pegando los datos copiados (llave).
  9. Por último descargamos nuestro repositorio, en una terminal navega hacia tu carpeta de destino, yo recomiendo la carpeta de Documentos (Documents) o Escritorio (Desktop).

Mucho ojo 👁️ en Windows, estas carpetas suelen estar bajo C:\Users\%USERNAME%\One Drive\

1
git clone git@github.com:"Usuario de GitHub"/"Proyecto".git

Una vez ya tengamos conectada nuestra cuenta y hayamos descargado el proyecto, los tres comandos principales de git que usaremos en la terminal son:

1
2
3
git commit -m "mensaje del commit" # cambios locales a "pushear"
git push # pusheas los cambios junto con el commit hacia GitHub
git pull # descargas los cambios actuales desde GitHub

Compiladores en línea (Online)

La ventaja de usar un IDE en línea es la disponibilidad en cualquier dispositivo, la desventaja evidentemente es que al no tener conexión a internet no puedes utilizarlo aparte de que en algunos deberás guardar tus códigos manualmente en algún otro medio o plataforma.

  • USACO IDE es un IDE de colaboración en tiempo real creado por el USA Computing Olympiad (USACO). Recomendado por el Club
  • Omega Up es un IDE creado por el Omega Up.
  • onlinegdb este es el compilador en línea recomendado por el club, debido a que permite guardar los códigos al iniciar sesión junto con la compatibilidad completa con nuestra plantilla de C++
  • tio.run Compilador con soporte para múltiples versiones de librerías y estándares de C++ y debug y asi.
  • Programiz es un compilador en línea para acompañar sus cursos de programación
  • cpp.sh la ventaja de este editor es poder comparar las diferencias entre distintos estándares de C++ y distintos niveles de optimización del compilador, lo único malo es que no permite directivas #pragma ni la librería <bits/stdc++.h>
  • pythontutor este es un muy buen debuger en línea ya que contiene representaciones gráficas para visualizar nuestros códigos y también permite el uso de la librería <bits/stdc++.h>, lo malo es que no tiene entrada de usuario (no permite std::cin), junto con otras cosas incompatibles

IDEs en la nube (Cloud)

  • Replit es una plataforma para colaborar en tiempo real con código, la desventaja es que el plan gratuito solo te permite tener 3 proyectos públicos
  • Google Colab es un servicio totalmente gratuito por parte de Google para usar Jupyter Notebooks, para ejecutar C++ tendremos que usar el comando %%writefile para escribir hacia archivos, como lo sería el archivo in.txt donde pondremos todas las entradas del programa (necesario para la función freopen) y el archivo .cpp el cual compilaremos con el comando !g++ y ejecutaremos de esta manera !./a.out

Google Colab ejemplo

  • Github codespaces es VScode dentro de un servidor de Linux en la nube, compatible con todas las extensiones que desees.
    • GitHub Free 15 GB de espacio al mes con 120 horas
    • GitHub Pro 20 GB de espacio al mes con 180 horas

Recuerda que tienes acceso de forma gratuita a GitHub Pro por ser estudiante

  • cs50.dev es GitHub codespaces gratuito y sin limite de tiempo, hosteado por la universidad de Harvard para el acompañamiento de sus cursos, este es el editor en la nube recomendado por el club.

cs50.dev ejemplo

cs50.dev también es de mucha utilidad para correr otros IDEs en la nube como lo es el caso de Rstudio para R

VScode IDE

No confundir con Visual Studio (el moradito). VScode (el azulito) es el editor recomendado por el Club (quizas solamente quitando lo de github copilot y cosas de IA), esto debido principalmente por su amplio catalogo de extensiones.

Nota: A VS Code le falta el compilador de C++ integrado, por lo que es necesario instalar el compilador por separado y vincularlo al editor de código. Consulta cómo instalar el compilador en Windows o instalar el compilador en macOS (Para los que usan linux no se preocupen usualmente ya viene con el compilador preinstalado en su sistema).

Para instalarlo podemos hacerlo desde su página web o usando el gestor de paquetes

  • En Windows en powershell logo Powershell con el comando:
    1
    
    winget update; winget install -e --id  Microsoft.VisualStudioCode --override '/SILENT /mergetasks="!runcode,addcontextmenufiles,addcontextmenufolders"'
    

Recuerda que en Windows, las carpetas de Escritorio,Descargas y Documentos suelen estar bajo C:\Users\%USERNAME%\One Drive\

  • En MacOs con el gestor de paquetes homebrew logo homebrew:
    1
    
    brew install --cask visual-studio-code
    
  • En Android con la terminal termux hay dos opciones:
    1. Usar vscode-server (aplicación en línea similar a https://vscode.dev/, la cual tiene extensiones limitadas) que será accesible en cualquier navegador del dispositivo en las urls localhost:8080 o 127.0.0.1:8080, se instala con los comandos:
      1
      2
      
        pkg update && pkg install tur-repo code-server
        code-server # este es el comando para ejecutar el servidor de vscode
      
    2. con los escritorios nativos con los comandos:
      1
      
        pkg update && pkg install tur-repo code-oss
      
  • En iOS/iPadOS no se puede a menos que se use un escritorio emulado

Extensiones para VScode

  • C/C++ logo C/C++ esta es la extensión necesaria para poder correr código de C++ dentro de VScode
  • Error lens logoError lens esta extensión nos muestra los errores que va dando el IDE o el compilador.
  • CPH logoCompetitive Programming Helper esta es la extensión para poder probar los códigos antes de publicar y también podremos subir directamente los códigos a Codeforces de una manera muy rápida.

Tip: Recuerda configurar VS Code para ejecutar casos de prueba locales y enviar soluciones directamente a Codeforces siguiendo la sección Integrar Codeforces con VS Code.

Temas recomendados para VScode:

Integrar Codeforces con VScode

cph setting imagen

CPH Submit puede no funcionar del todo bien en navegadores basados en Chromium, por lo que pueden intentar descargar una versión más antigua o usar Firefox.

Para usarlas, ten tu sesión de Codeforces activa y también ten abierto VScode, cuando abras un problema en Codeforces haz clic en la extensión de competitive companion (el círculo verde con una cruz), después cámbiate a VScode donde verás unas opciones donde elegirás cpp, y listo podrás probar y publicar tu código desde VS Code.

Instalar el compilador en Windows

  • Primero tenemos que descargar el gestor de paquetes msys2 desde su página oficial www.msys2.org/ o desde el gestor de paquetes integrado en Windows winget a través de una terminal (Powershell powershell logo), con el comando:
1
winget update ; winget install -e --id MSYS2.MSYS2
  • Ya instalado, abrimos la terminal de MSYS2 UCRT64 msys2 ucrt64 logo, copiamos (y pegamos con SHIFT + INSERT) y ejecutamos el siguiente comando (acepta presionando Enter 2 veces):
1
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

La descarga puede fallar en la redes institucionales (RIUAA en el caso de la UAA). Si ocurre un fallo, intenta de nuevo o prueba en otra red Wi-Fi.

msys2 toolchain

  • Ya terminada la instalación del compilador, procederemos a agregar el compilador al path. Para ello, buscamos alguna de estas palabras clave: “variables”, “path”, “variables del sistema” en el buscador de Windows y abriremos la aplicación con icono de una computadora con una palomita computadora con una palomita, allí abriremos las variables y editaremos el path agregando la dirección: C:\msys64\ucrt64\bin. (en la segunda ventana recuerda seleccionar la línea que dice “Path” antes de hacer clic en “Edit”)
C:\msys64\ucrt64\bin

path de windows

Instalar el compilador en VScode de Windows (Opción 1)

Extensión de C++

  • Después presionaremos f1 para abrir el “command palette” y escribe “walk”,

Command Palette

  • Entonces al darle enter a la opción “Welcome: Open Walkthrough…“, nos aparecerán varias opciones de las cuales elegiremos la opción que mencione C/C++

Get Started cpp

  • Al darle enter a esa opción nos aparecerá esta pantalla donde en la sección que dice “Setup your C++ Environment” deberemos darle clic al botón azul que dice “Select My Default Compiler”, esto desplegará un menú en el Command Palette donde de nuevo deberemos elegir la opción que dice “use g++.exe”

Setup C++

  • Esto causará que se abra el explorador de archivos de Windows donde deberemos navegar hacia la ruta C:/msys64/ucrt64/bin y elegir el programa g++.exe

Explorador de archivos

  • Y listo. Con esto ya podremos compilar y ejecutar el código dentro de VScode dándole clic al símbolo de reproducir en la parte superior derecha del editor, si hubiera algún problema intentar instalar el compilador con el segundo método aquí abajo.

Instalar el compilador en VScode de Windows (Opción 2)

  • Ya instalada la extensión C/C++ en VScode iremos hacia las configuraciones de la extensión.

configuración de la extensión C/C++

  • Ahí buscamos la opción que diga “compiler path”, la cual nos manda al archivo settings.json:

imagen de settings.json

  • Agregaremos estas líneas a los corchetes internos, teniendo cuidado de no borrar otras configuraciones si existieran (quitar los {} si es que existen o se quedaran sueltas).
    1
    2
    3
    4
    
      {
        "C_Cpp.default.compilerPath": "C:/msys64/ucrt64/bin",
        "C_Cpp.clang_format_path": "C:/msys64/ucrt64/bin"
      }
    
  • Con esto ya podremos compilar y ejecutar el código dentro de VScode dándole click al símbolo de reproducir en la parte superior derecha del editor

Ultima opción para solucionar cualquier error: A veces al abrir una carpeta o proyecto, el compilador no detectará la librería de <bits/stdc++.h>, para solucionar esto, presionaremos f1 para abrir el “command palette” y dentro de “C/C++: Edit Configurations (UI)” pondremos de nuevo el “Compiler Path”, pero ahora incluyendo el compilador g++: C:/msys64/ucrt64/bin/g++.exe

C/C++ Config UI

Instalar el compilador en MacOS

Las Macs con chips M1, M2 o M3 usan la arquitectura ARM. Si ves el error Bad CPU type in executable (os error 86), instala Rosetta con:

1
softwareupdate --install-rosetta

Con GNU gcc/g++

Opción 1 - Para MacOS >= 13 (Ventura), con Homebrew

Video sin editar de los pasos a seguir

  1. Primero, si no lo tenemos ya instalado, procedemos a instalar el gestor de paquetes de la comunidad para MacOs homebrew logo homebrew abriendo una terminal y ejecutando el comando, para después dar varios enters:
    1
    
     /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. después actualizamos los repositorios e instalamos el compilador gcc (el cual incluye g++ y la libreria <bits/stdc++.h>)
    1
    2
    3
    
     brew analytics off # opcional, desactiva la telemetría
     brew update
     brew install gcc --force-bottle
    

    si sale el mensaje Error: --force-bottle passed but gcc has no bottle sigue la opción 2 con Macports

  3. luego quitamos el compilador g++ ligado a clang, para poder agregar el g++ ligado a GNU
    1
    2
    
     sudo rm /usr/local/bin/g++
     sudo ln -s $(ls /usr/local/bin/g++-*) /usr/local/bin/g++
    
  4. Al final tenemos que recargar la terminal y/o Vscode, para ver reflejados los cambios

Opción 2 - Para MacOS < 13 (Monterey y anteriores), con MacPorts

Video sin editar de los pasos a seguir

  1. Primero, si no lo tenemos ya instalado, procedemos a instalar Herramientas para desarrolladores de Apple ejecutando el siguiente comando en una terminal:
    1
    
     xcode-select --install
    
  2. ahora instalamos el gestor de paquetes Macports logo MacPorts descargando el .dmg y siguiendo las indicaciones.
  3. después actualizamos los repositorios e instalamos el compilador gcc (el cual incluye g++ y la libreria <bits/stdc++.h>)
    1
    2
    
     sudo port selfupdate
     sudo port install gcc14
    
  4. luego quitamos el compilador g++ ligado a clang, para poder agregar el g++ ligado a GNU
    1
    2
    
     sudo rm /usr/local/bin/g++
     sudo ln -s $(ls /opt/local/bin/g++-*) /usr/local/bin/g++
    
  5. Al final tenemos que recargar la terminal y/o Vscode, para ver reflejados los cambios

con Clang (Xcode)

  • Este es el compilador por defecto en Xcode logo Xcode y para instalar Clang (LLVM) ejecutaremos este comando en la MacOS terminal logo terminal:
    1
    
      xcode-select --install
    
  • Clang no incluye la librería <bits/stdc++>, necesaria para usar la plantilla del club, por lo que tendremos que instalarla manualmente con los siguientes comandos:
    1
    2
    3
    4
    
      sudo mkdir -p /usr/local/include/bits
      sudo touch /usr/local/include/bits/stdc++.h
      echo '#define _GLIBCXX_HOSTED 1' | sudo tee /usr/local/include/bits/stdc++.h > /dev/null
      curl -sS https://raw.githubusercontent.com/gcc-mirror/gcc/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h | sudo tee -a /usr/local/include/bits/stdc++.h > /dev/null
    

Recuerda comentar o eliminar las líneas #pragma GCC optimize("Ofast,unroll-loops") y #pragma GCC target("avx2") de la plantilla de C++, debido a qué estas no son compatibles con Clang y darán un error de compilación!

Entorno de desarrollo en móviles

En ambos casos recomendamos más el uso de IDEs en la nube en especial el de la página https://cs50.dev/ el cual a través de un navegador como Safari, Firefox o Chromium puedes agregar un acceso directo a tus aplicaciones.

cs50.dev ejemplo

Entorno de desarrollo en Android

Para un mejor desempeño al programar, recomiendo utilizar un teclado y/o mouse externo, ya sean por Bluetooth o por USB con un adaptador OTG o con un adaptador a USB C.

terminal nativa + editor de código

En Android 12 y posteriores, suele haber el error “Process completed (signal 9)” dentro de termux. Para solucionarlo, favor de ir a este blog por Andronix

Termux es la terminal nativa de Android, está disponible en la Play Store, pero suele estar desactualizada por lo que recomiendo descargarla directamente en GitHub o a través de la tienda open-source F-Droid

Dentro de la terminal para poder instalar el compilador ejecutamos los siguientes comandos:

1
2
pkg update && pkg upgrade
pkg install build-essential

Para compilar un archivo de C++, primero navegamos a la carpeta donde este el archivo, recomiendo guardarlos en la carpeta de descargas del dispositivo (downloads), después compilamos el archivo con la extensión .cpp y para ejecutar el archivo resultante lo hacemos con ./a.out:

1
2
3
cd ~/storage/downloads/
g++ archivo.cpp
./a.out

Para los editores de código el club recomienda cualquiera de estas tres opciones:

  1. Squircle CE logo Squircle CE: disponible en la PlayStore logo PlayStore o en fdroid logo fdroid
  2. Acode logo Acode: disponible en la PlayStore logo PlayStore o en fdroid logo fdroid
  3. TermuC logo TermuC: disponible en fdroid logo fdroid

También recomiendo usar el explorador de archivos por defecto en Android “files” ya que este te permite acceder fácilmente a los archivos dentro de termux, si no se tiene esta aplicación instalada se puede instalar esta versión similar: files por marcapps

escritorios nativos

Estos métodos son recomendados para dispositivos de gama alta o recientes y para usuarios más avanzados, donde para code-oss (VScode del tur-repo en termux) tendrás que instalar extensiones manualmente.

Entorno de desarrollo en iOS/iPadOS

Para un mejor desempeño al programar, recomiendo utilizar un teclado y/o mouse externo, ya sean por Bluetooth o por USB con un adaptador/dongle Lightning o con un adaptador/dongle a USB C.

terminal emulada + editor de código

iOS no tiene una terminal nativa sin jailbreak, por lo qué la mejor opción es usar la terminal emulada:

  • ish logo ish con la que podremos compilar nuestros códigos de forma local.

Para descargar el compilador, dentro de ish ejecutaremos los siguientes comandos:

1
2
apk update && apk upgrade
apk add build-base

para compilar código es tan fácil como agregar los archivos .cpp a la carpeta root desde el explorador de archivos de iOS (Files) dentro de la carpeta de iSH y ejecutarlos con ./a.out

1
2
g++ archivo.cpp
./a.out

Para el editor de código el club recomienda:

escritorio emulado

  • Esto se hace a través de UTM logo UTM SE y es recomendado especialmente para iPads, ya que la aplicación corre algo lento debido a que es emulado, pero para un mejor rendimiento recomiendo usar Debian 11 (LXDE) y para instalar VScode recomiendo seguir esta guía oficial

Debian Desktop

Se puede llegar a un mejor rendimiento usando un tipo de paravirtualización con SPICE y JIT con TCG, pero requiere un conocimiento más avanzado y seguir más pasos.

Referencias

Esta publicación tiene la licencia CC BY 4.0 del autor.