El otro día hubo lanzamiento de las llamadas «versiones de primavera» de todos los sistemas y la integración de algunas funciones interesantes como el soporte de ratón y trackpad en iPadOS.
Pero junto a las versiones de sistemas, además llegaron las renovaciones en el terreno del desarrollo: Xcode 11.4 con radicales mejorías y arreglos que la convierten en la versión estable de Xcode once que llevamos esperando desde septiembre, así como la llegada de la última versión del lenguaje Swift: la versión 5.2.
Vamos a repasar brevemente todas las novedades que nos ofrece.
Las primordiales mejorías en el lenguaje no están en intercambios en el mismo, ya que Swift tiene alguna API estable desde su versión tres y prácticamente el 99% del código que se creara en esa versión seguirá funcionando en esta última. Lo que Apple™ ha hecho es mejorar sustancialmente «las tripas» del lenguaje mejorando e incorporando nuevas funciones que permiten un mejor análisis y detección de equivocaciónes durante escribimos vuestro código.
Arquitectura de diagnóstico
Lo primero que se ha hecho es intercambiar la arquitectura de diagnóstico del lenguaje a alguna nueva y mejorada. Esta arquitectura es lo que concede examinar el código durante lo escribimos y detectar equivocaciónes en el idéntico inclusive anteriormente de compilar vuestro programa.
Si has trabajado con Swift, es de sobra conocido que en ocasiones su «exactitud» en mostrar un problema en el código, no era la mejor. Y ese problema se agravó enormemente al venir SwiftUI cuya estructura DSL (lenguaje específico para dominio) cambió la figura habitual de representación del idéntico para con el uso de dicha librería.
Apple, consciente del problema, lleva muchos meses laburando en integrar un reciente motor de arquitectura de diagnóstico que nos dirá de figura mas precisa dónde está el error, y no solo eso, además nos sugerirá mas «fixes» (soluciones rápidas) para que el código se arregle y se muestre como debería.
Usando un modelo de la propia Apple, en la versión anterior del lenguaje, si creábamos el siguiente código:
enum E
{ case one, two }
func check(e: E) {
if e != .three {
print("okay")
}
}
En este código hemos inventado alguna enumeración que tiene dos probables valores: one
y two
. Nada más. Pero en la función check
preguntamos por un hipotético valor three
que obviamente no existe. Hasta ahora, el error que nos daba tenía que ver con el operador de comparación de no igualdad (el !=
) donde nos decía que ambos tipos de datos no podían ser comparados pues los detectaba como diferentes. Un error inexacto.

Con la nueva versión del motor, nos dirá cabalmente que el valor three
no existe en la enumeración E
, con lo que podemos comprender de alguna figura mas exacta el problema.
Este es solamente un pequeño modelo para hacernos alguna idea de este profundo intercambio que nos ayudará a que el análisis del código sea mas preciso indicándonos de figura eficiente (y rápida, ya que se ha mejorado el personal algoritmo subyacente) dónde están los equivocaciónes en el código.
Como complemento a este cambio, además se ha mejorado sustancial el motor de completado de código, que nos menciona qué código escribir durante lo escribimos (y así no tener que recordar siempre el nombre preciso de cientos u miles de métodos, variables u objetos que poseamos en vuestro programa, así como los de las librerías que usemos). Este motor ha mejorado su eficacia entre un 1.2 y un 1.6x quitando comprobaciones redundantes.
Gran parte del responsable de este intercambio es la arquitectura LSP (Language Server Protocol) de Microsoft™ que Apple™ ha incorporado al etiquetado, procedimiento y completado de código. Al usar Apple™ esta tecnología, en breve, cualquiera editor u programa de terceros (como Sublime Text, Visual Studio Code u inclusive IDEs como Visual Studio) podrá autocompletar, examinar y gestionar el código en Swift de la misma figura y con el idéntico motor que usa Xcode, lo que dará alguna experiencia mas sostenible inclusive entre distintos sistemas operativos.
Mejoras en el compilador
Compilar un programa y su agilidad es tarea esencial. Es lo que traduce vuestro código en algo que un sistema operacional pueda entender. Aquí Apple™ además se ha puesto las pilas y ha mejorado sustancialmente la agilidad de los procesos de compilación meta (release) y para depuración (debug).

Para ello ha optimizado los dos modos mas usados: el incremental (que detecta y compila solo los intercambios reales en el código entre compilación y compilación, y así mejora el período en las pruebas de vuestro programa) y el de la optimización del módulo completo (o WMO) que es usado cuando queremos crear la versión meta de vuestro programa y que pone todo el código en un solo fichero, trabajándolo de figura completa para un enlace mas eficiente.
A este intercambio se han incorporado además importantes mejorías en el depurador que nos concede ejecutar vuestro programa línea a línea, ver su comportamiento durante se ejecuta y extraer datos que nos ayuden a detectar equivocaciónes en período de ejecución.
Incorporaciones en el código
Con este lanzamiento, Apple™ ha incorporado dos nuevas funciones atrayentes al lenguaje. Una de ellas es la expectativa de usar alguna función llamada callAsFunction
adentro de cualquiera clase u estructura. Su uso, muy orientado a la futura interoperabilidad de Swift con Python en la que trabaja Google™ para su motor TensorFlow de aprendizaje automático, concede que llamemos a la constante u variable donde se guarde la instancia de la clase u estructura, como si fuera alguna función.
struct Dado {
var caras:Int
func callAsFunction() -> Int {
Int.random(in: 1...caras)
}
}
let dado1 = Dado(caras: 8)
let resultado = dado1()
Como podemos ver, creamos la instancia del struct
Dado
, y podemos ejecutarlo como alguna función llamando a dado1()
a pesar de no indicar de figura explícita el nombre de la función ya que callAsFunction
hace las veces de función afiliada a la propia instancia.
También, en programación funcional podemos usar alguna nueva figura de referenciar a los elementos adentro de las funciones de orden mas alto de la programación funcional, así como cualquiera otra función implícita que reciba como parámetro la instancia de un dato.
Antes había que usar el parámetro abreviado $ 0
seguido del nombre de la propiedad (como $ 0.name
) y ahorita podemos usar la referencia a través de un key path con la barra invertida: \.name
, dando por hecho que \.
pertenece a la raíz de la instancia obtenida por parámetro. Una chica mejora semántica que hace mas claras las referencias.
Pequeñas mejoras
Sin duda, Swift es 1 de los planes mas prometedores de Apple™ en todos los sentidos y donde mas esfuerzo y labor están poniendo. No solo por la propia compañía y todas las compañías que participan en el plan como lenguaje de código abierto, también por alguna increíble comunidad que ofrece activa mejoras, arreglos, incorporaciones…
Desde aquí, nuestro agradecimiento a todos ellos por el excelente labor que están realizando.
–
La noticia Swift 5.2, novedades en la nueva versión del lenguaje abierto de Apple™ fue notificada originalmente en Applesfera por Julio César Fernández .
Toda tecnología Apple
el inventor es el AUTOR ORIGINAL de su link de arriba, auspiciamos al desarrollador original de la noticia sin perjudicar su reputación ni posicionamiento web.