主要观点:
- 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 优缺点的详细分析,包括无验证和错误消息、视觉噪声、特殊符号处理等问题,以及与其他语言的比较。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。