향후 관리되는 런타임은 미묘한 데이터 손상 문제에 대한 추가 보호 기능을 제공합니까?관리되는 언어 및 런타임의 향후 보호
Java 및 .NET CLR과 같은 관리 런타임은 C#과 같은 기본 언어에서 많은 메모리 손상 버그가 발생할 가능성을 줄이거 나 없애줍니다. 그럼에도 불구하고, 그들은 놀랍게도 모든 메모리 손상 문제로부터 면역되지 않습니다. 하나는 직관적으로 그 입력을 검증하고, 버그가없고, 예외를 강력하게 처리하는 메소드가 객체를 하나의 유효한 상태에서 다른 상태로 변환한다는 것을 직관적으로 기대하지만, 그렇지 않습니다. (프로그래밍 규칙을 일반적인 사용 사실이 아니다라고하는 것이 더 정확하다 - 객체 구현 내가 설명하는 문제를 방지하기 위해 자신의 길에서 이동해야합니다.)
는 다음과 같은 시나리오를 생각해
-
을
스레딩. 호출자는 객체를 다른 스레드와 공유하고 스레드를 동시에 호출 할 수 있습니다. 개체가 잠금을 구현하지 않으면 필드가 손상되었을 수 있습니다. (아마도 - 객체가 스레드로부터 안전하다는 것을 통보받지 못하면 - 런타임은 다른 스레드에서 동시에 실행되는 같은 객체에있는 메소드가 있으면 예외를 던지기 위해 모든 메소드 호출에서 인터록을 사용해야합니다. 이것은 보호 기능이 될 것입니다. 관리되는 런타임의 다른 안전 기능과 마찬가지로 비용이 약간 듭니다.)
재진입. 이 메서드는 임의의 함수 (예 : 이벤트 핸들러)에 콜 아웃을 수행하여 해당 지점에서 호출하도록 설계되지 않은 객체의 메서드를 궁극적으로 호출합니다. 이것은 스레드 안전보다 까다 롭고 많은 클래스 라이브러리가이 권리를 얻지 못합니다. (나쁜 아직, 클래스 라이브러리이 허용되는 것을 재진입 제대로 문서로 알려져있다.)이 모든 경우에 대한
를, 철저한 문서는 해결책이 주장 할 수있다. 그러나 설명서에서는 관리되지 않는 언어로 메모리를 할당하고 할당을 해제하는 방법을 지정할 수도 있습니다. 경험을 통해 (예 : 메모리 할당과 관련하여) 문서와 언어/런타임 적용의 차이는 밤낮으로 알 수 있습니다.
향후 이러한 문제와 다른 미묘한 문제로부터 우리를 보호하기 위해 언어와 런타임에서 무엇을 기대할 수 있습니까?
커뮤니티 위크가되어야합니다. – Brian