2010-04-03 2 views
6

I가 목표 언어의 세트 중 어느 것을 구성의 특정 구현에 컴파일 될 수 임의로 포맷 데이터 구조의 의미를 설명하기위한 선언적 언어를 존재 여부 궁금. 즉, generic data definition language과 같지만 벡터, 목록, 트리 등 임의의 데이터 구조를 설명하고 해당 구조에 대한 작업의 의미를 설명합니다. 저는이 개념의 실현 가능한 실현을위한 아이디어가 있었기 때문에 물었습니다. 그리고 나는 그것이 가치있는 것인지 궁금해하고 있으며, 결과적으로 전에 이루어 졌는지 궁금합니다.일반 데이터 구조 기술 언어

또 다른, 약간 더 추상적 인 질문 : 규범 적 데이터 구조 (그것이 무엇)의 규격 및 구현 (그것을 수행하는 방법) 사이의 실제 차이가있다? 보다 구체적으로, 동일한 조건의 다른 구조 간주구현을 구분 하는가?

답변

2

는 XSLT와 XML의 조합은 데이터 구조를 설명하고, 원하는 경우 기본적으로 모든 언어로 일치하는 정의를 제공 할 수 있습니다. 공식적으로 증명하려고 시도한 적이 없지만, S- 표현식이 XML의 상위 집합 (modulo syntax difference)이라는 것이 처음의 추측입니다.

적어도 이론적으로는, 그래 거기 (또는 적어도 수 있습니다) 데이터 구조가하는 일에 대한 설명의 차이, 그리고 그것을 어떻게하는지. 분명한 예로는 해시 테이블, 목록 생략, 이진 검색 트리 등을 기반으로 한 구현을 사용할 수있는 키에서 값까지 일반적인 매핑을 설명 할 수 있습니다. 대부분 추상화 수준에서 설명하는 것이 중요합니다. 구현의 차이점을 허용하십시오. 요구 사항 (복잡성, 순서 등)이 너무 많으면 많은 구현을 배제 할 수 있습니다.

+0

XSLT는 실제로 흥미로운 접근 방식입니다. 나는 그것을 들여다 볼 것이다. 동일한 요구 사항에 대해 서로 다른 구현이 가능한지 여부를 묻는 것을 의미하지는 않습니다. 동일한 요구 사항의 두 가지 구현이 서로 다른 데이터 구조로 간주되어야하는지 여부를 묻는 것입니다. 그건 의미가 있습니다. 이 메타 언어가 선언적 일 수 있고 있어야하는 방법. –

2

동적 논리에서 프로그램의 의미를 포착하려고 시도하는 방식이 있습니다. 그러나 동적 논리에 대한 의미는 전제 조건 및 사후 조건의 관점에서 이루어지며 목록의 실제 구현과 관련하여 불가지론 적입니다. 연결리스트와 어레이 사이의 유일한 차이는이 메모리에 뻗어 구체적으로 어떻게

이러한 데이터 구조는 본질적으로, 구현에 묶여있다.

여기에는 일반적인 데이터 정의 언어가 있습니다.이를 지정하는 모든 고급 프로그래밍 언어 (C, C++, java)가 있습니다. 이들 중 어느 것도 다른 것과 같이 컴파일 될 수 있기 때문에 이들 중 하나는 다른 것과 같이 일반적입니다. 당신이 그것을 같은 느낌이 경우

+0

도움 주셔서 감사합니다. 논리적 인 세부 사항이 동일하더라도 언어 구현 세부 사항이 필연적으로 다를 것이기 때문에 모든 고수준 언어가 진정한 제네릭 데이터 정의 언어를 구성한다는 점에서만 동의하지 않습니다. –

+1

연결된 목록과 배열은 다른 작업/인터페이스를 노출합니다. 특히, 배열은 랜덤 액세스 수단을 노출하지만 링크 된 목록은 그렇지 않습니다. –

3

Google 프로토콜 버퍼 및 ASN.1과 같은 메시징 사양/데이터 직렬화 언어에 관심이있을 수 있습니다. 그것은 당신이 찾고있는 것보다 약간 다른 기울이지만, 같은 맥락입니다.

둘 다 통신을위한 일반 메시지를 선언하는 방법입니다. 프로토콜 버퍼 메시지 스펙은 다른 언어로 "컴파일"되지만 중앙 프로토콜은 일관성이 있습니다. ASN.1은 여러 가지 다른 컴파일 유틸리티를 가지고있을뿐 아니라 다양한 프로토콜 구현이 다양한 리터럴 구현과 논리적으로 일관되게 유지됩니다. 예를 들어 XER, PER 대 BER을 살펴보십시오.

논리 메모리 구조에 대해 단순한 압축 바이너리 레이아웃에만 초점을 둔 사양 언어가 좋을 것 같습니다. 일반 C 구조체가 이것을 표현하는 가장 간단한 일반적인 방법 일 수 있습니다. 나는 ASN.1이 그것에 도달 할 수있는 어떤 방법을 원했지만, 조금 쳐다 보았지만 ASN.1 PER은 가깝지만 그렇지는 않다.

편집 : Apache ThriftCapn' Proto도 흥미로울 수 있습니다.