Swift es un Rust más conveniente
(blog.namangoel.com)Rust
- Rust es un lenguaje muy querido, rápido y con una gran comunidad
- Rust introduce el concepto de ownership para resolver los problemas de gestión de memoria
- Proporciona utilidades como
Rc,ArcyCowpara soportar conteo de referencias y "clone-on-write" - Cuando se necesita trabajo de más bajo nivel, se puede usar el sistema
unsafepara acceder a punteros C crudos - Rust tiene varias características de los lenguajes funcionales, como enumeraciones etiquetadas, expresiones
match, funciones de primera clase y un sistema de tipos potente - Usa un compilador basado en LLVM, por lo que puede compilarse a código nativo y a WASM
Swift
- También he usado Swift durante varios años, y al aprender Rust encontré similitudes con Swift
- Swift también tiene características de los lenguajes funcionales, como enumeraciones etiquetadas, expresiones
matchy funciones de primera clase - Swift usa tipos por valor por defecto y tiene semántica de "copy-on-write"
- Cuando se necesita más rendimiento, se puede elegir el sistema de ownership para "mover" valores
- Cuando se necesita trabajo de más bajo nivel, se puede usar el sistema
unsafepara acceder a punteros C crudos - Swift también usa un compilador basado en LLVM, por lo que puede compilarse a código nativo y a WASM
¿Déjà vu?
- Swift y Rust tienen conjuntos de funciones muy similares
- La gran diferencia está en la perspectiva
- La diferencia se vuelve clara al considerar el modelo de memoria base
Rust es top-down, Swift es bottom-up
- Rust comienza como un lenguaje de sistemas de bajo nivel y ofrece herramientas para subir a un nivel más alto
- Swift comienza como un lenguaje de alto nivel y ofrece herramientas para bajar a un nivel más bajo
- El modelo de gestión de memoria es el ejemplo más claro
- Swift usa tipos por valor por defecto y tiene semántica de "copy-on-write"
- Rust facilita el uso de valores "moved" y "borrowed", pero usar valores
Cowrequiere trabajo adicional - Swift facilita el uso de valores con "copy-on-write", pero en cambio requiere trabajo adicional al usar borrowing y moves
- Rust es más rápido por defecto, y Swift es más simple y fácil por defecto
Swift oculta las ideas de Rust en una sintaxis similar a C
- La sintaxis de Swift oculta conceptos de lenguajes funcionales dentro de una sintaxis parecida a C, lo que hace que los desarrolladores la adopten con facilidad
- Comparación entre la sentencia
matchde Rust y la sentenciaswitchde Swift - La sentencia
switchde Swift en realidad es igual a una expresiónmatch, pero tiene otro nombre y otra sintaxis - Swift permite agregar métodos directamente a un
enum
Tipos opcionales
- Rust no tiene
null, pero sí tieneNone - Swift tiene
nil, pero en realidad es lo mismo queNone - Swift usa
T?en lugar deOption, y obliga al compilador a verificar que no seanil - En Swift es fácil usar tipos opcionales
Manejo de errores
- Rust no tiene
try-catch, pero usa el tipoResult - Swift usa
do-catchen lugar detry-catch, y exige usartryantes de llamar a una función - El manejo de errores de Swift es similar al de Rust, pero está oculto detrás de una sintaxis más familiar
El compilador de Rust detecta problemas, y el compilador de Swift resuelve algunos problemas
- El compilador de Rust detecta muchos problemas comunes en tiempo de compilación y sugiere soluciones
- Ejemplo de una enumeración autorreferencial
- Swift usa la palabra clave
indirectpara marcar tipos recursivos, y el compilador se encarga del resto
Swift es menos "puro"
- Swift fue diseñado para reemplazar Objective-C, y tenía que poder interactuar con código existente
- Swift tomó muchas decisiones prácticas y es un lenguaje más grande que Rust
- Swift fue diseñado pensando en la "divulgación progresiva", de modo que mientras más aprendes del lenguaje, más funciones se revelan
- Algunas características del lenguaje en Swift:
- clases / herencia
- async-await
- async-sequences
- actors
- getters y setters
- lazy properties
- property wrappers
- Result Builders (por ejemplo: HTML / SwiftUI)
El costo de la conveniencia
- Swift es un lenguaje más fácil para empezar y volverse productivo
- La sintaxis es más familiar y muchas tareas se manejan automáticamente
- Swift es un lenguaje de más alto nivel, y eso implica los mismos trade-offs
- Por defecto, los programas en Rust son mucho más rápidos que los programas en Swift
- Rust es rápido por defecto y te permite volverlo lento, mientras que Swift es fácil por defecto y te permite volverlo rápido
- Ambos lenguajes tienen sus propios usos
- Rust es más adecuado para programación de sistemas y embebida
- Swift es más adecuado para escribir UI y servidores
- Se espera que con el tiempo la superposición entre ambos lenguajes crezca aún más
Resumen de GN⁺
- Este artículo compara y explica las similitudes y diferencias entre Swift y Rust
- Swift toma prestadas muchas ideas de Rust y las ofrece con una sintaxis más familiar
- Ambos lenguajes tienen fortalezas y usos propios, y se espera que con el tiempo aparezca aún más superposición entre ellos
- Ayuda a entender las diferencias en varios aspectos, como el modelo de gestión de memoria, el manejo de errores y los tipos opcionales en Swift y Rust
- Entre los lenguajes con funciones similares están Kotlin y TypeScript
1 comentarios
Comentarios de Hacker News
A quienes usan Rust por primera vez les gusta Rust porque es su primer contacto con lenguajes de la familia ML
Rust es el primer lenguaje que llevó al mainstream la gestión automática de memoria sin GC
La era de Smalltalk terminó; ahora es la era de ML
Al integrar Rust en una app de iOS hecha en Swift, dieron ganas de usar más Swift
Rust introdujo el concepto de ownership para resolver problemas de gestión de memoria, pero no fue quien lo inventó
Rust y Swift tienen fortalezas distintas
Las herramientas de Swift son más incómodas que las de Rust
Intentaron aprender Rust, pero les costó porque los ejemplos eran demasiado complejos
En Swift se pueden agregar métodos directamente a los enums
Swift usa tipos por valor por defecto y semántica copy-on-write
Cada vez que leen elogios sobre Swift, se preguntan cómo es la experiencia de quienes desarrollan sin usar el ecosistema de Apple/macOS
Se preguntan si son la única persona a la que no le gusta la sintaxis con punto de Zig y Swift
.variantvsType::Variant