3 puntos por GN⁺ 2023-11-09 | 3 comentarios | Compartir por WhatsApp

Por qué la compilación de SciPy para Python 3.12 es casi un milagro

  • Recientemente se lanzó la versión 3.12 de Python.
  • Normalmente, los paquetes principales publican rápidamente versiones compatibles con la nueva versión de Python.
  • Que SciPy haya lanzado una compilación compatible con Python 3.12 fue el resultado afortunado de varias líneas de tiempo que coincidieron.

El papel de Fortran y de los compiladores

  • Fortran ha sido un lenguaje de programación importante desde la década de 1950, y mucho código científico está escrito en Fortran.
  • Han existido varios compiladores de Fortran, pero todos eran propietarios.
  • Un compilador se encarga de transformar el código escrito por el programador en una forma que la computadora pueda ejecutar.
  • GCC es un compilador de uso libre que soporta diversas arquitecturas de CPU y sistemas operativos.

Python y los problemas de rendimiento

  • Python puede usarse sin compilador, pero es más lento que los lenguajes compilados.
  • Cuando el rendimiento es importante, una buena solución es usar código compilado y envolverlo con una interfaz de Python.
  • NumPy y SciPy usan código Fortran por razones de rendimiento, y por eso los usuarios necesitan un compilador al instalar esos paquetes.

Los problemas del empaquetado en Python

  • El empaquetado en Python ha tenido que reinventarse continuamente debido a su complejidad.
  • Descargar directamente el código fuente trae problemas como la necesidad de configurar un compilador y largos tiempos de compilación para el usuario.
  • El formato "wheel" mejoró esto al distribuir los paquetes junto con las bibliotecas necesarias.

La aparición de conda y conda-forge

  • conda ofrece un enfoque más integral que incluye todo lo necesario para el empaquetado.
  • conda-forge es un canal impulsado por la comunidad que se encarga del trabajo de integración de paquetes.
  • conda-forge intenta dar soporte a todas las plataformas comunes y es operado por voluntarios.

La elección de Meson como herramienta de compilación de SciPy

  • SciPy eligió Meson como su herramienta de compilación.
  • Meson ofrece una interfaz con estilo Python y es menos complejo que CMake.
  • Meson tiene una filosofía de diseño que evita permitir acciones incorrectas a usuarios no expertos.

El renacimiento de Fortran y LLVM

  • Fortran ha ganado interés en los últimos años.
  • Se ha intensificado el desarrollo de nuevos compiladores de Fortran basados en LLVM.
  • LLVM proporciona una infraestructura de compiladores que funciona en diversas arquitecturas y plataformas.

La transición de SciPy a Meson y los problemas de conda-forge

  • SciPy se cambió a Meson, pero surgieron problemas por la ausencia de un compilador de Fortran para Windows.
  • conda-forge tuvo que reconstruir todos los paquetes relacionados para migrar a Python 3.12.

El significado de "yukatastrophe" y la opinión de GN⁺

  • La suite de pruebas de SciPy pasó al 100%, lo que permitió una compilación de SciPy compatible con Python 3.12 en conda-forge.
  • Esto fue el resultado de la coincidencia de varios esfuerzos y casualidades, y aportó un gran beneficio a la comunidad de Python.
  • Opinión de GN⁺: Este artículo muestra cómo el esfuerzo y la colaboración de la comunidad de Python pueden resolver problemas técnicos complejos. El lanzamiento exitoso de una compilación de SciPy compatible con Python 3.12 representa un avance importante en la computación científica y simboliza la fortaleza del software de código abierto y el poder de la comunidad.

3 comentarios

 
GN⁺ 2023-11-09
Opiniones de Hacker News
  • La comunidad de software libre debería dejar de dar soporte al sistema operativo de Microsoft y hacer que ellos mismos porten cosas como scipy

    • Quien necesite Linux puede encontrarlo en WSL2
    • Microsoft debería incluir un compilador en el sistema operativo, como lo han hecho todos los demás proveedores de sistemas operativos durante 60 años
  • La razón por la que el empaquetado de Python es complejo se debe a la falta de estandarización de las herramientas de compilación de C/C++/Fortran y al enorme ecosistema; no es un problema de Python en sí

    • Esta complejidad es una parte que no se puede reducir
    • El simple hecho de que el sistema de empaquetado de Python funcione ya es un milagro
  • Parece que es un bug que la herramienta de compilación Meson rechace la combinación de MSVC+gfortran

    • El propósito de una herramienta de compilación es ejecutar los comandos que el usuario indique, no rechazar al usuario
  • Mucha gente está resolviendo el problema usando WSL2, y da curiosidad por qué alguien querría compilar una versión nativa de Windows

  • La mayoría de las mejores bibliotecas BLAS están escritas en C, y da curiosidad hasta dónde se podría llegar solo con C y Python

    • Fortran puede ser una parte inevitable, pero es positivo que haya empezado a mejorar el tooling de Fortran en Windows
  • Pregunta ingenua sobre si la semántica de Fortran es tan distinta de la de C que no se puede convertir a C y luego compilar con un compilador de C, y si sería posible mantenerlo en C

    • Se asume que no debe haber muchos expertos en Fortran manteniendo bibliotecas antiguas, y que hace falta mantenimiento
  • Es difícil seguirle el ritmo a los cambios en el sistema de compilación de Python

    • Hay curiosidad por las cifras de rendimiento en Windows, pero se espera que la mayoría del trabajo serio se ejecute en máquinas Linux
  • Pregunta sobre si "aarch64" y "arm64" son lo mismo

    • En Wikipedia, ARM64 redirige a AArch64
  • Fortran era objeto de bromas en los departamentos de TI, pero en los últimos años ha vivido un resurgimiento dramático

    • La razón de este resurgimiento no está clara, pero puede entenderse a través de enlaces relacionados
  • Pregunta sobre la diferencia entre "arm64" y "aarch64" en la tabla de compiladores/arquitecturas

    • Se menciona que el artículo de Wikipedia sobre ARM64 redirige a AArch64
 
ahwjdekf 2023-11-10

Vaya, aquí quedó brutalmente expuesta la miserable dependencia de los lenguajes compilados a binarios.

 
kayws426 2023-11-10

¿No es que lo resolvieron para Python, pero no para otros ecosistemas? Por eso seguramente ofrecerán binarios precompilados.