开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 568|回复: 17
打印 上一主题 下一主题
收起左侧

[支持库源码] [clipper2图形计算库]不可用的支持库-交流学习

[复制链接]
结帖率:86% (44/51)
跳转到指定楼层
楼主
发表于 2025-3-31 07:47:46 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   湖南省长沙市
分享源码
界面截图:
是否带模块: -
备注说明: -
本帖最后由 〞剑舞长空 于 2025-3-31 07:49 编辑

又闲的没事干了,跑过来干了一通支持库。

流程:

  • 使用 clang 对头文件进行解析,生成的AST语法树导出到JSON。
  • 由大语言模型对数据解析,可以是已经开源的支持库。
  • 根据JSON生成基本可用的模板
  • 接口的实现我是也丢给了模型
  • 接口繁多的情况大家各有见解,自己填充实现或者AI写核心接口 其他复制粘贴也不是不可以是吧~




可查看学习一番。明确一点这个库不可用 ,因为我测试过了(也有可能是我没用对),虽然不会崩溃

其中有部分问题,
接口的实现在易语言中体现不太合适:
比如 AddPath 方法,应该是A.AddPath (XXX),这样子来看是 A.AddPath (A,XXX) ,逻辑上不合群。
当然可以修改 我懒得弄了

这个库花了我应该大半天的时间
其实不需要这么久,万事开头难!
开头的事情整了大半天,至于代码模板的生成飞速就生成了。
写的过程感觉还可以换个思路。
由JSON先生成模板,实现的函数另外抽离丢给AI
一件事情还是要分开干好点
就这样,skr~

上附件
Dll1.zip (2.47 MB, 下载次数: 3, 售价: 2 枚 精币)


接下来AI正文,我是懒得写了。源码工程丢附件了



    调用格式: 〈无返回值〉 对象.AddPath (Paths64 对象,Path64 路径) - Clipper2图形计算库->Paths64
    英文名称:Paths64.添加路径
    向 Paths64 对象尾部添加一个 Path64 路径。本命令为初级对象成员命令。
    参数<1>的名称为“对象”,类型为“Paths64(路径组64)”。Paths64 对象。
    参数<2>的名称为“路径”,类型为“Path64(路径64)”。要添加的 Path64 路径。

    操作系统需求: Windows





好的,这是一份论坛帖子的草稿,阐述了您提到的核心要义:使用 Clang 解析头文件导出 AST,再由 AI 解析 AST 生成易语言支持库模板的过程,并着重指出了这种自动化方式在接口交互层面可能存在的问题和代码缺陷。


帖子标题: 探讨:利用 Clang AST 和 AI 自动生成易语言支持库模板的可能性与挑战

帖子正文:

大家好!

最近在进行 C++ 库到易语言支持库的封装工作时,尝试了一个比较新颖的思路:利用 Clang 解析 C++ 头文件生成抽象语法树 (AST),然后借助 AI (例如大型语言模型) 来解析这个 AST,最终自动生成易语言支持库的 C++/FNE 模板代码。

基本流程大致如下:

  1. Clang 解析: 使用 Clang 的能力 (例如通过 LibClang 或相关工具) 解析目标 C++ 库的头文件。
  2. AST 导出: 将解析得到的 AST 信息导出为一种结构化的格式,比如 JSON。这包含了类、函数、方法、枚举、参数、返回类型等详细信息。
  3. AI 解析与生成: 将导出的 AST JSON 提供给 AI 模型,并指示它根据易语言支持库的结构规范 (如 lib2.h 中定义的 LIB_INFO, CMD_INFO, ARG_INFO, LIB_DATA_TYPE_INFO 等) 生成 C++ 模板代码或 .fne 文件内容。

初步成果与可行性:

从实验结果来看 (以封装 Clipper2 图形库为例),这个流程在生成基础结构方面是可行的

  • 数据类型定义 (LIB_DATA_TYPE_INFO, .数据类型): AI 能够识别 C++ 类并生成对应的数据类型定义框架。
  • 常量定义 (LIB_CONST_INFO, .常量): 可以较好地从 C++ enum 映射生成易语言常量。
  • 命令/方法名称与基本信息 (CMD_INFO, .命令): 能够从 C++ 函数/方法签名中提取名称、参数列表、返回类型,并生成基本的命令定义条目。
  • 参数信息 (ARG_INFO, .参数): 可以生成参数的基本定义框架。

AI 确实能快速生成大量的模板代码,省去了手动创建这些结构体和数组的繁琐工作,提供了一个不错的起点

核心问题与挑战:接口交互层面的“不适”与代码缺陷

然而,在实际应用中,我们发现仅仅依赖 AST 和 AI 自动生成的模板,尤其是在接口交互层面,存在很多问题,生成的代码往往并不合适直接使用,甚至是有问题的:

  1. C++/易语言范式差异: AI 通常难以理解两种语言间的设计哲学差异。

    • 对象生命周期: C++ 的 RAII (构造/析构) 与易语言显式的创建/销毁命令 (CT_IS_OBJ_CONSTURCT_CMD, CT_IS_OBJ_FREE_CMD) 映射可能不完美。AI 生成的构造/析构命令逻辑可能需要调整。
    • 所有权与内存管理: C++ 中复杂的指针、引用、智能指针语义,如何映射到易语言的变量、参考、对象指针,并确保正确的内存管理(何时 new, 何时 delete, 何时返回副本,何时返回裸指针),AI 很难完美处理。例如,我们遇到了 PolyPath 返回裸指针带来的生命周期风险问题。
    • 返回值: C++ 函数返回复杂对象 (如 std::vector 包装的 Paths64) 时,易语言通常需要返回一个新建的对象副本,AI 生成的代码可能直接返回指针或处理不当。
  2. 类型映射的局限:

    • 简单类型 (int, double, bool) 映射良好。
    • 复杂类型 (如 std::vector<Point64>) 应该映射为易语言的不透明对象类型 (ETYPE_Path64),但 AI 可能尝试直接映射或映射错误。
    • 模板、回调函数、复杂的函数指针等 C++ 特性,几乎无法直接、安全地自动映射到易语言。
  3. 参数传递方式:

    • C++ 的 const&, *, & 如何精确对应易语言的值传递、对象传递、参考传递 (AS_RECEIVE_VAR, AS_RECEIVE_VAR_ARRAY 等标志),AI 的判断不一定准确,需要人工核对。特别是输出参数的处理。
  4. 接口设计的“易用性”:

    • AI 生成的命令通常是 C++ API 的直接翻译,可能冗长、不符合易语言用户的习惯。例如,C++ 的重载函数需要 AI 设计一套易语言的命名规则来区分,但这套规则未必是最佳的。
    • 可能缺少必要的辅助函数或面向易语言用户的更高层封装。
  5. 错误处理: C++ 的异常 (throw) 如何桥接到易语言的错误处理机制 (例如,返回错误代码、提供 取错误文本 命令),自动生成的代码通常会忽略这一点。

结论:

利用 Clang AST 和 AI 自动生成易语言支持库模板,在减少初期结构性代码编写量方面有一定潜力,可以快速搭建起库的框架。

但是,绝对不能盲目信任生成的接口和代码逻辑。由于 C++ 和易语言在设计范式、内存管理、类型系统、错误处理等方面存在显著差异,AI 目前难以完全理解并生成完全适配、健壮、易用的易语言接口。

生成的模板仅仅是一个起点必须经过开发者仔细的人工审查、修改和完善,特别是针对接口设计、内存管理、错误处理和参数传递方式等方面。对于复杂的库,人工调整的工作量依然巨大。

大家对这种自动化方式有什么看法?有没有类似的尝试或者更好的思路?欢迎一起交流讨论!


评分

参与人数 1好评 +1 收起 理由
910265444 + 1 YYDS~!

查看全部评分


结帖率:70% (7/10)

签到天数: 8 天

18
发表于 2025-4-10 17:49:36 | 只看该作者   福建省泉州市
学习学习
回复 支持 反对

使用道具 举报

签到天数: 8 天

17
发表于 2025-4-3 09:38:25 | 只看该作者   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:97% (109/112)

签到天数: 10 天

16
发表于 2025-4-3 07:11:52 | 只看该作者   山东省青岛市
感谢楼主分享!
回复 支持 反对

使用道具 举报

结帖率:96% (53/55)

签到天数: 10 天

15
发表于 2025-4-3 07:07:34 | 只看该作者   山东省青岛市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:97% (109/112)

签到天数: 10 天

14
发表于 2025-4-2 07:17:35 | 只看该作者   山东省青岛市
全都是大佬~
回复 支持 反对

使用道具 举报

结帖率:96% (53/55)

签到天数: 10 天

13
发表于 2025-4-2 07:13:20 | 只看该作者   山东省青岛市
已经顶贴,感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

12
发表于 2025-4-1 20:30:18 | 只看该作者   河北省沧州市
厉害6666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 8 天

11
发表于 2025-4-1 09:36:06 | 只看该作者   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 10 天

10
发表于 2025-4-1 08:00:27 | 只看该作者   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表