11P by regentag 2달전 | favorite | 댓글 2개

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는 가장 적합한 도구임.

핸드폰으로 쓰다보니 오타가 있군요 ㅠ

memory sadety -> memory safety 입니다.

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