1

이것은 순진한 질문이지만, 지금까지 본 튜토리얼에서는 명확하게 철자를 쓰지 않았습니다.가비지 수집기가있는 언어로 통역사를 빌드합니다. 통역사 가비지 수집기가 필요합니까?

(C, C++ 등이 아닌) 상위 수준의 언어로 통역사를 만들고 가비지 컬렉터가있는 경우 ... 인터프리터 자체도 만들 필요가 있습니까?

답변이 '예'인 경우 ... 동일한 종류의 호스트 여야합니까? (예 : 호스트가 마크 스윕 (mark-sweep), 인터프리터 인 경우), 또는 호스트를 활용하여이 모든 것을 관리하도록 할 수 있습니까?

호스트의 선택에 차이가 있습니까? F #/.NET을 사용할 계획이지만 자바와 다른 것들은 똑같은가요?

답변

3

해석 언어의 메모리 관리는 호스트의 메모리 관리에 백을 피기 수 있지만이 아닌 장난감 인터프리터를 구현하는 경우에 호스트에서 관리 참조에 대한 weak pointers을 사용해야 할 수 있습니다 해석 된 세계에 남아있는 참조가없는 경우 가비지 수집되어야하는 해석 된 세계의 값.

장난감 인터프리터를 구현하는 경우 호스트 세계에서 해석 된 세계에 대한 관리 참조에 강력한 포인터를 사용하는 사람은 누구도 알지 못할 수 있습니다. 이 경우, 약점 포인터는 기능으로 충분하게 고급 메모리 관리 언어에서 사용할 수 있지만 세부 사항은 다르며 사용법은 항상 까다 롭습니다. Bruno Haible's survey은 모든 종류의 사진을 제공합니다. 설문 조사에서이 약한 포인터의 사용은 "전역 가비지 수집 : 가비지 콜렉션이 프로세스 경계에서 또는 Lisp - C/C++/Java 외부 인터페이스 경계에서 작동하도록 허용합니다"를 제외하고는 외부 인터페이스 경계가 호스트 사이에 있음을 제외하고는 언어 및 해석 된 언어.

+0

이 영역에서 장난감이 아닌 "장난감"을 분리하는 것은 무엇입니까? 약점이되기 위해 필요한 것이 무엇인지를 어떻게 알 수 있습니까? – mamcx

+0

@mamcx 1) 장난감이 아닌 통역사는 아무도 메모리 누수를 알아 차리기 위해 충분히 오래 사용하지 않을 것입니다. 약한 포인터가 적절한 곳에서 강력한 포인터를 사용하는 유일한 결과는 메모리 누수입니다. 2) 인터프리터를 구현할 때 강력한 포인터로 구현하면 메모리 누수가 발생하는 모든 것은 약한 포인터가되어야합니다. (실제로 인터프리터 언어의 특성에 따라 달라집니다.) 전혀 약 포인터 없음). –

+0

자, 약한 포인터를 추가 할 수있는 "특성"은 무엇입니까? 모든 샘플 또는 참조? 가능한 한 합병증을 피하기위한 나의 의도입니다. – mamcx

1

일반적으로, 하지만 예외가있을 수 있습니다. 해석 된 언어의 메모리 의미가 해석기를 코딩하는 언어의 메모리 의미와 다르므로

예를 들어 일부 언어는 쓰레기 수집 스레드 또는 작업입니다. 인터프리터를 Java로 작성하면 인터프리터에서 직접 GC 작업을 수행해야합니다.

약한 해시 테이블이 필요할 수 있습니다.

+0

알고 있어야 할 "메모리 의미"는 무엇입니까? 내가 말했듯이, 호스트는 F #/.NET이고 해석기는 F #에 가깝습니다 (반 기능, 기본적으로 변경 불가능, 변경 가능성은 ok, 필수, 관계형). 나는 스칼라, 사물의 배열,리스트, 테이블 (관계 적 의미에서)과 데이터베이스/파일/등의 interop을 가질 것이다. 발전기/코 루틴이나 배우/CSP를 갖고 싶습니다. – mamcx

관련 문제