2

향후 관리되는 런타임은 미묘한 데이터 손상 문제에 대한 추가 보호 기능을 제공합니까?관리되는 언어 및 런타임의 향후 보호

Java 및 .NET CLR과 같은 관리 런타임은 C#과 같은 기본 언어에서 많은 메모리 손상 버그가 발생할 가능성을 줄이거 나 없애줍니다. 그럼에도 불구하고, 그들은 놀랍게도 모든 메모리 손상 문제로부터 면역되지 않습니다. 하나는 직관적으로 그 입력을 검증하고, 버그가없고, 예외를 강력하게 처리하는 메소드가 객체를 하나의 유효한 상태에서 다른 상태로 변환한다는 것을 직관적으로 기대하지만, 그렇지 않습니다. (프로그래밍 규칙을 일반적인 사용 사실이 아니다라고하는 것이 더 정확하다 - 객체 구현 내가 설명하는 문제를 방지하기 위해 자신의 길에서 이동해야합니다.)

는 다음과 같은 시나리오를 생각해

  1. 스레딩. 호출자는 객체를 다른 스레드와 공유하고 스레드를 동시에 호출 할 수 있습니다. 개체가 잠금을 구현하지 않으면 필드가 손상되었을 수 있습니다. (아마도 - 객체가 스레드로부터 안전하다는 것을 통보받지 못하면 - 런타임은 다른 스레드에서 동시에 실행되는 같은 객체에있는 메소드가 있으면 예외를 던지기 위해 모든 메소드 호출에서 인터록을 사용해야합니다. 이것은 보호 기능이 될 것입니다. 관리되는 런타임의 다른 안전 기능과 마찬가지로 비용이 약간 듭니다.)

  2. 재진입. 이 메서드는 임의의 함수 (예 : 이벤트 핸들러)에 콜 아웃을 수행하여 해당 지점에서 호출하도록 설계되지 않은 객체의 메서드를 궁극적으로 호출합니다. 이것은 스레드 안전보다 까다 롭고 많은 클래스 라이브러리가이 권리를 얻지 못합니다. (나쁜 아직, 클래스 라이브러리이 허용되는 것을 재진입 제대로 문서로 알려져있다.)이 모든 경우에 대한

를, 철저한 문서는 해결책이 주장 할 수있다. 그러나 설명서에서는 관리되지 않는 언어로 메모리를 할당하고 할당을 해제하는 방법을 지정할 수도 있습니다. 경험을 통해 (예 : 메모리 할당과 관련하여) 문서와 언어/런타임 적용의 차이는 밤낮으로 알 수 있습니다.

향후 이러한 문제와 다른 미묘한 문제로부터 우리를 보호하기 위해 언어와 런타임에서 무엇을 기대할 수 있습니까?

+1

커뮤니티 위크가되어야합니다. – Brian

답변

2

저는 언어와 런타임이 앞으로도 계속 발전 할 것이며, 개발자의 문제를 추상화하고, 우리의 삶을보다 쉽고 생산적으로 유지할 것이라고 생각합니다.

예를 들어 보겠습니다. .NET 세계에서 우리가 매일 사용하는 스레딩 모델을 단순화하는 몇 가지 훌륭한 새로운 기능이 있습니다. 예를 들어 STM.NET은 결국 공유 상태를 훨씬 더 안전하게 처리 할 수 ​​있습니다. .NET 4의 parallel extensions은 현재 기술에 비해 스레딩에 매우 편리합니다.

+0

이러한 개발은 좋겠지 만, 개체가 옵트 아웃하지 않고 런타임에 이러한 문제를 처리하고 있다고 선언하지 않는 한 모든 개체에 대한 전역 보호 기능을 제공하는 솔루션을 고려하고 싶습니다. 개인적인. –

+0

이러한 개발로 결국 적은 오버 헤드가 요구되는 간단한 사용 패턴이 될 수 있습니다. 나는 단지 존재하는 것에 초점을 맞추고 있습니다. 바로 지금, 연구 프로젝트로서 어떤 형태로든 다른 것입니다. 당신은 거기에서 시작해야만합니다 ... –

0

앞으로 무엇을 기대할 수 있습니까?

없음. 스레드 상태와 재진입은 도구/런타임 문제를 해결하는 데 문제가되지 않습니다. 대신 미래에는 사람들이 이러한 문제를 우회하기 위해 가변 상태로 프로그래밍하는 것을 피하는 스타일로 이동할 것이라고 생각합니다. 언어와 라이브러리는 이러한 프로그래밍 스타일을보다 매력적으로 만들 수 있지만 도구는 해결책이 아닙니다. 코드를 작성하는 방식을 변경하는 것이 솔루션입니다.

+0

어떤 사람들은 GC 메모리 관리가 오늘날처럼 성공적 일 것이라고 생각하지 않았을 것입니다 ... 나는 많은 평행선이 있다고 생각합니다. –

1

트랜잭션 메모리는 이러한 문제를 해결하는 데 유망하다고 생각합니다.

http://en.wikipedia.org/wiki/Software_transactional_memory

어쩌면 그래서 전이 년 주제에 소프트웨어 공학 라디오의 에피소드 않았거나이 어떤 방식으로 질문에 대한 대답하지만, 이것은 어떤 경우에 흥미로운 주제입니다 있는지 확실하지 않습니다.

1

우선 "관리되는"것은 다소 잘못된 이름입니다. OCaml, Haskell 및 SML과 같은 언어는 완전히 컴파일되는 동안 그러한 보호 및 안전을 달성합니다. 모든 관련 "관리"는 정적 분석을 통해 컴파일 시간에 발생하므로 최적화와 속도를 향상시킵니다.

어쨌든, 귀하의 질문에 답변 : Erlang과 Haskell과 같은 언어를 살펴보면 기본적으로 상태가 분리되어 불변입니다. 시스템의 종류에 따라 스레딩과 재진입은 기본적으로 안전하며 이러한 규칙을 위반하기 위해 벗어나야하기 때문에 안전하지 않은 코드가 발생할 수있는 곳을 분명히 알 수 있습니다.

안전한 기본값으로 시작하지만 고급 안전하지 않은 사용을위한 공간을 남겨두면 두 가지 장점을 모두 누릴 수 있습니다. 귀하의 정의에 따라 안전 할 수있는 미래의 시스템이 이러한 관행의 일부를 따라갈 수도 있습니다.