Skip to main content
QUICK REVIEW

[논문 리뷰] Portability of Prolog programs: theory and case-studies

Jan Wielemaker, Vı́tor Santos Costa|arXiv (Cornell University)|2010. 09. 20.
Software Testing and Debugging Techniques참고 문헌 10인용 수 3
한 줄 요약

이 논문은 조건부 컴파일과 추상화 레이어를 사용하여 주요 ISO 준수 프로로그 시스템—SWI-Prolog, YAP, SICStus, Ciao—간에 프로로그 프로그램의 높은 이식성을 달성하는 실용적인 프레임워크를 제시한다. 주요 기여는 실제 응용 프로그램인 Alpino 자연어 처리기와 같이 최소한의 조건부 코드로도 전체 이식성이 가능하다는 것을 보여주는 것이다. 이는 주요 재작성 없이도 크로스플랫폼 호환성을 달성할 수 있음을 의미한다.

ABSTRACT

(Non-)portability of Prolog programs is widely considered as an important factor in the lack of acceptance of the language. Since 1995, the core of the language is covered by the ISO standard 13211-1. Since 2007, YAP and SWI-Prolog have established a basic compatibility framework. This article describes and evaluates this framework. The aim of the framework is running the same code on both systems rather than migrating an application. We show that today, the portability within the family of Edinburgh/Quintus derived Prolog implementations is good enough to allow for maintaining portable real-world applications.

연구 동기 및 목표

  • 구문, 라이브러리, 시스템 인터페이스의 다이얼렉트 특화 차이로 인한 오랫동안 지속된 프로로그 프로그램의 비이식성 문제를 해결한다.
  • 주로 에드인버러/쿼인타스 라인에서 유래한 주요 프로로그 구현 간의 상호운용성을 향상시키고, 벤더 종속성 문제를 줄인다.
  • 실제 사례 연구를 통해 이론적 수준을 넘어서 실질적으로도 고도의 이식성이 가능하다는 것을 입증한다.
  • 용어 직렬화, 스레딩, 유니코드, 외부 언어 인터페이스와 같은 핵심 기능에서의 주요 불일치를 식별하고 해결한다.
  • 시스템 공급업체와의 협업과 일반적으로 사용되는 술어 및 플래그의 표준화를 통해 지속 가능한 이식성 향상 프레임워크를 제안한다.

제안 방법

  • 목표 프로로그 시스템에 따라 코드를 조건부로 포함할 수 있도록 Prolog의 if/1 지시문을 사용한 조건부 컴파일을 통해 단일 소스 기반 내에서 플랫폼별 구현을 가능하게 한다.
  • 동적 술어 조작과 같은 Prolog의 반사적 기능을 활용하여 GNU autoconf와 같은 외부 설정 도구를 대체하고, 런타임에 시스템 기능을 자가 진단할 수 있도록 한다.
  • GUI 인터페이스(tcl/tk), 파일 I/O, 용어 직렬화와 같은 비이식성 기능에 대해 추상화를 구현하며, 필요에 따라 모의 구현 또는 재구현을 통해 이식성을 확보한다.
  • 핵심 시스템 기능(예: 파일 이름 해석, 메시지 전달, 프로로그 플래그)을 위한 공통 인터페이스 레이어를 개발하여 응용 프로그램 로직을 구현 세부 사항에서 분리한다.
  • 특히 write_term/3 출력 형식과 UTF-8 지원과 같은 기능에서 다른 시스템과의 일치를 위해 핵심 시스템(SWI-Prolog 등)에 최소한의 변경을 가하여 행동을 일치시킨다.
  • 실제 응용 프로그램인 Alpino에 이 프레임워크를 적용하여 19,000줄 이상의 코드 내에서 단 59개의 조건부 컴파일 지점만 수정하여 SWI-Prolog와 SICStus Prolog 모두에서 지원하도록 구현했다.

실험 결과

연구 질문

  • RQ1주요 ISO 준수 프로로그 시스템 간에 주요 재작성 없이 프로로그 프로그램을 얼마나 이식할 수 있는가?
  • RQ2Prolog의 if/1 지시문을 사용한 조건부 컴파일이 라이브러리와 시스템 인터페이스의 플랫폼별 차이를 관리하는 데 얼마나 효과적인가?
  • RQ3프로로그의 이식성에 있어 주요 기술적 장벽은 무엇이며, 이를 체계적으로 어떻게 해결할 수 있는가?
  • RQ4Alpino와 같은 실세계의 복잡한 응용 프로그램이 최소한의 변경과 완전한 功能 등가성으로 여러 프로로그 시스템 간에 이식 가능한가?
  • RQ5벤더 협업과 표준화가 구현 간 호환성 향상에 어떤 역할을 하는가?

주요 결과

  • 이 프레임워크는 Alpino와 같은 복잡한 실세계 프로로그 응용 프로그램을 SWI-Prolog와 SICStus Prolog 간에 완전히 이식 가능하게 하였으며, 코드베이스 전반에 걸쳐 단 59개의 조건부 컴파일 지시어만 사용하였다.
  • Alpino 응용 프로그램은 C 코드에 변화 없이 프로로그 코드의 최소한의 변경만으로도 두 시스템 모두에서 성공적으로 이식되었으며, 주로 조건부 컴파일과 추상화 레이어에 의존하였다.
  • SWI-Prolog는 UTF-8 지원과 write_term/3의 정확한 출력 형식을 향상시켜 SICStus와의 출력 일치를 확보함으로써 중요한 불일치를 해결하였다.
  • tcl/tk 인터페이스는 Ciao의 인터페이스를 모의하는 17개 파일의 구현을 대체하여 이식 가능한 라이브러리로 재구현되었으며, 이로 인해 복잡성이 감소하고 유지보수가 향상되었다.
  • SWI-Prolog의 메시지 큐 성능은 pthread-win32에서 네이티브 윈도우 API로 재작성함으로써 크게 향상되었으며, 이로 인해 100배의 성능 저하 문제가 제거되었다.
  • 저자들은 네 가지 주요 프로로그 시스템 간의 이식성이 이제 1990년대 유닉스에서의 C 프로그래밍 수준과 유사하게 성숙되고 안정적인 기반을 확보했다고 결론 내렸다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.