Programming languages 编程语言的新范式、语法特征和行为,还是不太为人所知?

Programming languages 编程语言的新范式、语法特征和行为,还是不太为人所知?,programming-languages,language-design,Programming Languages,Language Design,我为他们设计了一些教育性编程语言和解释器,但我的问题始终是它们最终“正常”和“枯燥”,大部分类似于某种现有语言(ASM和BASIC) 我发现很难为语法特性提出新的想法,“整洁的东西”和新的或经过修改的编程范例我一直认为,在这种情况下,很难想出好的新东西,而不是有趣/无用的新东西。 我想知道你是否能帮助我发挥你的创造力: 在语言语法和内置函数以及可能甚至新的范例方面,我可以在我的语言中使用哪些功能来保持它的无用性,但更有趣、有趣和/或与编程不同 有很多不寻常的语言特征B-< /P>< P> A

我为他们设计了一些教育性编程语言和解释器,但我的问题始终是它们最终“正常”和“枯燥”,大部分类似于某种现有语言(ASM和BASIC)

我发现很难为语法特性提出新的想法,“整洁的东西”和新的或经过修改的编程范例我一直认为,在这种情况下,很难想出好的新东西,而不是有趣/无用的新东西。

我想知道你是否能帮助我发挥你的创造力:

  • 在语言语法和内置函数以及可能甚至新的范例方面,我可以在我的语言中使用哪些功能来保持它的无用性,但更有趣、有趣和/或与编程不同

有很多不寻常的语言特征B-< /P>< P> ASM和BASIC都是命令式语言,所以您可能需要考虑函数式编程语言的特性,尤其是lambdas和映射。您可能还需要考虑有趣的控制流,例如,能够抛出异常,然后,由于捕获异常并做出特定调用,从异常抛出的点恢复(尽管使用修改的环境)。此外,协同例程或其他形式的语言级并行性通常也很有趣。

看看Forth。这是原创的东西。太原创了

我一直认为将CSP应用于基于堆栈的语言会很好。可能会非常有趣。

除了Michael对函数式语言的评论之外,看看闭包和块(就像在Objective-C中所做的那样)。通过这些,您可以将函数或代码片段视为一级对象,并可以根据需要传递和调用。一些很酷的东西可以用它来完成,而且它也逐渐成为大规模多核系统编程的范例

您还可以研究curry,这意味着绑定函数的一些参数,这样您就可以在更少的参数上使用它。这样,您就可以创建一个base-b对数函数,您可以使用它为base-2、base-10等对数创建函数

还有一些不太实用的东西(比如在语言中):看看Ruby把所有东西都当作对象(偶数)的方式,你可以用它做很多事情。就像一个具有内省功能的面向对象运行时,一个“免费”的解释器,等等。实现OOP比你想象的要容易

在过去的30多年里已经做了很多事情,不要把自己局限于70年代风格的编程如果你正在寻找灵感,请查看Ruby、Python、Scala、Objective-C、JavaScript(阅读道格拉斯·克罗克福德的JavaScript:好的部分)等。

提供了各种深奥编程语言的古怪和奇妙的范例,包括许多用户创作。也许其中有一些理智的灵感

我一直认为很难想出好的新东西

你是对的。这就是为什么John Backus、Ken Iverson、Niklaus Wirth、Robin Milner、Kristen Nygaard和Ole Johan Dahl、Alan Kay和Barbara Liskov都获得了胜利——他们为编程语言的设计提供了很好的新思想

如果你想在自己的设计中添加一些有趣的东西,这些人是很好的偷盗对象。

请参阅。有许多有用的链接,特别是在本节中


那么多的“新”其实只是“被遗忘的旧”。我将对当今一些“流行”的编程语言保持我的想法。

有许多事情可以探索,其中一些正在进行积极的研究。我认为一些有用的东西是:

  • 非函数语言中的实连续体
    • 下面是将它们添加到C++的尝试:
  • 允许用户创建新语法元素的语言
    • FORTH和J可能是起点
    • Pogoscript也很有趣,因为像if/elseif/else和while/wend-arten-not-special这样的流控制结构可以在用户代码中创建
    • 自定义用户定义的操作符其实并不新鲜:我认为Haskell、Nemerle、Kaleidoscope和其他一些人已经在这样做了,但即使这样也不会“无聊”

没有什么比brainf*ck更有趣的了。你永远也无法打败它。我认为brainf*ck是一个极简主义的东西,而不是一个有趣的东西。为了纯粹的幽默价值,很难打败Intercal手册。抛出异常,做一些事情,从异常生成的地方恢复是VB6所做的事情。您不知道文件是否已打开?尝试使用它,如果失败,请检查错误代码,打开文件并调用Resume。他认为这很正常也很无聊。实际上,我在一个真实的项目中使用了where的变体——只要你记下项目的数量,而不是真正创建它们,这是正常的。当你有256字节的RAM和2K的ROM时,你还会用什么?@JerryJeremiah assembly?一些接近C的金属子集?不确定。我试图学习它,发现它太异国情调,不适合任何严肃的发展。也取决于你想在这样的硬件上做什么。我已经做了所有三件事。福斯是一个真正的选择,但它不是主流——这是肯定的。@JerryJeremiah如果我选择,我不会选择福斯,原因有二:1)对我来说太异国情调了。太多的事情以不同的方式和不熟悉的方式完成2)我没有任何实践经验,也不知道最佳实践和其他东西。所以是的,我并不是说Forth是不好的,所以如果这两个条件对你都是错误的,那为什么不呢,我很感兴趣。你能描述一下这是怎么回事吗?