代码转换提示词:Python 转 Go、JavaScript 转 TypeScript 等跨语言迁移(保持行为一致)

要把一段代码或一个模块改写成另一种语言时用:不是逐行直译,而是写成目标语言的惯用写法,同时列出两种语言语义差异带来的行为变化,并给出对拍测试,证明新旧代码结果一致。

NNathaniel bigo··转载 原文·AI 辅助撰写
通用大模型 对话模型通用
【角色】你是一名同时精通 [源语言] 和 [目标语言] 的工程师,做过多次生产环境的语言迁移,知道迁移出事故几乎都出在「看起来一样、其实语义不同」的地方。

【背景】
- 源代码语言与版本:[源语言及版本]
- 目标语言与版本:[目标语言及版本]
- 迁移原因:[如性能、统一技术栈、类型安全]
- 目标环境可用的依赖限制(如只能用标准库):[依赖限制]
- 待转换代码:
  [粘贴源代码]

【任务】
1. 先概括源代码的输入、输出和副作用(读写文件、网络、全局状态),作为「行为契约」。
2. 给出依赖映射表:源语言的库或内置功能 | 目标语言的对应方案 | 差异说明。
3. 写出目标语言代码:使用目标语言的惯用写法(错误处理方式、命名规范、并发模型、包结构),不要逐行直译。
4. 列出语义差异清单,至少检查这些点并说明你是如何处理的:
   - 整数除法与取模对负数的取整方向、整数溢出(任意精度 vs 固定位宽);
   - 字符串是按字节、码元还是字符计数与切片;
   - 字典或映射的遍历顺序是否稳定;
   - 空值语义(None、null、undefined、nil、零值);
   - 异常与错误返回、默认参数与可变默认值、浮点格式化与舍入;
   - 时间与时区、正则方言、排序是否稳定。
5. 给出对拍测试:一组覆盖边界情况的输入,以及分别在新旧代码上运行并比较输出的测试代码。

【约束】
- 行为必须与源代码一致,包括边界和报错情况;如果源代码本身有 bug,保留原行为并在清单中单独标出,由我决定是否修。
- 目标语言没有直接对应的特性时,说明取舍,不要静默改变行为。
- 推测出的意图要标注「推测」。

【输出格式】
行为契约 → 依赖映射表 → 目标代码(代码块)→ 语义差异清单(差异 | 源语言行为 | 目标语言行为 | 处理方式)→ 对拍测试 → 遗留问题。

高亮处换成你自己的内容:[源语言]、[目标语言]、[源语言及版本]、[目标语言及版本]、[如性能、统一技术栈、类型安全]、[依赖限制]、[粘贴源代码]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:版本要写具体,「Python 3.12 → Go 1.22」和只写「Python 转 Go」得到的结果不一样(比如是否能用泛型)。[依赖限制] 很关键:不写的话,AI 可能引入你们不允许用的第三方库。

常见坑:

  • 逐行直译的代码能跑,但往往不地道,比如在 Go 里模拟 try/except、在 TypeScript 里满屏 any。
  • JavaScript 转 TypeScript 不只是加类型:要明确 null 和 undefined 的区别,建议开启 strict 模式,类型实在不确定时用 unknown 并在使用处收窄,而不是 any。
  • 一次转换的代码量控制在一个模块或几百行以内,太长时先让它出「模块拆分与迁移顺序」。

追问技巧:把对拍测试的失败输出贴回去,说「这组输入结果不一致,定位原因」;全部通过后追问「还有哪些输入是对拍没覆盖到的」。

示例输出

示例,仅供参考(语义差异清单节选,Python → Go)
差异PythonGo处理方式
负数整除-7 // 2 得 -4(向下取整)-7 / 2 得 -3(向零取整)封装 floorDiv
字典遍历按插入顺序map 遍历顺序随机输出前对 key 排序
go
// floorDiv 与 Python 的 // 行为一致:向负无穷取整。b 不能为 0。
func floorDiv(a, b int) int {
	q := a / b
	if a%b != 0 && (a < 0) != (b < 0) {
		q--
	}
	return q
}
改编自 @woyxiang / f/awesome-chatgpt-prompts「Code Translator: Any Language to Any Language」,许可证 CC0 1.0。

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~