DeepSeek总结DuckPL:为DuckDB引入过程式编程语言
DuckPL为DuckDB引入过程式编程语言原文地址https://blobs.duckdb.org/events/duckdb-developer-meeting-1/duckpl-a-procedural-language-in-duckdb-denis-hirn.pdf在2026年1月30日的DuckDB开发者会议#1上来自蒂宾根大学的Denis Hirn长期DuckDB贡献者介绍了DuckPL——一种为DuckDB打造的原生过程式编程语言旨在填补DuckDB在用户定义函数UDF功能上的关键空白。当前DuckDB UDF的局限性DuckDB目前支持简单的宏MACRO功能CREATEMACROadd(a,b)ASab;但不支持完整的过程式编程CREATEMACRO sequence(n)ASIFn0THENdosomestuffELSEdoother stuffENDIF;现有解决方案如Python、R等外部语言UDF虽然可用但需要外部运行时环境破坏了DuckDB“单文件、零依赖数据库”的核心承诺DuckPL的核心特性DuckPL为DuckDB带来了完整的PL/pgSQL兼容性过程式编程能力简单直观的编程模型CREATEFUNCTIONcollatz(yBIGINT)RETURNSBIGINTAS$$DECLAREstepsBIGINT:0;xBIGINT:y;BEGINWHILEx1LOOPIFx%20THENx :x/2;ELSEx :3*x1;ENDIF;steps :steps1;ENDLOOP;RETURNsteps;END;$$;对比纯SQL实现需要复杂的递归CTEWITHRECURSIVE collatz_cte(x,steps)AS(...)DuckPL让过程式逻辑编写变得直观简单无需掌握高级SQL技巧。技术架构解析双重解析机制DuckPL采用两层解析架构CREATE FUNCTION语句解析扩展DuckDB原有SQL解析器PL/pgSQL函数体解析重用libpg_query库的PL/pgSQL解析器CREATE FUNCTION语句 → libpg_query解析 → AST转换 → DuckPL AST这与DuckDB 2018年构建SQL解析器的方式完全一致保证了技术一致性。统一的内部表示DuckPL ASTDuckPL设计了简洁、语法无关的中间表示IR将所有复杂结构简化为基本构建块FOR/WHILE循环 → LOOP IF BREAK组合CASE语句 → IF语句链游标循环 → 基本循环结构示例转换WHILE counter 10 LOOP counter : counter 1; END LOOP; RETURN counter;转换为DuckPL IRloop { if (counter 10) { break; } let counter counter 1; } emit counter; stop;这种设计带来三大优势简化解释器减少控制流处理复杂度支持多语言前端未来可轻松添加PL/Python、PL/Duck等便于编译优化更容易将DuckPL AST编译为SQL持久化存储DuckPL函数通过专用表duckpl_functions持久化存储CREATETABLEduckpl_functions(function_idBIGINTPRIMARYKEY,function_uuid UUID,function_num_argsINT,function_arg_namesTEXT[],function_arg_typesTEXT[],function_return_typesTEXT[],function_returns_setBOOLEAN,function_nameTEXTNOTNULL,function_srcTEXT,function_bodyBLOB-- 序列化的AST);启动时加载反序列化立即注册到目录中无需重新解析。堆栈驱动的解释器DuckPL采用显式堆栈帧管理而非递归调用状态管理执行可在任意点暂停和恢复无C递归避免栈深度限制和溢出风险完全流式处理结果逐块输出不缓冲全部数据这种设计特别适合流式场景CREATEFUNCTIONinfinite()RETURNSSETOFBIGINTAS$$DECLAREiBIGINT:0;BEGINLOOPi :(i1)%1000;RETURNNEXTi;-- 流式输出ENDLOOP;END$$;对比PostgreSQL会缓冲所有结果导致内存膨胀DuckPL的流式处理能高效配合LIMIT等操作。表达式执行优化通过ExpressionExecutor缓存机制避免每次表达式计算都触发完整SQL管道准备虚拟SELECT语句提取表达式缓存对应的ExpressionExecutor实例针对包含局部变量的DataChunk执行实测带来30倍以上的性能提升。功能支持现状已实现功能标量/表值UDF变量和赋值所有数据类型包括复合类型控制流IF、LOOP、WHILE、FOR、BREAK、CONTINUE、RETURN、RETURN NEXT游标FETCH INTO调试支持RAISE INFO规划中功能聚合/窗口UDF异常处理事务支持COMMIT、ROLLBACKUDF优化器编译为纯SQL利用递归CTE等技术大幅提升性能暂不支持动态SQL可使用query(…)替代高级游标功能SCROLL、MOVE触发器未来愿景与发展路线混合执行架构未来DuckPL将发展为解释与编译混合执行系统PL/SQL输入 → 解析 → AST转换 → 分发器 → [解释器 | SQL编译]交互式编程环境计划提供REPL式CLI体验❯ duckdb D LET y0:: BIGINT;D FOR i IN1..10: LET x(SELECTRANDOM());IF x0.5: LET yy 1;D PRINT y;5技术演进方向现代化语法添加友好型PL语法下一代解析器转向PEG-based PL/pegSQL向量化解释实现向量化执行生产就绪改进错误信息和调试支持总结DuckPL的核心价值兼容性优先为现有PL/pgSQL代码库提供迁移路径Postgres用户几乎无需学习成本与现有工具链立即兼容智能执行引擎基于堆栈的流式解释避免内存膨胀无需外部运行时保持零依赖承诺随数据库一起分发无额外依赖前瞻性设计为自动UDF编译和内联优化奠定基础支持混合执行策略为未来性能飞跃预留空间DuckPL即将开源这将为DuckDB生态系统带来真正的过程式编程能力让用户能在保持DuckDB核心优势的同时享受完整的过程式编程体验。作者Denis Hirn蒂宾根大学GitHubkryonix

相关新闻

【计算机毕业设计案例】基于VUE框架的实时新闻推送平台新闻订阅平台(程序+文档+讲解+定制)

【计算机毕业设计案例】基于VUE框架的实时新闻推送平台新闻订阅平台(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/3 14:44:35 阅读更多 →
PHP毕设项目推荐-基于PHP的动物救助领养网站系统爱心捐赠基于php+vue的动物救助网站的设计与实现【附源码+文档,调试定制服务】

PHP毕设项目推荐-基于PHP的动物救助领养网站系统爱心捐赠基于php+vue的动物救助网站的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/3 2:05:52 阅读更多 →
【ACM模式】栈的操作

【ACM模式】栈的操作

求解代码 public static void main(String[] args)throws IOException{BufferedReader br new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in new StreamTokenizer(br);PrintWriter out new PrintWriter(new OutputStreamWriter(System.out));Deque…

2026/7/3 8:08:26 阅读更多 →

最新新闻

Qt/QML音视频文件原始十六进制查看器

Qt/QML音视频文件原始十六进制查看器

前言 在做音视频工具时,很多问题只看 FFmpeg 解析后的字段并不够。比如: MP4 的 ftyp、moov、mdat 到底在文件哪个位置;WAV/AVI 的 RIFF、fmt 、data 块大小是否正确;某段元数据、魔数或 ASCII 字符串是否真的存在于原始文件里&am…

2026/7/4 4:22:09 阅读更多 →
【安心陪诊 Agent】从 Web Demo 到 HAP 真机:安心陪诊 Agent 的工程落地路线

【安心陪诊 Agent】从 Web Demo 到 HAP 真机:安心陪诊 Agent 的工程落地路线

应用名称:安心陪诊 Agent 统一合集:安心陪诊 Agent|HarmonyOS 高校创新赛 关键词标签:harmonyos / AI Agent / 医疗陪诊从 Web Demo 到 HAP 真机:安心陪诊 Agent 的工程落地路线摘要:规划从当前 Web 原型到…

2026/7/4 4:22:09 阅读更多 →
查询服务器RAID卡-lspci命令

查询服务器RAID卡-lspci命令

说明 老服务器使用sas卡,需要lspci 工具查询 安装工具 yum install -y pciutils查询RAID卡型号 lspci | grep -i "raid\|sas"03:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS 2208 [Thunderbolt] (rev 05)

2026/7/4 4:20:09 阅读更多 →
AI 工具开发实战(2):开发一个本地 RAG 知识库——丢一个文件夹进去,直接问答

AI 工具开发实战(2):开发一个本地 RAG 知识库——丢一个文件夹进去,直接问答

AI 工具开发实战(2):开发一个本地 RAG 知识库——丢一个文件夹进去,直接问答 上一篇做了一个命令行翻译工具,这篇做一个更实用的:本地 RAG 知识库。 把 PDF、Markdown、TXT 文件丢到一个文件夹里&#xf…

2026/7/4 4:18:08 阅读更多 →
基于CNN卷积神经网络手写汉字识别系统 (GUI界面)【源码38期】

基于CNN卷积神经网络手写汉字识别系统 (GUI界面)【源码38期】

一、项目简介本系统基于MATLAB深度学习工具箱,设计并实现了一个基于卷积神经网络(CNN)的手写汉字识别系统。系统包含三大核心模块:网络结构定义模块(get_self_net.m)封装了CNN网络构建函数,采用…

2026/7/4 4:16:08 阅读更多 →
YLB3118@ACP#国产8口SATA3.0存储芯片|物理AI长时序海量数据存储国产替代旗舰(对标ASM1166)

YLB3118@ACP#国产8口SATA3.0存储芯片|物理AI长时序海量数据存储国产替代旗舰(对标ASM1166)

一、前言:物理AI时代,存储已经成为算力落地的真正瓶颈2026年物理AI全面商用落地,智源悟道4.0物理世界模型、英伟达Vera Rubin仿真算力平台、特斯拉Optimus人形机器人,彻底改写了AI数据的生产逻辑。传统生成式AI以文本、短帧图像、…

2026/7/4 4:06:03 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻