【问题标题】:Can programming be truly declarative? [closed]编程真的可以是声明式的吗? [关闭]
【发布时间】:2015-10-15 11:00:34
【问题描述】:

我一直在自学一些关于声明式编程与命令式编程的知识,并且我已经(可能是错误的)理解声明式编程或多或少只是抽象。

例如,根据我对这些概念的理解,调用方法来做某事是声明性的,而方法的实现是命令性的(但不一定?只是不是声明性的)。

因此,似乎无论您在哪里有声明性代码,都必须依赖非声明性代码来实现。这只是它的本质,还是存在 100% 声明性的语言(我什至无法开始概念化)?

如果我对这些概念的理解不正确,请纠正我!虽然我的 B.A.在计算机科学领域,我觉得到目前为止我只被教导“键入内容,以便在您运行代码时发生正确的事情。”

谢谢。

【问题讨论】:

  • 我不是这方面的专家,但您的问题似乎更适合programmers.stackexchange.com,它更多地是关于概念而不是解决方案。你可能还想试试 Quora (quora.com)。
  • 声明性代码需要某种执行策略。目前在常见的计算机体系结构上,在某些时候将在实现中依赖某种命令式编程。
  • 部分原因是因为任何级别的高级语言组织都是如此。一切最终都编译为处理器指令集中的某些东西,在那个级别上只有命令式的。您没有足够的工具包来执行功能性、声明性或其他任何事情。从这个意义上说,声明式、函数式和许多其他高级语言组织“在某个地方必须依赖 [a] 非声明式 [] 实现”,这是微不足道的事实。

标签: theory abstraction declarative paradigms imperative


【解决方案1】:

声明式编程表达了软件组件的逻辑,而没有概述它的控制流。您正在谈论的调用函数的方法(称为函数式编程 - 声明式编程的子范式)可能有点令人困惑,尤其是在学习编程并且可能学习 C/C++/Java 之类的语言时。有一些函数式编程语言,例如 Lisp 和 Haskell,完全利用了函数式范式。

刚开始时,我不会尝试同时学习这些范例的实现。相反,我发现将声明性语言视为像 CSS SQL 这样的高度表达语言是最容易的。他们用简单的英语描述了应该做什么,而将如何抽象掉。

【讨论】:

  • 是的,我是从 Scheme(更具体地说是 Racket)开始的,所以我的第一次编程体验纯粹是功能性的(我非常感谢我的学校选择这样做)。我认为我一直在理解的是我在脑海中在声明式和命令式编程之间创建的错误二分法——类似于“你可以用命令式或声明式的方式来做,它们完全分开”,而不是将它们视为相互关联的。
最近更新 更多