代码之家  ›  专栏  ›  技术社区  ›  bennybdbc

有没有任何编程范式不是基于操纵变量和函数的?[关闭]

  •  12
  • bennybdbc  · 技术社区  · 14 年前

    实际上,我所知道的每一种语言基本上都是一个主题的变体:创建变量和函数,然后使用条件和其他构造来操纵它们。我知道函数式编程之类的语言与“传统”语言有些不同,但在本质上它们几乎是一样的。您仍在使用变量(尽管它们是不可变的,但有些)和创建函数。

    有没有一种语言或系统完全抛弃了我们现在倾向于使用的语言或系统,而采用了完全不同的方法?

    11 回复  |  直到 12 年前
        1
  •  8
  •   Martin Liversage    14 年前

    不是语言本身,而是 analog computers

        2
  •  16
  •   JUST MY correct OPINION    14 年前

    尽管你高压辞退了 Functional Programming ,我认为你需要再看一遍,只是这次阅读是为了理解和学习,而不是用确认偏差来否定它,认为它“大同小异”。用函数式风格编写代码与用函数式风格编写代码截然不同 imperative style . 如果对你来说还不够不同,为什么不看看这些呢?:

    基本上,只要看看几十个 programming paradigms 阅读描述以获得理解和启发,而不是通过确认偏差而否定。为每一种语言学习一种对于你所使用的“不同”的模糊定义来说完全不同的语言,并从中获得乐趣。

        3
  •  8
  •   RBerteig Keith Adler    14 年前

    图形语言已经有过几次尝试。这个 LabVIEW 国家文书可能是最成功的。它使用数据流图 具有作用于数据的组件。

    图形语言的另一个尝试是 UML . 我猜陪审团已经出局了。在一个标准委员会参与进来并把它变成适合每个人的东西之前,这可能是个好主意。

    大量的机电系统是由计算机控制的 PLC 用编程 ladder logic . 它本质上是一种创造高度 语言。

    还有一些深奥、晦涩、另类的语言,它们除了提醒人们图灵完备并不要求语言是合理的之外,基本上没有任何实际用途。有些人可能会把图灵机器本身归入这一类,但是 BrainF*ck ,和 Piet

    深奥的语言 whenever 这也是一个有趣的练习,因为它完全没有流量控制。

    编辑: 我差点忘了 Befunge . 它的源文本是一个ASCII字符网格,其中每个单元格都是一个操作码。执行在四个方向中的任何一个方向上运行,因此可以以四种不同的顺序通过一个操作码。它是另一种深奥的语言,在1993年被设计成尽可能难为它编写编译器。并不是说这实际上阻止了某人这么做。

    我指出的几种语言都是深奥的语言。这些语言通常都有小的(通常只有一个或两个)用户群体。它们的创建有多种原因,而探索图灵完备的含义以及如何表示一个程序的边界则是更重要的原因。

    INTERCAL 它创建于1972年。它是一种表面上类似于COBOL的语言,但在它的许多怪癖中,需要程序有足够的礼貌(但不要太礼貌)才能继续执行。为了支持礼貌, PLEASE DO DO . 一个值得注意的扩展是 COME FROM 语句,它可以使控件从指定位置流到此处。

        4
  •  6
  •   Tyler    14 年前

    好吧,有 Piet . 这完全不同。(下面是Piet中的Hello World。)尽管如此,您可能会认为您正在处理一个包含一些整数的数据结构(在本例中是一个堆栈),然后您正在从堆栈中添加和删除内容,操作值等,所以实际上它还是一样的。

    alt text

        5
  •  3
  •   Community Mr_and_Mrs_D    7 年前

    这取决于你在问什么,但答案可能是否定的。

    Turing Complete 是图灵完备的。这意味着这些语言中的任何一种都可以被这个组中的任何其他语言模拟。然后任何编程语言都可以有一个编译器或解释器,可以在我们当前的计算机上运行(近似)。从架构上讲,它们确实有代码和数据的概念。

    所以,如果你认为函数式编程和命令式(“传统”)编程是一样的,因为它们在计算机上运行,那么就没有其他选择了。

    1. 不变性是函数式编程的主要因素。
    2. homoiconicity 表示函数可以用作数据结构。请参见Lisp语言。
    3. self-modifying code .

    程序的编写也可能有点不同。使用函数组合作为基础可能会引导您走向串联编程,尽管数据流编程(包括许多图形语言)和函数式编程也同样支持它。

    1. 逻辑编程类 Prolog .
    2. Evolutionary Computation 以标准编程语言输出程序。但是大概可以编写一种描述性语言,可以“执行”以找到结果程序并执行它。这也可以用于许多机器学习方法。

    不同的

    编辑 if filter map . 给定高阶函数和延迟求值,您可以不使用显式 如果 for ,仅使用函数和数据结构。这并不意味着你真的失去了这样做的能力。你可能对 Haskell

    另外,请参阅其他有关

        6
  •  3
  •   ern0    14 年前

    问得好。让我们后退一步。在我的第一个回答中,我将试图解释,你要寻找的不是一种新的语言,而是一种新的架构,我相信,你至少知道一些重要的架构。

    10 INPUT "PASSWORD: ";A$
    20 IF A$="PASSWORD" THEN GOTO 40
    30 PRINT "TRY AGAIN" : GOTO 10
    40 PRINT "WELCOME"
    

    MS-DOS程序是一样的:它们运行一个wile,然后等待用户输入,然后再次运行。在Unix系统上,即使是多任务系统,游戏也非常相似,不止一个用户可以这样运行程序。

    有两个穿透波:

    • 事件驱动系统:程序流发生了根本性的变化(事件处理程序、回调、侦听器);

    同时,编译和程序结构也发生了变化,但我认为有一些不足:

    • 元编程(基于IDE的代码生成器、预处理器),
    • 插上插头,
    • 动态库。

    此外,编程目标环境也发生了很大变化:

    • 解释器平台(PHP),
    • 系统服务,
    • 框架,

    一些大而肥的项目成了平台:

    • Lotus Notes(自己的语言,现在是Java),
    • MS Excel(Visual Basic)。

    也许你要找的不是编程语言。比如说,任务是在浏览器中显示一个数据列表,某种类型的表。web应用程序应该看起来:

    • PHP脚本执行SQL查询,模板系统将获得的数据插入到准备好的HTML模板中。
    • PHP脚本将从SQL获得的数据转换为XML,浏览器使用XSLT转换将其转换为最终的HTML。
    • JavaScript应用程序从PHP脚本请求数据,PHP脚本以JSON格式发送SQL结果,然后JS应用程序呈现最终的HTML。

    HTML+XSLT是一种编程语言吗?不是。它们执行的任务是否与PHP在服务器端或JS在客户端执行的任务相同?绝对的。是公共平台吗?是的,所有的浏览器都支持它。

    有效的 :更快的代码生成、更灵活的应用程序、社区工作支持、可扩展性、更易于维护、可重用性等。

    (我在这里把答案分成两半;在下一部分,我会给你看一个,我正在玩一段时间。)

        7
  •  2
  •   ysth    14 年前

    通读 http://en.wikipedia.org/wiki/Programming_paradigm 以及右边链接框中链接的所有页面。取决于你如何看待它,有些是完全不同的或他们基本上都是一样的。

        8
  •  1
  •   harald    14 年前

    退房 Forth ,这是一个完全不同的系统,几乎所有的事情都是关于操作堆栈的。它就像一个非常原始的小虚拟机。

        9
  •  1
  •   ern0    14 年前

    正如我所说,现在有很多平台或环境可以编程。对于某些平台,您可以从一长串语言中进行选择,例如Microsoft.NET,它可以用VisualBasic、C#等进行编程;其他情况下,非常不同的平台使用相同的语言,例如JAVA,它用于Android、Oracle SQL server存储过程等。

    此外,还有一些非编程语言,它们覆盖一个域或它们表达某种配置,这远比真正的编程语言简单,但可以比编程语言更好地使用。举例:plc的梯形逻辑编程。

    数据流编程就是这种编程的一种。让我们看看维基百科,什么是数据流编程(也称为基于流的编程):

    在计算机科学中,基于流的 将应用程序定义为 “黑箱”过程网络, 在预定义的 消息传递的连接,其中 指定了连接 流程外部。这些 黑盒进程可以重新连接 无休止地形成不同的 应用程序,而不必

    发件人: http://en.wikipedia.org/wiki/Flow-based_programming , http://en.wikipedia.org/wiki/Dataflow_programming

    维基百科的文章很棒,我也回答了一些其他的问题,所以我不想重复我自己。相反,我描述的是用于异步数据流服务器的语言。

    • 组件声明

      cmp:比较

    这引用了一个名为“cmp”的组件实例,这是一种比较类型。

    • 消息定义

      src.out公司>gt;cmp值 cmp.gt型>gt;dst1.in 化学机械抛光>gt;dst2.in 化学平衡>>dst3.1英寸

    • 属性

      凸轮轴底座= 8

    这定义了组件实例的端口值。

    (把这些行放在一起,我们得到一个简短的数据流程序,这意味着:一个valus来自src,cmp检查它的值,如果它大于8,则传递给dst1,如果它小于8,则传递给dst2,如果它正好是8,则传递给dst3。)

    有趣的是,有些严肃的项目实现了数据流编程,但他们甚至没有提到:

    数据流程序可以显示,也可以编辑为图形(参见SynthEdit)。

        10
  •  0
  •   Mendelt    14 年前

    最重要的不是语言,而是你用它做什么。许多语言会把你推向一个特定的方向,像Haskell这样的纯函数式语言会使你几乎不可能强制编程,例如,但是只要你不花时间去学习范例,大多数语言看起来都和实际运行的机器语言一样,计算条件并给内存空间赋值。

    范例给了你想要的抽象。好的面向对象或函数代码看起来与您描述的完全不同。你不需要语言来做这件事。我见过用C++编写的面向对象的大代码和C++中的函数代码。尽管在正确的工作中使用正确的语言帮助很大。不幸的是,事情也反过来了。如果你不花时间去理解范例,你仍然会用Scheme或Smalltalk编写命令式代码。

        11
  •  0
  •   David Thornley    14 年前
    推荐文章