问题标签 [concatenative-language]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
programming-languages - Explain concatenative languages to me like I'm an 8-year-old
I've read the Wikipedia article on concatenative languages, and I am now more confused than I was when I started. :-)
What is a concatenative language in stupid people terms?
java - Java中的连接语言解释器
我有兴趣在 Java中找到一种连接语言解释器。理想情况下,它应满足以下条件:
- 它有一个解释器,而不是(仅)一个用于 JVM 的字节码编译器。
- 该语言本身具有不错的文档,不仅有几个示例和“我有一天会记录其余部分”的通知。
- 该项目并未完全放弃。
简而言之,我正在寻找一种可以轻松嵌入到 Java 中的合理“活跃”的连接语言。
lisp - Lisp 对 Factor 编程语言的影响?
我(来自 Slava Pestov)读到 Factor 受到 Lisp 的影响,但我不确定我能理解如何?他们不是非常不同的编程语言吗?
postfix-notation - 应用语言可以使用后缀表示法吗?
我一直发现像 Factor 这样的后缀语言比前缀(Lispy 语言)和中缀/后缀语言(所有 C 风格的语言,如果我们同时包含运算符和函数)更具可读性。
与前缀语言不同,您不需要处处使用分隔符。与中缀表示法不同,没有复杂的优先顺序要记住。有什么不喜欢的?
这些语言似乎都是串联的,因此几乎总是基于堆栈的。
是否可以实现一种现代语言,它适用于连接,并且仍然基于后缀?
haskell - Haskell 中的行多态性:用“转换”编写 Forth DSL 的麻烦
最近 Haskell 博客活动1启发了我,尝试在 Haskell 中编写类似 Forth 的 DSL。我采用的方法既简单又令人困惑:
对于做简单的事情,这非常有效:
简单的函数可以很容易地转换为相应的堆栈转换。到目前为止,一些游戏产生了令人愉快的结果:
当我尝试用高阶函数扩展它时,麻烦就来了。
call
应该通过基本上将转换(保持在堆栈的顶端)“应用”到它的“其余部分”(s :> (s :~> s'))
来将 form的堆栈转换为 form 。s
我想它应该像这样工作:
但实际上,它给了我一个巨大的类型不匹配错误。我究竟做错了什么?“堆栈转换”表示可以充分处理高阶函数,还是我需要调整它?
1注 与这些人的做法不同start push 1 push 2 add end
,我希望它是,而不是 ,我runF $ start (push 1) (push 2) add
的想法是也许以后我可以使用一些类型类魔法来使push
某些文字隐含。
programming-languages - 连接语言可以使用前缀表示法吗?
级联语言有一些非常有趣的特性,例如能够组合不同数量的函数,并且能够分解出函数的任何部分。然而,许多人不屑一顾,因为它们使用了后缀表示法,而且很难阅读。另外,波兰人可能不喜欢人们倒着使用他们精心制作的符号。
那么,是否可以有前缀符号?如果是,那么权衡是什么?
我知道它是如何工作的,但我对连接语言没有经验,所以我可能遗漏了一些东西。基本上,一个函数将以相反的顺序被评估,而值将从堆栈中以相反的顺序被拉出。为了证明这一点,我将比较后缀和前缀的样子。以下是一些使用传统后缀表示法的连接表达式。
表达式从左到右计算:在第一个示例中,5
被压入堆栈,然后dup
复制堆栈顶部的值,然后将堆栈*
顶部的两个值相乘。函数首先从堆栈中提取最后一个参数:在第二个示例中,-
调用时2
位于堆栈顶部,但它是最后一个参数。
这是我认为前缀表示法的样子:
表达式从右到左求值,函数首先从堆栈中提取它们的第一个参数。请注意前缀过滤器示例如何与其描述更接近,并且看起来与应用样式相似。我注意到的一个问题是考虑因素可能没有那么有用。例如,在后缀表示法中,您可以2 -
从中分解3 2 -
以创建减法函数。在前缀表示法中,您可以从中分解- 3
以- 3 2
创建一个subtractFromThree 函数,这似乎没有那么有用。
除非有任何明显的问题,否则使用前缀表示法的连接语言可能会赢得不喜欢后缀表示法的人的青睐。任何见解都值得赞赏。
concurrency - 连接语言和并发 - 原则上有困难吗?
连接语言中的并发性是否存在原则问题,还是只是缺少?
还是我只是错过了什么?
据我所知,目前最先进的连接语言是Factor,它仍然只有一个不使用多核的协作线程系统。
也许 Factor 的发明者 Slava Pestiv 已经被 Google 消耗得如此之多,以至于他根本没有时间创建一个多核版本。
据我了解,演员模型应该非常适合连接语言。然而,这是一个相当困难的领域。知道什么样的模型会很好用吗?