9得票1回答
为什么在Python中将生成器传递给函数时可以省略周围的括号?

我刚刚在Python中尝试使用不同的语法将生成器作为参数传递给函数,并意识到虽然我一直在这样做, >>> sum((j for j in xrange(5))) 10 这也可以正常工作: >>> sum(j for j in xrange(5)) 1...

9得票1回答
在Haskell实现中是否允许Unicode标识符是在哪里指定的?

我想使用非拉丁字符的Unicode字符(在标识符中)编写一些有关IT技术的Haskell示例代码。(这样标识符看起来更自然,对于不使用拉丁字符书写的其他自然语言的人来说也更易懂。)因此,我开始寻找一个适合的Haskell实现。 但是,这个特性在语言规范中指定在哪里呢?当寻找符合规范的实现时,...

9得票5回答
Forth中如何实现LEAVE ... LOOP,因为LEAVE的数量事先未知?

单词LOOP被描述为“解决所有未解决的LEAVE出现的目标”(我加重了语气)。 与IF ... ELSE ... THEN不同,其中前向引用的数量始终为1,LOOP对LEAVE的数量没有限制。那么如何实现呢? 我想到的一种方法是始终在堆栈顶部保持LEAVE的数量。每个LEAVE都会增加此计...

8得票1回答
Nimrod中的Brainfuck解释器

我正在玩弄nim(目前仍称为nimrod),通过在该语言中编写Brainfuck解释器。在没有实现循环的情况下,我有: import os, unsigned const RamSize = 200 type TRam = array[0..RamSize, int] var ...

8得票3回答
异步回调是如何实现的?

各种编程语言如何实现异步回调? 例如在C++中,需要使用“监控线程”来启动std::async。如果在主线程中启动它,则必须等待回调。 std::thread t{[]{std::async(callback_function).get();}}.detach(); 对比。 std:...

8得票5回答
字节码栈 vs 三地址码

设计字节码解释器时,现在是否有关于使用堆栈、三地址格式或其他方式的共识?以下是需要考虑的因素: 目标语言是一种类似于JavaScript的动态语言。 性能很重要,但开发速度和可移植性更为重要。 因此,实现目前将严格作为解释器;如果有足够资源,可能会稍后引入JIT编译器。 解释器将使用C语言...

7得票2回答
如何在不使用"set!"的情况下实现"letrec"?

如何在不使用set!的情况下实现letrec? 看起来,set!是一种命令式编程构造,在使用它时,会失去函数式编程的好处。

7得票1回答
“yield”关键字是一种语法糖吗?它的实现是什么?

可能是重复问题: yield语句实现 我看到了MSDN文档,它说: yield关键字告诉编译器,其所在的方法是一个迭代器块。编译器生成一个类来实现迭代器块中表达的行为。在迭代器块中,yield关键字与return关键字一起用于向枚举器对象提供值。 这意味着yield关键字是语法...

7得票7回答
C:`const`关键字的行为

我听说如果我在使用 ANSI C 编码时,应按变量使用的顺序声明变量,断言指针不为 null 并且索引在范围内,在变量使用之前初始化。 如果我声明一个 const,我能否在一段断言和代码后进行初始化? 在 Java 中,final 初始化必须在声明时进行,但是在 ANSI C 实现中是否一...

7得票1回答
当使用LLVM编写JIT时,如何重复使用C指令集实现?

在llvm的教程和示例中,编译器通过像这样的调用来输出LLVM IR return Builder.CreateAdd(L, R, "addtmp"); 但许多解释器都是这样编写的: switch (opcode) { case ADD: resul...