原文标题:《谷歌阵地失守!ChatGPT又准又快,改bug完全不需要搜》
ChatGPT上岸第一剑,先斩开发者!
尤其是程序员群体,更是瑟瑟发抖,亲手把自己的饭碗整没了,未来只能沦为「代码审核专员」。
但ChatGPT改代码的能力真有想象中那么强吗?
可能还真就有那么强!
用上ChatGPT,完全不需要从浩如烟海的文档中寻找一个有价值答案了,只需要一个问题,直接就能返回大概率是正确的答案,并且还有诸多示例,从依赖库版本更新到MacOS技术支持无所不能。
ChatGPT出马,一个能顶俩,老板直呼省钱...
「版本匹配」绝对是最让程序员们掉头发的问题,每次碰到tensorflow不兼容、各种依赖库版本互斥、语言版本特性等问题都要耗费大量的精力来调试和修改。
比如老板给你一个需求,把所有网站从非常过时的PHP7.4版本迁移到最新的PHP8,这个问题可能就头疼了。
PHP是WordPress和许多其他网络管理工具所依赖的网络编程语言,其中会涉及到大量的插件,而其中某些插件并不兼容PHP8,如果想让升级后的网站成功运行,就必须找到并修复其中的代码。
现在可以把问题的细节直接输入给ChatGPT,就能快速得到一个解决方案,并且回答中还会包括一些演示代码。
问:我在用PHP的时候,在没有传入数组的情况下,extract函数返回了一个fatalerror,代码在PHP7.4中就正常运行,但在PHP8中有错误。PHP8的extract有什么变化吗?
I'mhavingtroublewiththePHPextractfunctiongivingafatalerrorwhennotpassedanarray.InPHP7.4,Ididnotgettheerror,butIseemtoinPHP8.DidextractchangeforPHP8
ChatGPT回答:在PHP8中,extract()函数的行为变得更加严格。在以前的PHP版本中,如果没有传入数组,extract()函数只会返回false;但是在PHP8中,如果没有传入数组,则会抛出一个致命错误。此修改是为了提高函数的健壮性,并防止意外输入引起的潜在错误。
你可以通过使用is_array()函数检查传递给函数的变量是否是数组,然后再调用extract()
还可以使用array_key_exists()函数检查传入的变量是否为数组。
或者使用...运算符将数组解构为多个变量。
事实证明,根据ChatGPT的答案几分钟内就可以修完bug,其中很大一部分原因是知道去哪里找到答案,并且ChatGPT也说明了在不同版本的PHP中函数的行为是如何变化的。
问:当把代码从PHP7.4迁移到PHP8时,哪些PHP函数可能会出问题?
WhatPHPfunctionsarelikelytobreakwhenmovingfromPHP7.4toPHP8
ChatGPT回答:当从PHP7.4迁移到PHP8时,有一些函数和特性可能会无法运行或具有不同的行为。以下是一些可能引发问题的主要变化:
如前面答案中所提到的,如果没有传入一个数组,则extract()函数会抛出一个致命错误;
这些只是从PHP7.4迁移到PHP8时可能会发生问题的一些更改示例,在升级之前彻底测试您的代码和应用程序是一个好主意,以确保一切都按预期运行。
在这份回答中,ChatGPT同时还说了「如前面答案中所提到的」,让人感到既惊讶又惶恐。
在正在修改的代码中,原来的开发人员(已经离职很久了)经常使用create_function,当时我不知道该函数已经被弃用了,但根据ChatGPT提供的修改列表,只需要搜索代码,找到需要更新和重写的内容。
然后,继续要求ChatGPT展示替换该函数的方法。
问:在PHP中使用create_function重写代码的好方法是什么?给我一个使用create_function的例子。
What'sagoodwaytorewritecodeusingcreate_functioninPHPCanyougivemeanexampleusingcreate_function,andthenoneusingthecurrentlypropermechanism
create_function是PHP中已弃用的函数,用于创建匿名函数。官方不再推荐使用这个函数,PHP8.0中已经删除了它。现在可以使用function关键字创建匿名函数(也称为闭包)。
下面是一个示例:
下面是使用匿名函数的等价代码:
此外,还可以使用use关键字将变量传递到闭包中:
这个回答相当清晰,看了解释以后很快就可以重写完代码。
假设在研究Mac上的优化存储(OptimizeStorage)时也有一些问题,为了缩小研究范围可以直接问ChatGPT。
问:使用MacOS功能OptimizeMacStorage时,TimeMachine是否会因为一些文件只表示为本地机器上的存根而进行不完整的备份?
IfyouusetheMacOSfeatureOptimizeMacStorage,willTimeMachinemakeincompletebackupsbecausesomefilesareonlyrepresentedasstubsonthelocalmachine
ChatGPT回答:MacOS中的「优化Mac存储」功能使用iCloud将很少使用的文件从Mac卸载到云中,同时在本地机器上保留一个「存根」(stub)文件来表示原始文件。这样可以节省Mac硬盘上的空间。
当设置TimeMachine以进行备份时,将会备份所有文件,包括那些已经使用「优化Mac存储」卸载的文件,不过是用存根文件来替代取代原始文件。
这也意味着,如果你要从TimeMachine备份中恢复你的Mac,并且「优化Mac存储」功能是启用的,那么任何卸载的文件将不会包含在恢复中,需要再次从iCloud下载。
值得注意的是,如果卸载了大量的文件,那么TimeMachine备份可能会比不使用优化Mac存储占用更多的空间,因为备份存根文件占用更少的空间。
简而言之,如果你使用「优化Mac存储」功能,TimeMachine将会做不完整的备份,因为它只会备份存根文件,而非已经卸载到云端的原始文件。
上面ChatGPT的答案是正确的。
ChatGPT和其他的模型一样,你必须意识到AI的答案并非总是正确,你极有可能会得到完全错误的答案,但它确实是一个非常出色的工具。
问:当你回答一个问题时,你是否接受了其他人贡献的知识,你是否从原始的人力资源中获得了工作成果?
ChatGPT,whenyouansweraquestion,areyoutakingknowledgeothershavecontributedandareyoutakingworkandcreditawayfromtheoriginalhumansources
ChatGPT的答案:作为一个由OpenAI创建的人工智能语言模型,我没有个人的观点或想法。不过我可以告诉你,用来生成回复的信息是基于我所接受的数据训练,这些数据包括来自互联网的巨量文本。
重要的是要记住,我的回答是基于我所受训练的数据中的模式生成的,可能并不总是完全准确或最新的。
参考资料:
翻车的不止谷歌?微软必应聊天演示被指存在事实性错误
2023.02.15
互联网之父警告ChatGPT投资热:不要急于从中赚钱,它没那么好