是unix的' cp'命令声明还是命令?

时间:2017-07-31 05:25:50

标签: imperative-programming declarative-programming

我和同事讨论过,他坚持认为cp是声明性的。对我来说,这似乎非常迫切。它是我们要求计算机执行的指令,而不是定义或声明。因为它是声明性的,而不是:

cp a.zip b.zip
你可能有:

b.zip = a.zip

有没有人对此有任何意见?

2 个答案:

答案 0 :(得分:1)

似乎你在两者没有什么区别的水平上使用这些术语。例如,如果我为程序创建用户界面并且有一些文件说

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在这个规范级别,命令式和声明性之间基本没有区别

答案 1 :(得分:0)

cp(1)语法本身是声明性的,因为您定义了要完成的操作而未指定需要完成的方式。顺便说一下,这意味着您的两个示例都是声明性的。

您可能还想看看wider discussion