编程语言编译器云原生语言运行时【免费下载链接】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),仅供参考