Muy buenas, les saluda Miguel y aquí les traigo otro tutorial.
Este artículo es una introducción informal a Swift. Se enfoca en lo que hace atractivo a Swift y muestra cómo comenzar a usarlo fácilmente en el lado del servidor.
Los artículos futuros cubrirán más en profundidad los casos de uso de Swift, así como su sintaxis.
Índice
Una breve historia de Swift
Swift fue creado por Apple en 2014 y lo convirtió en el lenguaje dominante para el desarrollo de iOS. Tener el respaldo de una de las empresas tecnológicas más influyentes del mundo es algo extraordinario. Además, con visión de futuro, Apple abrió Swift en 2015. No es sorprendente que haya evolucionado para abarcar usos que van desde la programación de sistemas hasta aplicaciones móviles y de escritorio, escalando a servicios en la nube y aprendizaje automático.
Rápido el idioma
Swift es un lenguaje de programación de sistema de uso general, multi-paradigma, compilado y de alto rendimiento. La filosofía Swift gravita en torno a los siguientes principios:
- Seguro. Su sintaxis le anima a escribir código limpio y coherente y es seguro por defecto. Sin embargo, siempre puede optar por la opción insegura para hacer que partes de su código se ejecuten más rápido.
- Rápido. Swift está destinado a reemplazar los lenguajes basados en C (C, C ++ y Objective-C). No es sorprendente que se esté adoptando para el aprendizaje profundo y la computación diferencial.
- Expresivo. La documentación oficial de Swift dice que “la sintaxis (Swift) es un placer de usar”, solo puedo estar de acuerdo con eso. Es realmente un placer codificar con una sintaxis tan elegante.
Suficiente con la propaganda de Swift, hablemos de por qué me colgué de Swift en primer lugar.
Rápido e IA
Me encontré con Swift mientras seguía el curso de Fastai Deep Learning . Me sorprendió descubrir que las dos de las catorce conferencias son sobre Swift: ¡eso es aproximadamente el 15% del contenido 😮! De hecho, una nueva implementación de Fastai con Swift pronto verá la luz.
Google también está en el juego con Swift para TensorFlow.
Swift para TensorFlow es una plataforma de próxima generación para el aprendizaje automático, que incorpora las últimas investigaciones sobre aprendizaje automático, compiladores, programación diferenciable, diseño de sistemas y más. Este es un proyecto en etapa inicial: no tiene funciones completas ni está listo para producción, pero está listo para que los pioneros lo prueben en proyectos, brinden comentarios y ayuden a dar forma al futuro.
¿Por qué, de repente, Swift, un lenguaje aparentemente orientado a iOS / macOS, está ganando tanta fuerza en el aprendizaje automático?
El aprendizaje profundo es computacionalmente costoso, pasar grandes conjuntos de datos a través de largas cadenas de operaciones de tensores puede ser bastante desafiante. De hecho, Python tiene un límite en términos de hasta qué punto puede realizar estos cálculos rápidamente.
Cualquier practicante de aprendizaje profundo que utilice un lenguaje que no sea Python está renunciando a un vasto ecosistema de bibliotecas interconectadas. El problema es que Python no está diseñado para ser rápido ni seguro. En cambio, está diseñado para ser fácil y flexible. De hecho, los problemas de rendimiento se han reducido mediante el uso de bibliotecas escritas en otros lenguajes como C y C ++ (Numpy, Pytorch, Tensorflow…). Para que Python sea más seguro, un mecanismo de escribir anotaciones ha sido introducido. Sin embargo, estos no son lo suficientemente poderosos y solo mitigan el problema. Las bibliotecas C y C ++ también introducen otra capa de complejidad: cualquier practicante de aprendizaje profundo tendrá dificultades para depurar el código Python que utiliza estas bibliotecas.
Swift está diseñado para ser casi tan rápido como C y C ++, seguro y expresivo. Claramente tiene todos los ingredientes para llegar a la siguiente etapa de adopción.
En particular, ya podemos ejecutar Swift del lado del servidor con mucha facilidad. Veamos cómo.
Swift del lado del servidor
Si queremos poder implementar modelos de ML a escala en un futuro cercano, debemos comenzar por implementar servidores con Swift.
Cuando se trata de Swift del lado del servidor, hay algunas soluciones, pero no demasiadas todavía. Los dos que tomé en consideración son Vapor y Kitura. El primero comenzó como un proyecto independiente de código abierto, mientras que el segundo comenzó como un proyecto interno en IBM, que lo controló y patrocinó hasta sus inicios. La sintaxis de Vapor está más cerca del lenguaje Swift y del estilo de programación funcional. Entonces decidí usarlo. Puedes leer más sobre la diferencia entre los dos aquí.
Para poder implementar los servicios Swift con facilidad, la mejor solución es utilizar Estibador. Para aquellos que no estén familiarizados, Docker puede ejecutar paquetes de software en entornos aislados autónomos llamados contenedores. Estos contenedores agrupan sus propias herramientas, bibliotecas y archivos de configuración. Los contenedores pueden comunicarse entre sí a través de canales bien definidos.
Si no desea pasar sus días configurando y configurando su entorno de trabajo, entonces podría pensar en probar Docker.
En lo que sigue, supongo que ya ha instalado la CLI de Docker. Si no lo hace, visite este enlace e instálelo 🐳.
Sin más preámbulos, ¡saltemos al código!
Instalando Vapor y creando un nuevo proyecto
En primer lugar, instalemos la caja de herramientas de vapor:
Escriba lo siguiente para comprobar que todo funciona como se esperaba.
vapor --help
Debería ver una lista de comandos disponibles.
Ahora podemos usar los comandos CLI de vapor para crear un nuevo proyecto. Observe que dejé un comando de cambio de directorio comentado, ya que es posible que desee crear el proyecto en un nuevo directorio si todavía está en el toolbox
directorio.
No cubriremos la organización de la aplicación en este artículo. Como guía lineal, piense en main.swift
como el punto de entrada de su aplicación donde arranca el servidor y hace las cosas que su servidor necesita para comenzar a funcionar. los sources
carpeta contiene su aplicación mientras que Tests,
notablemente, contiene las pruebas. Package.swift es el archivo de manifiesto de su proyecto.
En cambio, veremos rápidamente routes
archivo. Entonces, naveguemos hasta el archivo rápido que contiene las rutas y reemplacemos la cadena «mundo» con un emoji.
Abra el proyecto recién creado con su editor favorito. En Código de Visual Studio, debería tener el siguiente aspecto:
Como puede ver, la sintaxis es dulce y limpia. Primero tú import Vapor
y define una función arrojable llamada route
. Luego, dentro de esa función, define dos funciones get. En nuestro ejemplo, definimos dos puntos finales GET: /
y /hello
.
A continuación, cambiemos lo que entra en la función app.get(“hello”)
y reemplace la declaración de devolución así:
app.get("hello") { req -> String in // return "Hello, World!" return "Hello, 🌍!" }
Compile y ejecute el servidor con Docker
El comando Vapor ‘new’ genera automáticamente un Dockerfile dentro del directorio del proyecto. Debería verse como el siguiente.
# ================================ # Build image # ================================ FROM vapor/swift:latest as build WORKDIR /build # First just resolve dependencies. This creates a cached layer that can be reused # as long as your Package.swift/Package.resolved files do not change. COPY ./Package.* ./ RUN swift package resolve # Copy entire repo into container COPY . . # Compile with optimizations RUN swift build \ --enable-test-discovery \ -c release \ -Xswiftc -g # ================================ # Run image # ================================ FROM vapor/ubuntu:18.04 WORKDIR /run # Copy build artifacts COPY --from=build /build/.build/release /run # Copy Swift runtime libraries COPY --from=build /usr/lib/swift/ /usr/lib/swift/ # Uncomment the next line if you need to load resources from the `Public` directory #COPY --from=build /build/Public /run/Public ENTRYPOINT ["./Run"] CMD ["serve", "--env", "production", "--hostname", "0.0.0.0"]
Dado que no necesita el compilador Swift para ejecutar su servidor, Dockerfile separa las imágenes de compilación y ejecución. En consecuencia, la salida final del Dockerfile será extremadamente ligera. Esto hace que el servidor Swift sea bastante útil en una infraestructura de microservicios.
¡Ahora podemos crear y publicar la aplicación!
Si navega a su localhost: 8080 / hola, debería ver lo siguiente:
¡Felicidades! ¡Ejecutó su primer servidor Swift hello world!
Últimas palabras
La comunidad de Swift prosperará a medida que se unan más desarrolladores. Todavía estamos en una fase de adopción temprana, pero gracias a grandes proyectos como Tensorflow Swift y Fastai, la adopción de Swift podría tener mucha tracción. Espero que este artículo haya inspirado a algunos a darle una oportunidad a Swift. En el futuro, agregaré más contenido y tutoriales sobre Swift y sus aplicaciones.
Me encantaría escuchar tu opinión al respecto. Así que siéntete libre de compartir cualquier cosa conmigo.
Aquí está el enlace al repositorio.
Gracias por leer.
Añadir comentario