【问题标题】:Is unix's 'cp' command declarative or imperative? [closed]unix 的 'cp' 命令是声明式的还是命令式的? [关闭]
【发布时间】:2017-07-31 05:25:49
【问题描述】:

我正在与一位同事讨论,他坚持认为 cp 是声明性的。对我来说,这似乎非常必要。这是我们要求计算机执行的指令,而不是定义或声明。为了它是声明性的,而不是:

cp a.zip b.zip

你可能有:

b.zip = a.zip

有人对此有意见吗?

【问题讨论】:

  • 两者都不是。这是一个命令(它可能内置在 shell 中),但 cp 不是编程语言。
  • 命令本身既不是。相反,如果 shell 脚本语言 是声明性的还是命令性的,您可能应该将其作为更广泛的问题。
  • 我投票结束这个问题,因为它是关于术语的讨论,而不是要解决的实际问题。

标签: imperative-programming declarative-programming


【解决方案1】:

您似乎是在两者几乎没有区别的水平上使用这些术语。例如,如果我正在为一个程序制作用户界面并且有一些文件说

Logo:
  Title: Cool UI
  Color: Green

这是我的 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在这个级别的规范下,命令式和声明式基本没有区别

【讨论】:

    【解决方案2】:

    cp(1) 语法本身是声明性的,因为您定义 what 您想要完成而没有指定 如何 它需要完成。顺便说一句,这意味着您的两个示例都是声明性的。

    您可能还想查看wider discussion

    【讨论】:

    • 根据这个定义,你能说出 任何东西 不会是声明性的吗?当我用汇编语言编写时,我说我想把存储在一个寄存器中的数字当作一个内存地址,然后将该位置的 8 个字节加载到另一个寄存器中。这就是我想要发生的处理器如何做到这一点(通过时序、控制信号等)不在我所写的范围内。
    • cp a.zip b.zip 放置在 shell 上下文中的命令应被视为命令式。当然,这也不是语法命令。
    猜你喜欢
    • 1970-01-01
    • 2014-03-25
    • 2019-05-29
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2012-09-09
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多