代碼轉換提示詞: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 條評論

登入 後參與評論

還沒有評論,來搶沙發~