编程能否真正成为声明式的?

4
我一直在自学申明式编程和命令式编程的区别,我的理解是申明式编程基本上就是抽象化(也许我理解错了)。例如,根据我对这些概念的理解,调用一个方法来执行某些操作就是申明式的,而方法的实现是命令式的(不一定总是这样,但并非申明式的)。因此,在任何使用申明式代码的地方,顺着代码找下去,你会发现其中必然依赖于非申明式代码的实现。这是它的本质吗?还是有一些语言是100%申明式的(我甚至无法想象)?
如果我对这些概念的理解有误,请纠正我!尽管我已经完成了计算机科学学士学位的一半,但我觉得到目前为止我只是被教导“输入代码以使代码运行时产生正确的结果”。
谢谢。

4
我不是这方面的专家,但似乎您的问题更适合发布在 http://programmers.stackexchange.com/ 这个网站上,因为它更侧重于概念而非解决方案。您也可以尝试一下 Quora(http://www.quora.com/)。 - Rob Rose
声明式代码需要某种执行策略。在目前的常见计算机架构中,这将在某个时候依赖于某种命令式编程实现。 - shuttle87
2
部分原因是因为这对于任何级别的高级语言组织都是正确的。最终,所有东西都会编译成处理器指令集中的某些内容,在那个级别上只有命令式。你没有足够的工具来执行功能性、声明性或其他任何操作。从这个意义上说,声明性、功能性和许多其他高级语言组织“在某个地方必须依赖于[一个]非声明性[]实现”的事实是微不足道的。 - Two-Bit Alchemist
1个回答

0

声明式编程表达了软件组件的逻辑,而不是概述其控制流。你所谈论的函数调用方法(称为函数式编程 - 声明式编程的子范式)可能会有点令人困惑,特别是在学习编程和可能学习C/C++/Java等语言时。有一些函数式编程语言,如Lisp和Haskell,完全利用了函数式范式。

当刚开始学习时,我不会尝试同时学习这些范式的实现。相反,我发现将声明式语言视为高度表达性的语言(如CSS SQL)最容易理解。它们用简单的英语描述应该做什么,而抽象掉了如何做到这一点。


是的,我最开始使用Scheme(更具体地说是Racket),所以我的编程经验纯粹是函数式的(我非常感谢我的学校选择了这种方式)。我认为我一直陷入的问题是我在头脑中创造了一个虚假的二分法,即“你可以用命令式或声明式的方式来完成,它们完全不同”,而不是将它们视为相互关联的。 - jah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接