我正在与一位同事讨论,他坚持认为 cp 是声明性的。对我来说,这似乎非常必要。这是我们要求计算机执行的指令,而不是定义或声明。为了它是声明性的,而不是:
cp a.zip b.zip
你可能有:
b.zip = a.zip
有人对此有任何意见吗?
我正在与一位同事讨论,他坚持认为 cp 是声明性的。对我来说,这似乎非常必要。这是我们要求计算机执行的指令,而不是定义或声明。为了它是声明性的,而不是:
cp a.zip b.zip
你可能有:
b.zip = a.zip
有人对此有任何意见吗?
似乎您在两者几乎没有区别的水平上使用这些术语。例如,如果我正在为一个程序制作用户界面并且有一些文件说
Logo:
Title: Cool UI
Color: Green
这是我的 ui 的声明性表示。它是代表我希望计算机做什么的数据。如果我要使用类似的代码来制作我的 ui
l = Logo()
l.add(Title('Cool UI'))
l.add(Color('Green'))
ui.render(l)
那将是我的 ui 的必要表示。我告诉计算机每一步要做什么。当我们谈论 cp 命令时,值得思考“命令式”和“声明式”版本之间的区别是什么。一方面,你不能比告诉计算机更迫切
cp a.zip b.zip
从某个角度来看,这就像说“嘿增加这个寄存器”或“嘿把这个内存地址上的东西移动到这个内存地址”,这在汇编中只是
mov r0, r1
话虽如此,如果您要在数据中描述您想要做什么,您会说类似
copy-paste: a.zip b.zip
其中,取出冒号并缩短名称,你会得到
cp a.zip b.zip
TL;DR 在这个级别的规范下,命令式和声明式基本没有区别
cp(1) 语法本身是声明性的,因为您在没有指定需要如何完成的情况下定义要完成的任务。顺便说一句,这意味着您的两个示例都是声明性的。
您可能还想看看更广泛的讨论。