Reddit의 r/ada에서 발견한 Rust와 Ada의 비교 댓글입니다. 두 언어 모두 __C가 아님__에서 오는 이점이 있음. C의 문법적 foot guns(역주: 프로그래머가 자기 발을 쏘게 하는 기능)들, 정의되지 않은 동작 등. 두 언어 모두 memory safety를 지원함. 배열 경계는 런타임에 검사되며, 유효한 포인터를 확인하는 규칙 등. Ada는 검사가 좀 더 간단하며, 모든것을 우회하는 Unchecked_Access가 있음. Rust의 burrow checker는 좀 더 정교하지만 우회가 필요한 상황에도 우회가 힘듦. Rust는 동적 할당을 수용했음. Ada에서도 가능은 하지만, 어색하고 불편함. Ada 언어가 이를 원하지 않는게 분명함. Ada는 힙 할당이 안전에 문제가 되고, 메모리의 파편화를 걱정하고, 메모리 고갈이 없음을 증명해야 하던 시대에서 유래했음. Rust는 힙을 자유롭게 사용하는것을 권장하며, 동적 할당이 필요하다면 Rust가 확실히 더 안전함. Ada에서 할당 해제는 dangling pointer를 남길 수 있어 안전하지 않은 작업임. Rust는 thread safery에서 우위에 있음. Burrow checker는 race condition을 처음부터 방지함. Ada는 value safety에서 우위에 있음. Constrained subtype은 올바른 코드 작성을 위한 좋은 도구이며, 배열 검사와 같은 Ada의 다른 기능을 위한 기초가 됨. Ada는 SPARK를 사용하여 formal proof 분야에서 우위에 있음. Rust에서는 이런것을 찾을 수 없었음. 고수준의 안전성이 필수적이라면 SPARK는 가장 적합한 도구임.