11 puntos por regentag 2024-10-20 | 2 comentarios | Compartir por WhatsApp

Este es un comentario comparando Rust y Ada que encontré en r/ada de Reddit.

  • Ambos lenguajes tienen ventajas por no ser C. Las trampas sintácticas de C que te hacen dispararte en el pie, el comportamiento indefinido, etc.

  • Ambos lenguajes ofrecen seguridad de memoria. Los límites de los arreglos se verifican en tiempo de ejecución, hay reglas para comprobar punteros válidos, etc. Ada tiene verificaciones algo más simples y cuenta con Unchecked_Access, que permite saltarse todo eso. El borrow checker de Rust es más sofisticado, pero también es difícil de eludir incluso en situaciones donde sería necesario hacerlo.

  • Rust adoptó la asignación dinámica. En Ada también es posible, pero resulta torpe e incómodo. Está claro que el lenguaje Ada no la desea. Ada proviene de una época en la que la asignación en el heap se consideraba un problema para la seguridad, se temía la fragmentación de memoria y había que demostrar que no habría agotamiento de memoria. Rust recomienda usar el heap libremente y, si se necesita asignación dinámica, Rust es claramente más seguro. En Ada, liberar memoria no es seguro porque puede dejar punteros colgantes.

  • Rust tiene ventaja en seguridad de hilos. El borrow checker evita las race conditions desde el principio.

  • Ada tiene ventaja en seguridad de valores. Los subtipos restringidos son una buena herramienta para escribir código correcto y sirven como base para otras funciones de Ada, como las verificaciones de arreglos.

  • Ada tiene ventaja en el área de prueba formal mediante SPARK. No se encontró algo así en Rust. Si la seguridad de alto nivel es indispensable, SPARK es la herramienta más adecuada.

2 comentarios

 
regentag 2024-10-20

Como lo escribí desde el celular, hay algunos errores tipográficos :'(

memory sadety -> memory safety.

 
jwh926 2024-10-22

burrow checker -> borrow checker
thread safery -> thread safety
:D