似乎在过去20年中出现的大多数新编程语言都是用C语言编写的.这完全有道理,因为C可以看作是一种可移植的汇编语言.但我很好奇的是,这是否以任何方式限制了语言的设计.是什么促使我的问题是考虑如何在Python中直接使用C堆栈来调用函数.显然,编程语言设计师可以用他们想要的任何语言做任何他们想做的事情,但在我看来,你选择编写新语言的语言会让你处于某种心态,并给你一些难以忽视的捷径.这些语言的其他特征是否来自于用该语言编写(好的还是坏的)?
C++标准没有提到有关堆栈或堆的任何内容,它们是特定于实现的,这是事实.
即使它们不是C++标准的一部分,我们最终仍然使用它们,以至于它们就像语言本身的一部分一样,必须考虑到内存或性能目的.
因此我的问题是C++的实现不使用堆栈和堆?
根据这个答案
所有这些编程语言都是无堆栈的
它们无堆叠意味着什么?这是否意味着他们不使用调用堆栈?如果他们不使用调用堆栈,他们使用什么?
Haskell (as commonly implemented) does not have a call stack;
evaluation is based on graph reduction.
Run Code Online (Sandbox Code Playgroud)
真?这很有意思,因为虽然我自己从未体验过它,但我已经读过,如果你不使用折叠函数的严格版本然后强制评估无限折叠,你会得到堆栈溢出.当然,这表明存在堆栈.任何人都可以澄清吗?
我注意到了两种"消息传递"的方法.一个我见过Erlang使用,另一个来自Stackless Python.根据我的理解,这里的区别
Erlang样式 - 消息被发送并排队到接收进程的邮箱中.从那里它们以FIFO为基础被移除.一旦第一个进程发送消息,它就可以继续.
Python样式 - 进程A队列最多发送到进程B.B当前正在执行其他一些操作,因此A被冻结,直到B准备好接收.一旦B打开读取通道,A发送数据,然后它们都继续.
现在我看到Erlang方法的优点是你没有任何被阻止的进程.如果B永远无法接收,A仍然可以继续.但是我注意到在我编写的一些程序中,由于消息的流入量大于流出量,因此Erlang消息框可能会充满数百(或数千)个消息.
现在我还没有用任何框架/语言编写大型程序,所以我想知道你的经历是这样的,如果这是我应该担心的事情.
是的,我知道这是抽象的,但我也在寻找相当抽象的答案.
我想写一个基于网络的MMO游戏,允许用户编写AI并将其作为游戏的一部分运行.我计划将Html5用于图形,并希望它是基于网络的,因此可以从智能手机访问它.我需要找到一种支持沙盒,并发,热代码交换和大型库的编程语言,以使事情变得更容易.
这时候我的研究出现了Erlang,Stackless Python和Lua.任何帮助表示赞赏.
我试图用python设计一个mmo游戏......
我已经评估了stackless,因为它不是一般的python而且它是一个fork,我不想使用它
我试图在pysage candygram dramatis和parley之间做出选择
任何人尝试这些库中的任何一个?
非常感谢您的回复
无堆栈VM我指的是在堆上维护自己的堆栈而不是使用系统"C-stack"的实现.这有很多优点,如continuation和serializable状态,但在C-bindings方面也有一些缺点,特别是对于C-VM-C类型的回调(或VM-C-VM).
问题是这些缺点到底是什么?有人能举一个真实问题的好例子吗?
用于Visual Studio Beta的Python工具(包括对CPython的支持)是否允许您使用Stackless Python进行开发?
如果是这样,您是否可以扩展您的答案以包括设置无Stackless Python环境所需的任何步骤,而不是在现有的VS2010安装上安装PTVS?
以下代码改编自论文(RO Bjarnason,Stackless Scala With Free Monads).
本文的标题总体上指出了所提出的数据结构的目的 - 即在常量堆栈空间中提供递归处理,并让用户以清晰的方式表达递归.
具体来说,我的目标是建立一个monadic结构,在升序时基于恒定堆栈空间中的简单模式匹配,提供不可变树对(二叉树)或列表(n-ary-tree)的结构重写.
sealed trait Free[S[+_], +A]{
private case class FlatMap[S[+_], A, +B](
a: Free[S, A],
f: A => Free[S, B]
) extends Free[S, B]
def map[B](f: A => B): Free[S, B] = this.flatMap((a:A) => Done[S, B](f(a)))
def flatMap[B](f: A => Free[S, B]): Free[S, B] = this match {
case FlatMap(a, g) => FlatMap(a, (x: Any) => g(x).flatMap(f))
case x => FlatMap(x, f)
}
@tailrec
final def resume(implicit S: Functor[S]): Either[S[Free[S, A]], A] …Run Code Online (Sandbox Code Playgroud) 没有堆栈的python实现比Lua的协同程序有什么优势?它们的区别是什么?
我试图找到关于套接字编程的例子并且发现了这个脚本:http: //stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py
通过这个脚本阅读我发现这一行:listenSocket.listen(5)
据我所知 - 它从缓冲区读取5个字节,然后用它做东西......
但如果另一端发送超过5个字节会发生什么?
在该脚本的另一个位置,它根据4个命令检查输入,并查看字符串中是否有\ r \n.不要像"look"加上\ r \n这样的命令弥补超过5个字节?
艾伦