언어 디자인에 관심이 있으며 일반적으로 널리 알려진 기능 (예 : 상속, 다형성, 대리자, 람다, 캡처, 가비지 수집, 예외, 제네릭, 분산, 반사 등), 상호 작용에 대해 쉽게 추론 할 수 있습니다. 특정 언어, 구현 방법, 제한 사항 등
지난 몇 개월 동안 필자는 객체 수명을 정적으로 검증 할 수있게하여 메모리 안전성과 결정 론적 자원 관리를 보장하는 소유권 시스템이있는 Rust에 대해 읽기 시작했습니다. 평범한 언어 사용자의 관점에서 시스템을 거의 즉시 선택할 수있었습니다.
그러나 언어 디자이너의 관점에서 Rust의 사물이 왜 그런지 깨닫는 데 시간이 걸렸습니다. 시스템이없는 경우 시스템의 무결성을 위반하는 사례를 스스로 강요 할 때까지 소유권 시스템의 일부 제한에 대한 추론을 즉시 이해할 수 없었습니다.
내 주요 질문은 Rust 및 그 소유권과는 아무런 관련이 없지만 필요한 경우 의견 / 답변에서 예제로 자유롭게 사용하십시오.
언어 디자이너가 새로운 기능을 디자인 할 때 기능이 제대로 작동하는지 결정하기 위해 어떤 방법론 또는 프로세스를 사용합니까?
"새로운"이란 말은 기존 언어로 이미 테스트 된 것이 아니며 (따라서 다른 디자이너가 수행 한 대부분의 작업) 것입니다. "올바로 작동"한다는 것은이 기능이 의도 한 문제를 올바르게 해결한다는 것을 의미하며, 이는 상당히 방탄입니다. "합리적으로 방탄"이란 기능의 무결성을 위반하는 언어 또는 언어의 특정 하위 집합 (예 : "안전하지 않은"코드가없는 하위 집합)으로 코드를 작성할 수 없음을 의미합니다.
간단한 형태의 기능을 찾은 후 시행 착오 과정입니까? 그런 다음이를 위반하는 방법을 찾은 다음 성공적으로 위반 한 경우 패치 한 다음 반복하십시오. 그리고 나서, 다른 가능한 위반을 생각할 수 없을 때, 아무것도 남길 바라지 않고 하루라고 부릅니까?
또는 기능이 작동한다는 것을 실제로 (수학적 의미로) 증명 한 다음 해당 증거를 사용하여 처음부터 기능을 올바르게 (또는 대부분 올바른) 얻을 수 있는 공식적인 방법이 있습니까?
(컴퓨터 공학이 아닌 공학적 배경을 가지고 있다는 점을 언급해야합니다. 따라서 CS 사람들에게 명백한 것을 놓치고 있다면 자유롭게 지적하십시오.)