6 puntos por GN⁺ 2024-06-13 | 2 comentarios | Compartir por WhatsApp
  • Swift es compatible no solo con las plataformas de Apple, sino también con Linux y Windows
  • Con Swift Static Linux SDK, se pueden compilar ejecutables completamente enlazados de forma estática sin dependencias externas
    • Esto permite ejecutarlos en cualquier distribución de Linux
    • Se puede desarrollar y probar en macOS, y luego desplegar en servidores basados en Linux
  • El enlazado es el proceso de tomar distintas partes de un programa y conectar sus referencias
    • El enlazado estático ocurre en tiempo de compilación, y el dinámico en tiempo de ejecución
    • Las bibliotecas estáticas son colecciones de archivos objeto individuales, y las bibliotecas dinámicas son monolíticas
  • Ventajas y desventajas del enlazado estático:
    • Ventajas: no hay sobrecarga en tiempo de ejecución, solo se incluye el código de biblioteca necesario, no se requieren bibliotecas dinámicas instaladas por separado, no hay problemas de versiones en tiempo de ejecución
    • Desventajas: no se puede compartir código (mayor uso de memoria), no se pueden actualizar dependencias sin recompilar el programa, aumenta el tamaño del ejecutable
  • Al usar enlazado estático en Linux, se pueden eliminar por completo las dependencias de bibliotecas del sistema según la distribución
  • Es necesario instalar la toolchain Open Source desde swift.org (no se puede usar la toolchain incluida con Xcode)
  • Se puede instalar Static Linux SDK con el comando swift sdk install
  • Con el comando swift build --swift-sdk x86_64-swift-linux-musl se puede compilar un binario Linux x86-64, y con swift build --swift-sdk aarch64-swift-linux-musl un binario Linux ARM64
  • Los paquetes de Swift que usan Foundation o Swift NIO funcionan sin cambios
  • Los paquetes que usan bibliotecas de C deben modificarse para importar Musl en lugar de Glibc
    • Musl ofrece buen soporte para enlazado estático y tiene una licencia permisiva que facilita la distribución de ejecutables
  • Las dependencias de paquetes se pueden modificar con el comando swift package edit

2 comentarios

 
cichol 2024-06-14

Ahora da la impresión de que usando esto podría salir algo que soporte de forma más fluida el desarrollo simultáneo de Android e iOS con Swift...

 
GN⁺ 2024-06-13
Opiniones en Hacker News
  • Nuevo soporte de plataformas personalizadas en Swift: Que Swift ahora soporte sistemas embebidos y WASM, y que se haya movido a una organización de GitHub no perteneciente a Apple, es un gran avance para expandir Swift a otras plataformas. También resulta interesante que pueda usarse para la verificación de seguridad de AI OS.

  • Binarios de Swift ejecutables en contenedores Alpine: Da gusto poder ejecutar binarios de Swift en contenedores Alpine. El trabajo de soporte para musl ha avanzado más rápido de lo esperado. La compilación cruzada también es muy útil.

  • Expectativa por el soporte para Debian: Me da gusto ver que se agreguen paquetes de Swift en Debian. Parece que voy a usar más Debian como VM de desarrollo.

  • Expectativa por usar Swift en sistemas embebidos: He trabajado bastante con sistemas embebidos en C, pero me gustaría probar Swift en una placa de desarrollo STM.

  • Desventajas del enlace estático: ASLR no funciona correctamente o solo se aleatoriza un objeto. En un lenguaje con seguridad de memoria quizá no sea una gran desventaja. Compartir objetos comunes también reduce el I/O.

  • Problemas de compatibilidad entre distribuciones: Un programa compilado en una distribución o versión específica puede no funcionar en otra. Está bien que Swift ofrezca enlace estático, pero lo mejor es que las distribuciones puedan elegir cómo empaquetar y distribuir los paquetes.

  • Posibilidad de competir con Golang: Parece que Swift podría competir con Golang en facilidad de despliegue. Empuja la complejidad lejos del usuario final.

  • Apps GUI multiplataforma: Me pregunto cómo sería crear apps GUI multiplataforma con Swift. SwiftUI probablemente no se pueda usar, pero planeo usar Swift para escribir scripts sencillos.

  • Advertencia sobre el uso de imágenes de CentOS 7: Seguir ofreciendo imágenes de CentOS 7 parece una locura. Una advertencia para no usarlas.

  • Aumento de la complejidad de Swift: Swift podía reemplazar fácilmente a Python, pero el lenguaje se ha vuelto más complejo y ahora parece una imitación de C++.

  • Por qué usar Swift en lugar de Rust: Una pregunta sobre por qué habría que usar Swift en vez de Rust.

  • Por qué usar Swift sin iOS/SwiftUI: Una pregunta sobre si hay alguna razón para usar Swift sin iOS/SwiftUI. Parece que no la hay, salvo cuando un desarrollador de Swift quiere usar un lenguaje que ya conoce en proyectos pequeños.