Skip to main content
QUICK REVIEW

[论文解读] Portability of Prolog programs: theory and case-studies

Jan Wielemaker, Vı́tor Santos Costa|arXiv (Cornell University)|Sep 20, 2010
Software Testing and Debugging Techniques参考文献 10被引用 3
一句话总结

本文提出了一套实用框架,用于在主要的ISO兼容Prolog系统——SWI-Prolog、YAP、SICStus和Ciao之间实现Prolog程序的高可移植性,采用条件编译和抽象层技术。其主要贡献在于证明了真实世界的应用程序(如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程序长期存在的可移植性问题。
  • 减少厂商锁定,提升主要Prolog实现之间的互操作性,特别是源自爱丁堡/Quintus派系的系统。
  • 通过真实世界应用的案例研究,证明高可移植性不仅在理论上可行,而且在实践中也可实现。
  • 识别并解决核心功能中的关键不兼容问题,如项序列化、多线程、Unicode和外部语言接口。
  • 提出一个可持续的框架,通过与系统厂商合作以及标准化常用谓词和标志,持续改进可移植性。

提出的方法

  • 使用Prolog的if/1指令进行条件编译,根据目标Prolog系统选择性地包含代码,实现在单一源码库中支持平台特定的实现。
  • 利用Prolog的反射能力(如动态谓词操作)替代外部配置工具(如GNU autoconf),实现在运行时对系统功能的自诊断。
  • 为非可移植功能(如GUI接口、文件I/O、项序列化)实现可移植的抽象,必要时通过仿真或重实现。
  • 为关键系统功能(如文件名解析、消息传递、Prolog标志)开发共享接口层,将应用逻辑与实现细节解耦。
  • 对核心系统(如SWI-Prolog)进行最小修改,使其行为与其他系统对齐,特别是write_term/3输出格式和UTF-8支持等特性。
  • 将该框架应用于真实世界应用(如Alpino),仅在19,000多行代码中修改59个条件编译点,即可同时支持SWI-Prolog和SICStus Prolog。

实验结果

研究问题

  • RQ1在不进行大规模重构的前提下,Prolog程序在主要ISO兼容Prolog系统之间可移植性的程度如何?
  • RQ2使用Prolog的if/1指令进行条件编译,在管理库和系统接口的系统差异方面有多高效?
  • RQ3Prolog中可移植性的主要技术障碍是什么?如何系统性地解决这些问题?
  • RQ4像Alpino这样真实且复杂的应用,能否仅通过极少修改和完整的功能等价性实现在Prolog系统间的移植?
  • RQ5厂商协作和标准化在提升跨实现兼容性方面发挥什么作用?

主要发现

  • 该框架使复杂的真实世界Prolog应用(如Alpino)在SWI-Prolog和SICStus Prolog之间实现了完全可移植,整个代码库仅需59个条件编译指令。
  • Alpino应用成功移植到两个系统,其C代码未作任何修改,Prolog代码仅作极少改动,完全依赖条件编译和抽象层实现。
  • SWI-Prolog被增强以支持UTF-8和write_term/3的正确项格式化输出,其输出与SICStus对齐,解决了关键不兼容问题。
  • tcl/tk接口被成功重实现为可移植库,替代了Ciao接口的17个文件仿真,降低了复杂性并提升了可维护性。
  • SWI-Prolog的消息队列性能在将实现从pthread-win32重写为原生Windows API后显著提升,消除了100倍的性能惩罚。
  • 作者得出结论:目前四种主要Prolog系统之间的可移植性已可与1990年代Unix平台上的C语言相媲美,表明跨平台开发已具备成熟且稳定的基础。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。