GitHub - needleful/c_plus_prolog: C 加 Prolog

主要观点

  • Prolog 是唯一好的编程语言,作者网站用 Prolog 编写,但 C 是唯一有用的编程语言,科学家 50 年未找到解决办法,作者提出将 Prolog 和 C 结合成“C Plus Prolog”。
  • “C Plus Prolog”可将 Prolog 代码转换为有效 C 代码,如用非标准 SWI-Prolog 特性处理花括号等,有独特语法规则,如符号处理、运算符优先级等。
  • 引入“*=>”运算符,编译器会收集用其定义的项并进行替换,还可定义“println”宏在编译时处理printf语句添加换行。
  • 实现了类似 C++模板的“poor man's generics”,通过模板和断言宏来处理类型相关操作,但存在一些限制,如无类型信息用于方法语法等。
  • 介绍了多个 C Plus Prolog 的示例,如重载struct关键字、根据文件后缀编译不同代码等。
  • 阐述了 C Plus Prolog 的安装和使用方法,以及对其存在意义的思考,认为它是对系统编程语言中宏的半严肃探索,虽有优势但也存在诸多问题,有更好的替代方案。

关键信息

  • 网站地址https://needleful.net/,代码仓库https://github.com/needleful/nng
  • SWI-Prolog 相关非标准特性及使用,如处理花括号。
  • “*=>”运算符的作用及示例代码转换。
  • “poor man's generics”的模板定义及实例化。
  • 安装需 C 编译器、SWI-Prolog 和特定仓库,使用命令swipl -s cpp.pl -- <input file> <output file>,文件扩展名.c+p

重要细节

  • 符号处理规则,如大写字母或下划线开头的符号需用单引号包裹。
  • 字符字面量的表示方式,如char var c = #c;等。
  • 不同类型声明在 C+P 中的转换,如char:ptr:array var argv转换为char *(argv[])
  • assertz及其内部处理逻辑,如处理模板类型等。
  • 各示例代码的具体功能和实现细节,如重载struct、不同文件后缀编译等。
  • 对 C Plus Prolog 优缺点的详细分析,包括无验证和错误消息、视觉噪声、特殊符号处理等问题,以及与其他语言的比较。
阅读 7
0 条评论