93得票4回答
C++异常处理运行时是如何实现的?

我对C++异常处理机制的工作方式感到好奇。具体来说,异常对象存储在哪里,以及它如何在多个作用域中传播直到被捕获?它是否存储在某个全局区域中? 由于这可能是与编译器有关的,因此能否有人在g ++编译器套件的上下文中解释这一点?

105得票7回答
为什么接口中的所有字段都隐式地是静态和不可变的?

我只是想了解为什么接口中定义的所有字段都是隐式的 static 和 final。将字段保持 static 的想法对我来说很有意义,因为您无法拥有接口的对象,但是它们为什么是 final(隐式)? 有人知道为什么Java设计者选择使接口中的字段具有 static 和 final 吗?

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

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

16得票1回答
为什么绑定会影响我的地图类型?

我在 REPL 中尝试了一些操作,出现了一些奇怪的行为:Clojure 1.4.0 user=> (type {:a 1}) clojure.lang.PersistentArrayMap user=> (def x {:a 1}) #'user/x user=> (type...

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

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

11得票2回答
将函数式编程语言编译成C语言

假设您正在将一种函数式语言编译成可移植的C代码,并且出于各种原因,您希望进行精确而不是保守的垃圾收集。在C堆栈上,垃圾收集器无法找出什么是指针。我认为有两种解决这个问题的方法: 阴影栈。使每个C函数维护关于什么是指针的簿记信息。例如LLVM建议采用这种方法。 利用编译函数式语言的特点,意味...

10得票5回答
如何实现一个实用的纤程调度器?

我只知道关于使用协程作为基础并实现玩具调度程序的基本知识。但我认为这是一种过于简化的异步调度程序整体视图。在我的想法中,有许多问题没有得到解决。 如何防止CPU运行空闲/等待的调度器?有些纤维只是休眠,而其他纤维则等待来自操作系统的输入。

11得票6回答
一个启用宏的语言如何跟踪源代码以进行调试?

这是一个关于宏(我认为是)更为理论的问题。我知道宏接受源代码并生成对象代码而不对其进行评估,使程序员能够创建更多样化的语法结构。如果我必须对这两个宏系统进行分类,我会说有“C风格”的宏和“Lisp风格”的宏。 由于运行时实际运行的代码不同于源代码,因此调试宏可能有些棘手。 调试器如何跟踪以...

14得票2回答
编译语言中垃圾回收的实现

当实现精确垃圾回收时,总是需要解决如何确定堆栈上的哪些单词是指针,哪些是其他类型的数据,例如整数或浮点数的问题。解释性语言通常通过将所有内容都设为指针来解决这个问题;而对于一些语言(例如Lisp),编译器则通常使用标记位来区分指针和整数。但对于支持完全未装箱机器字长整数和浮点数的Java和C#...

23得票2回答
C#中的foreach如何实现?

foreach 在 C# 中是如何实现的? 我想它的一部分看起来像这样:var enumerator = TInput.GetEnumerator(); while(enumerator.MoveNext()) { // do some stuff here } 不过我不确定到底发生了什么...