Wing vs Pulumi:同一款云应用,7 行 Wing 对比 98 行 Pulumi 的完整差异解析
编程语言编译器云原生语言运行时【免费下载链接】wingA programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡项目地址https://gitcode.com/gh_mirrors/wi/wing点击查看免费下载本文基于 Wing 官方 FAQ 中的《Pulumi vs. Wing》对比文档展开围绕一个具体场景——用云函数把文本文件上传到 Bucket——逐行对比 Wing 与 Pulumi 两种技术路线的代码量、IAM/网络等云机制的处理方式并结合 Wing 仓库中的 SDK 源码解释 Wing 是如何从意图自动生成基础设施的。读完本文你能清晰判断两者的适用边界何时用 Pulumi 手动掌控基础设施何时用 Wing 让编译器替你做这些事。核心定位差异语言 vs 工具首先要明确两者不是同类产品Wing是一门通用编程语言目标是开发完整的云应用——基础设施和应用代码都写在这门语言里由编译器统一编译Pulumi是一个 Infrastructure as CodeIAC工具只负责应用中的基础设施部分。基础设施与应用代码之间还需要你自己设计一套拼接方式例如通过环境变量、命名约定把资源引用传给应用代码。这一点也体现在两者的扩展模型上Pulumi 用 custom provider / dynamic provider 扩展Wing 则用自定义资源custom resources扩展且基础设施与应用代码共享同一类型系统。四大主要差异对比文档归纳的四条核心差异如下云可移植性cloud-portable。Wing 代码一次编写、可编译到不同云平台Pulumi 虽然支持多家云但每一家云都需要编写各自的具体代码AWS 用pulumi/awsGCP 用pulumi/gcp……。基础设施从意图自动生成。因为 Wing 编译器同时看得见基础设施代码和应用代码inflight 闭包它能自动推导并生成大量在 Pulumi 里必须手工定义的内容典型如IAM 策略和网络拓扑。未来可编译到 JavaScript 和 Pulumi。对比文档明确指出这是路线图roadmap上的能力届时可以通过 Wing 的 compiler plugins 直接定制生成的 Pulumi 输出。本地模拟与可视化。Wing 内置本地仿真器simulator支持即时热重载无需上云即可开发调试使用 Pulumi 时通常必须部署到云上才能与应用交互耗时数分钟。Wing 的本地仿真能力在文档 docs/docs/02-concepts/05-simulator.md 中有完整介绍本地开发流程见 docs/docs/01-start-here/04-run-locally.md。代码示例同一个应用两种写法对比文档选取的示例应用很简单一个云函数Function把文本文件上传到桶Bucket。文档原文通过仓库中的 CodeComparison 组件 自动加载两侧代码示例源码实际存放在 docs/docs/src/examples/function-upload-to-bucket/ 目录下可直接查看原始文件。Wing 侧7 行代码hello.w 全文如下bring cloud; let bucket new cloud.Bucket(); new cloud.Function(inflight () { bucket.put(hello.txt, world!); });注意第 5~7 行bucket被捕获进inflight闭包后bucket.put(...)这行应用代码就是意图本身——Wing 编译器看到函数需要向 Bucket 写对象会自动为该函数生成所需的 IAM 权限、代码打包与部署配置开发者完全不接触角色、策略文档这类细节。Pulumi 侧3 个文件、约 98 行Pulumi 版本需要3 个文件协作1. main.ts63 行——基础设施定义。这里可以看到与 Wing 自动生成形成鲜明对照的手工部分手写 IAM 角色的信任策略sts:AssumeRole给lambda.amazonaws.com对应aws.iam.Role手写角色策略aws.iam.RolePolicy手工声明 CloudWatch Logs 的三条权限logs:CreateLogGroup/logs:CreateLogStream/logs:PutLogEvents和指向${bucket.arn}/*的s3:PutObject手工创建aws.lambda.Function并用环境变量BUCKET_NAME把资源引用接线到应用代码。其中s3:PutObject这条策略正是 Wing 侧由bucket.put()一行代码隐式推导出来的等价物。2. index.js28 行——Lambda 运行时代码通过aws-sdk的S3.putObject完成上传并从process.env.BUCKET_NAME读取桶名。3. pulumi.yaml8 行——栈配置声明aws:region默认us-west-2。name: s3-lambda-pulumi runtime: nodejs description: A simple example that uploads a file to an S3 bucket using a Lambda function template: config: aws:region: description: The AWS region to deploy into default: us-west-2差异对照表文档原文完整保留特性WingPulumi语言WingYAML 自选语言代码行数798云机制IAM、网络从意图自动生成手工定义可扩展性自定义资源Custom resourcesCustom/dynamic providers定制底层细节通过 compiler plugins 定制生成的 Terraform直接访问云厂商 API本地仿真内置功能完备的本地仿真器支持即时热重载无跨云支持同一份代码编译到不同云否不同云需写不同代码供应引擎同一份代码可编译到 Terraform 和 AWS-CDKCloudFormation专有引擎测试同一套测试在本地仿真器和云上运行无需 mock本地测试需要 mock文档同时注明表中部分差异如网络拓扑在这个小例子里体现不出来属于放不进这么小的应用、但依然重要的能力。源码佐证Wing 的 IAM 策略到底是怎么自动生成的Wing 从意图自动生成 IAM 策略不是宣传语仓库中有清晰的实现路径。以 AWS 目标为例packages/winglang/sdk/src/target-tf-aws/function.ts 中SDK 在创建 Lambda 时会自动创建三样东西IamRole——信任策略硬编码为允许lambda.amazonaws.com执行sts:AssumeRoleIamRolePolicy——内容由policyStatements动态产生。这些 statement 正是在 inflight 闭包中bind/引用资源如bucket.put()时由编译器收集进来的若没有任何 statement会注入一条none:null的 no-op 语句保证策略合法IamRolePolicyAttachment——自动附加 AWS 托管策略AWSLambdaBasicExecutionRole等价于 Pulumi 示例里手写的三条logs:*权限。也就是说Pulumimain.ts中 40 多行的RoleRolePolicy样板在 Wing 的 AWS 目标里全部由 SDK 代劳。至于s3:PutObject这条具体权限可以从源码结构看到它由 packages/winglang/sdk/src/shared-aws/permissions.ts 统一维护其中s3:PutObject*、s3:Abort*等动作按资源使用场景聚合。跨云可移植性也有对应目录结构佐证SDK 下同时存在target-tf-aws、target-tf-gcp、target-tf-azure三个目标实现如 target-tf-aws/function.ts 与target-tf-gcp/function.ts均为同名构造物的平台实现共用cloud/目录下的平台无关抽象如 cloud/function.ts与shared-aws/中的公共实现——这与对照表中同一份代码编译到不同云的说法一致。适用边界与前提说明基于以上证据可以这样把握两者边界需要细粒度控制云厂商 API、已有 HCL/YAML 基础设施资产、或希望直接操作 provider 层Pulumi 这类 IAC 工具更贴合希望基础设施与应用代码同源、同类型系统、跨云复用且依赖本地仿真器快速迭代和免 mock 测试Wing 的定位即为此设计需要注意的前提Wing 编译到 Pulumi 的能力在对比文档中被表述为路线图roadmap上的未来工作而非当前可用功能当前版本的供应引擎为 JavaScript Terraform / AWS-CDK。相关计划可参考仓库内的 roadmap 文档。如果你希望继续深入 Wing 与 Terraform、AWS CDK、CDKTF 的同类对比仓库中还有 041-terraform-vs-wing.md、043-awscdk-vs-wing.md、044-cdktf-vs-wing.md它们与本篇使用同一个示例应用可横向串联阅读。赞分享编程语言编译器云原生语言运行时【免费下载链接】wingA programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡项目地址https://gitcode.com/gh_mirrors/wi/wing点击查看免费下载相关推荐Wing 与 Terraform 的核心差异一个语言搞定云应用的基础设施与运行时代码Wing 与 Terraform 的核心差异一个语言搞定云应用的基础设施与运行时代码 Wing 是一种通用编程语言用于开发完整的云应用——同时涵盖基础设施与编程语言编译器云原生语言运行时InstallerX与Android 16新特性动态权限与安装流程优化InstallerX与Android 16新特性动态权限与安装流程优化 Android 16的发布为应用安装体验带来了多项革新InstallerX作为一款现编程语言编译器云原生语言运行时Wing语言监控与日志如何收集和分析云应用的运行数据Wing语言监控与日志如何收集和分析云应用的运行数据 Wing编程语言为开发者提供了完整的云应用监控和日志解决方案。作为一款专为云原生应用设计的编程语言Wi编程语言编译器云原生语言运行时上一篇如何永久保存微信聊天记录WeChatMsg开源工具完整指南下一篇scrcpy 多设备投屏免费把安卓屏幕显示并操控在电脑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

SystemUI定制实战:从架构原理到状态栏修改与崩溃排查

SystemUI定制实战:从架构原理到状态栏修改与崩溃排查

四十九天这个节点,我终于把SystemUI这块硬骨头啃到能动手改东西的程度了。说实话,SystemUI可能是整个Android FrameWork体系里最“日常”、但也最容易劝退新人的模块。你现在手机屏幕上看到的状态栏、下拉通知面板、快捷开关、锁屏、音量条,甚…

2026/10/13 6:06:41 阅读更多 →
驾校信息管理系统开发:Java+SSM与Flask微服务实践

驾校信息管理系统开发:Java+SSM与Flask微服务实践

1. 项目概述:驾校信息管理系统的核心价值这个驾校信息管理系统是一个典型的行业垂直领域信息化解决方案。作为在驾培行业摸爬滚打多年的从业者,我见过太多驾校还在用Excel表格甚至纸质档案管理学员信息、教练排班和车辆调度。这种传统方式不仅效率低下&a…

2026/10/13 6:06:41 阅读更多 →
Vorssaint:免费开源的 macOS 菜单栏工具,逐应用音量与系统监控如何只装一个

Vorssaint:免费开源的 macOS 菜单栏工具,逐应用音量与系统监控如何只装一个

Vorssaint:免费开源的 macOS 菜单栏工具,逐应用音量与系统监控如何只装一个 【免费下载链接】vorssaint-utils Free and open-source macOS menu bar toolkit. 项目地址: https://gitcode.com/GitHub_Trending/vo/vorssaint-utils macOS 音量条只有一根,某个 App 太吵只…

2026/10/13 6:05:41 阅读更多 →

最新新闻

MySQL慢查询定位与索引设计:EXPLAIN与B+树实战全解析

MySQL慢查询定位与索引设计:EXPLAIN与B+树实战全解析

接手线上业务系统这几年,最让我头疼的问题之一就是MySQL慢查询。明明功能开发完了、测试也过了,一到流量高峰期,几个核心接口突然就卡了几秒,数据库CPU飙高,紧接着就是连接数打满、应用报错。排查下来,十有…

2026/10/13 11:00:03 阅读更多 →
ASIO2WASAPI:让普通声卡也能跑低延迟ASIO的桥接实践

ASIO2WASAPI:让普通声卡也能跑低延迟ASIO的桥接实践

简介:ASIO2WASAPI 是面向 Windows Vista 及以上系统的开源音频驱动方案,为音乐制作人与音频工程师提供硬件无关的 ASIO 支持。它借助中间层将 ASIO 协议和 Windows 原生 WASAPI 结合,用独占模式逼近硬件极限延迟,解决无专用音频接…

2026/10/13 11:00:03 阅读更多 →
JumpServer统一纳管PostgreSQL:从资产配置到安全审计的完整实践

JumpServer统一纳管PostgreSQL:从资产配置到安全审计的完整实践

搞了这么多年运维,数据库资产一直是权限管理里最让人头疼的一环。尤其PostgreSQL这种逻辑库多、角色权限细的系统,直接让人连生产库,账号密码满天飞不说,出事了你连谁干的都查不到。前阵子刚把一套PostgreSQL完整接进了JumpServer…

2026/10/13 11:00:03 阅读更多 →
MySQL Workbench 从下载到实战:安装避坑、连接配置与日常管理技巧

MySQL Workbench 从下载到实战:安装避坑、连接配置与日常管理技巧

最早学数据库那会儿,我一直在黑窗口里敲命令。建表、导数据、改权限全靠手打,一条语句写错就得整条回滚,效率低不说,眼睛也是真遭罪。后来换了 MySQL Workbench,整个体验完全不一样:不用背那么多命令&#…

2026/10/13 11:00:03 阅读更多 →
快速搭建规范开源项目:从零构建可协作可维护的GitHub仓库

快速搭建规范开源项目:从零构建可协作可维护的GitHub仓库

1. 为什么“快速搭建规范开源项目”这件事,比你想象中更值得花时间 “快速在GitHub搭建一个规范的开源项目(一)”——这个标题里藏着三个被新手普遍低估的关键词: 快速 、 规范 、 (一) 。不是“建个…

2026/10/13 11:00:03 阅读更多 →
用帕累托图做线上问题优先级排序:从频次统计到加权决策

用帕累托图做线上问题优先级排序:从频次统计到加权决策

作为负责线上稳定性的工程师,我每天到工位后的第一件事,不是看代码,而是先扫一眼昨夜的问题清单。以前团队排故障优先级基本靠嗓门,谁在群里吼得凶就修谁的;直到我们用帕累托图把问题频次和影响摊开做排序,…

2026/10/13 10:58:59 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →